Como usar estratégias de 80 linhas de código de alta frequência para explorar robôs sem cérebro para venda

Autora:Ervas daninhas, Criado: 23 de dezembro de 2021

img

Oportunidades de observação

Os últimos dois dias, ao olhar para o mercado, descobri que o Bitcoin tem um mercado Bitcoin STORJ. É estranho, o volume de transações é grande e a frequência de transações é muito rápida.imgObservando a linha K de um segundo do Binance, descobriu-se que o terminal, onde alguém vende 20 mil STORJs a cada 5-7s, sem considerar os custos, cavou um pequeno poço diretamente na linha K, e o preço se recupera em curto prazo. A operação foi obviamente causada por um robô contratado pelo iceberg. A duração da operação vendida foi muito longa, com um total estimado de 10 milhões de dólares, muitas vezes causando um ponto de queda de 1 por mil, o que significa que apenas o ponto de queda da negociação, o executante da estratégia perdeu centenas de milhares de dólares.img

A estratégia original de alta frequência em tempo real foi simplesmente alterada e, em poucos minutos, o robô que se especializou em explorar este menino sem cérebro foi contratado para vender o iceberg.

Ideias estratégicas

Uma vez que o preço do mercado é vendido a cada poucos segundos, basta encontrar uma profundidade de 10.000 no livro de compras e pendurar o único na frente. Assim, quando esse iceberg é vendido, há uma alta probabilidade de que o robô do mercado receba exatamente, e as transações são muito ativas, a queda momentânea do preço também desencadeou alguns pagamentos, o mesmo raciocínio pode ser lançado em sequência, assim operação repetida. A freqüência de transações é muito alta, mesmo que o rendimento total de cada vez seja pequeno.

Desempenho estratégico

A estratégia é a seguinte: no início, os ganhos não foram impressos, hoje à tarde foram alterados, e os ganhos foram impressos, o robô que vendeu loucamente mudou a quantidade de cada vez para cerca de 5.000, então o período de melhores preços passou. No início, provavelmente poderia fazer 100-200U por hora, a chave é que não há risco, baixo custo. De outro lado, a contratação do iceberg também tem muitas técnicas, se você escrever uma estratégia, em FMZ, você pode escrever uma ordem de compra em profundidade para determinar o tamanho e o preço do pedido, observe a estratégia de contratação do iceberg, que permite ajustar o tamanho do pedido de forma ativa e ocupar características como o tamanho do disco, economizando facilmente cerca de dez milhares de dólares.

img

Código de origem da estratégia

O código da estratégia é muito simples, apenas 80 linhas. Para iniciantes, alguns parâmetros, como a precisão simples, já estão escritos no programa, podem ser alterados por si mesmos, os parâmetros necessários são descritos abaixo, recomendados para serem salvos, caso a troca se torne contra os traders que não gostam, para cobrar juros a qualquer momento.img

function CancelPendingOrders() {
    var orders = _C(exchange.GetOrders)
    for (var j = 0; j < orders.length; j++) {
        exchange.CancelOrder(orders[j].Id, orders[j])
    }
}

function onexit(){
    CancelPendingOrders()
}

function GetPrice(Type, Depth) {
    var sumAmount = 0
    var checkAmount = Type == "Buy" ? CheckBuyAmount : CheckSellAmount
    var deep = Type == "Buy" ? Depth.Bids : Depth.Asks
    for(var i = 0; i < Math.min(20, deep.length); i++) {
        if(Type == "Buy"  && deep[i].Price == lastBuyPrice && buyId){
            sumAmount += deep[i].Amount - amountBuy //这里要减去自己的挂单
        }else if(Type == "Sell"  && deep[i].Price == lastSellPrice && sellId){
            sumAmount += deep[i].Amount - amountSell
        }else{
            sumAmount += deep[i].Amount
        }
        if(sumAmount >= checkAmount){
            return deep[i].Price
        }
    }
    return deep[19].Price
}

function OnTick() {
    var depth = _C(exchange.GetDepth)
    var buyPrice = _N(Math.min(GetPrice("Buy", depth) + 0.0001, depth.Asks[0].Price-0.0001) , 4) //保证在盘口
    var sellPrice = _N(Math.max(GetPrice("Sell", depth) - 0.0001, depth.Bids[0].Price+0.0001), 4)
    LogStatus('buy_price:'+buyPrice, '  sell price: '+sellPrice)
    if ((sellPrice - buyPrice) < DiffPrice) {
        buyPrice = 0
    }
    if(sellPrice != lastSellPrice && sellId){
        exchange.CancelOrder(sellId);
        sellId = 0
        lastSellPrice = 0
    }
    if(buyPrice != lastBuyPrice && buyId){
        exchange.CancelOrder(buyId);
        buyId = 0
        lastBuyPrice = 0
    }   
    var acc = _C(exchange.GetAccount)
    if(account.Stocks+account.FrozenStocks != acc.Stocks+acc.FrozenStocks){
        LogProfit((acc.Stocks+acc.FrozenStocks)*depth.Bids[0].Price+acc.Balance+acc.FrozenBalance - 2000)
        Log('free '+acc.Stocks, ' lock: '+ acc.FrozenStocks, ' total: ' , (acc.Stocks+acc.FrozenStocks)*depth.Bids[0].Price+acc.Balance+acc.FrozenBalance)
    }
    account = acc
    amountBuy = _N(Math.min(account.Balance / buyPrice - 0.1, Amount), 0)
    amountSell = _N(account.Stocks, 0)
    if (sellPrice > 0 && amountSell > 40 && sellId == 0) {
        sellId = exchange.Sell(_N(sellPrice,4), amountSell)
        lastSellPrice = sellPrice
    }
    if (buyPrice>0 && amountBuy > 40 && buyId == 0) {
        buyId = exchange.Buy(_N(buyPrice,4), amountBuy)
        lastBuyPrice = buyPrice
    }
    Sleep(Interval)
}
var account = {Stocks:0, FrozenStocks:0, Balance:0, FrozenBalance:0}
var buyId = 0
var sellId = 0
var lastBuyPrice = 0
var lastSellPrice = 0
var amountSell = 0
var amountBuy = 0
function main() {
    CancelPendingOrders()
    while (true) {
        OnTick()
    }
}

Mais.

ponto de controloMeu Deus, quanto custa essa estratégia de correr?

yc123hProfessora, se esta estratégia for eficaz, será que, no início de cada turno de treinamento, é frequente ver mensagens de dois pedidos falhados antes da revogação (ou seja, ambas as compras e vendas estão em vigor) para mostrar que a estratégia é eficaz?

Ervas daninhasIsso é zero.

yc123hObrigado, mas também gostaria de lhe perguntar sobre os parâmetros. Como essa estratégia de alta frequência pode otimizar os parâmetros. Por exemplo, eu vi a estratégia que você compartilhou em 2014, o intervalo de treinamento por padrão chegou a 3500 ms, se for alta frequência, o intervalo de treinamento deve ser um pouco mais curto.

Ervas daninhasA revogação falha é um negócio, ganha dinheiro para mostrar que funciona.