A estratégia foi partilhada em:https://www.fmz.com/strategy/1088A estratégia é a minha principal estratégia desde que comecei com moeda digital. Após melhoria e modificação contínuas, tornou-se mais complicada, mas a ideia principal não mudou. A versão compartilhada é a versão original sem bugs óbvios. É a mais simples e clara. Não há gerenciamento de posição. Cada transação está cheia e não há reinicialização, mas é suficiente para explicar o problema.
A estratégia foi executada a partir de agosto de 2014 até o início deste ano, quando as taxas de troca. Durante o período, a operação foi bastante boa, e o tempo de perda foi muito pequeno. O capital aumentou de 200 yuans para 80 Bitcoin. O processo específico pode ser visto emO modo de transacção automatizada de moeda virtualsérie de artigos emXiaocao
O gráfico a seguir mostra a curva dos activos totais convertidos em moeda:
O princípio desta estratégia é muito simples. Pode ser entendido como uma estratégia de criação de mercado de quase alta frequência. Você pode querer bater nas pessoas depois de lê-lo, pode ganhar dinheiro?! Naquele momento, quase todos podiam escrever. Eu não esperava que fosse tão eficaz no início. Pode-se ver que devemos prestar atenção à prática assim que temos ideias em mente. Em 2014, quando os robôs Bitcoin surgiram pela primeira vez, era muito fácil escrever estratégias de criação de dinheiro. Como todas as estratégias de alta frequência, esta estratégia também é baseada em livro de pedidos.
Podemos ver a ordem de compra à esquerda, mostrando o número de ordens a preços diferentes, e no lado direito é a ordem de venda. Pode-se imaginar que se alguém quiser comprar Bitcoin, se ele não quiser esperar a ordem e esperar, ele pode escolher apenas aceitar a ordem. Se ele tiver um grande número de ordens, isso fará com que um grande número de transações vendam a ordem e a lista, o que afetará o preço. No entanto, esse impacto não continuará. Algumas pessoas querem aceitar a ordem e vender, e o preço provavelmente se recuperará em um tempo muito curto. Por outro lado, é semelhante ao entendimento de que alguém quer vender moedas. Tomemos como exemplo a ordem pendente na figura. Se você quiser comprar 5 moedas diretamente, o preço chegará a 10377. Neste momento, se alguém quiser vender 5 moedas diretamente, o preço chegará a 10348. A diferença de preço é a margem de lucro. A estratégia pendirá uma ordem a um preço ligeiramente menor que 10377, como 10376.99, e comprará a um preço ligeiramente maior que 10348, como 10348.01. Isso ocorre porque, se a situação acontecer, obviamente, ganhará a diferença. Embora não seja tão perfeito toda vez, as chances de ganhar dinheiro são incrivelmente altas, considerando as probabilidades. Explique a operação específica com os parâmetros da estratégia atual. Este parâmetro, é claro, não está disponível, apenas para ilustração. Ele procurará um preço com uma quantidade acumulada de 8 moedas, aqui é 10377, então o preço de venda neste momento é o preço menos 0,01 (a quantidade pode ser aleatória). Da mesma forma, ele procurará para baixo para uma quantidade acumulada de 8 moedas, aqui é 10348, então o preço de venda neste momento é 10348,01, e a diferença entre o preço de compra e venda neste momento é 10376,99-10348,01 = 28,98, que é maior do que a diferença de preço pré-estabelecida de 1,5, então ele encontrará uma ordem para esperar a transação com esses dois preços, se a diferença de preço for menor que 1,5, ele também encontrará um preço para procurar uma ordem, como o preço de abertura mais ou menos 10, e esperar mais (é apropriado continuar a seguir a profundidade pendente). Além disso, observa-se que esta estratégia está relacionada apenas com as ordens pendentes profundas atuais e não se importa com o mercado histórico e sua própria transação histórica. A estratégia também não tem conceito de perda única. Na verdade, a taxa de ganho de uma única transação é muito alta.
O código completo pode ser visto no meu compartilhamento de estratégia emwww.fmz.com. Aqui, apenas as funções lógicas principais são explicadas. Sem quaisquer alterações, o bot de simulação que vem com botvs realmente funciona perfeitamente. Esta é uma estratégia de mais de três anos atrás, e a plataforma ainda a suporta agora. É muito emocionante. Primeiro de tudo, para obter a função GetPrice (GetPrice), você precisa obter as informações de profundidade da ordem. Observe que o comprimento da informação de profundidade da ordem de diferentes plataformas é diferente, e mesmo se todas as ordens forem percorridas, ainda não há quantidade necessária (esta situação será causada por muitas ordens de rede de 0,01 na fase posterior).
function GetPrice(Type) {
//_C() is the fault-tolerant function of the platform
var depth=_C(exchange.GetDepth);
var amountBids=0;
var amountAsks=0;
//Calculate the buy price and get the cumulative depth to a preset price
if(Type=="Buy"){
for(var i=0;i<20;i++){
amountBids+=depth.Bids[i].Amount;
//The parameter floatamountbuy is the preset accumulated depth
if (amountBids>floatamountbuy){
//Add 0.01 to make the order in the front
return depth.Bids[i].Price+0.01;}
}
}
//Calculate the selling price similarly
if(Type=="Sell"){
for(var j=0; j<20; j++){
amountAsks+=depth.Asks[j].Amount;
if (amountAsks>floatamountsell){
return depth.Asks[j].Price-0.01;}
}
}
//After traversing the full depth but still not meeting the demand, a price is returned to avoid bugs
return depth.Asks[0].Price
}
A função principal de cada loop é onTick(). O tempo de loop definido aqui é de 3,5 s. Cada loop cancelará a ordem original e re-penderá a ordem. Quanto mais simples for, menos encontrará um bug.
function onTick() {
var buyPrice = GetPrice("Buy");
var sellPrice= GetPrice("Sell");
//diffprice is the preset spread, if the bid/ask spread is less than the preset spread, it will pend a relatively deeper price.
if ((sellPrice - buyPrice) <= diffprice){
buyPrice-=10;
sellPrice+=10;}
//Cancel all the original orders. In fact, the new price is often the same as the price of the order. At this time, it is not necessary to cancel.
CancelPendingOrders()
//Get account information to determine how much money and how many currencies are currently in the account.
var account=_C(exchange.GetAccount);
//The amount of Bitcoins that can be bought, _N() is the precision function of the platform.
var amountBuy = _N((account.Balance / buyPrice-0.1),2);
//The amount of Bitcoin that can be sold, note that there is no position limit, buy and sell as much as you can, as I had very little money at the time.
var amountSell = _N((account.Stocks),2);
if (amountSell > 0.02) {
exchange.Sell(sellPrice,amountSell);}
if (amountBuy > 0.02) {
exchange.Buy(buyPrice, amountBuy);}
//Sleep and enter the next loop
Sleep(sleeptime);
}
O programa inteiro é de apenas mais de 40 linhas, o que parece muito simples, mas também me levou mais de uma semana naquele momento, que era na plataforma botvs. A maior vantagem é que começou cedo. Em 2014, o mercado era dominado por tijolos em movimento, e a estratégia de alta frequência de rede e captura de estoque não era demais, o que tornou a estratégia como um peixe na água. Mais tarde, a concorrência tornou-se cada vez mais feroz, e eu tinha mais dinheiro e enfrentei muitos desafios. Eu tive que fazer grandes mudanças a cada outra vez para lidar com isso, mas foi geralmente suave. Sob a condição de que a plataforma de negociação não cobra, é um paraíso para a negociação programada. Porque os investidores de varejo tendem a operar se não houver cobrança, fornece oportunidade para taxas de alta frequência e arbitragem. Tudo isso basicamente termina com a taxa de frequência de 0,1-0,2%. No entanto, ainda há muito espaço para estratégias quantitativas de alta frequência.