3
Seguir
1444
Seguidores

Cómo explotar robots de venta sin sentido con una estrategia de alta frecuencia en 80 líneas de código

Creado el: 2023-12-24 21:37:45, Actualizado el: 2023-12-26 15:40:23
comments   7
hits   5239

Cómo explotar robots de venta sin sentido con una estrategia de alta frecuencia en 80 líneas de código

Observación de oportunidades

Recientemente, descubrí accidentalmente que el mercado de STORJ, una moneda de Binance, es muy extraño. El volumen de operaciones es muy grande y la frecuencia de operaciones es muy rápida. La línea K específica de un minuto es la siguiente. Puedes ver que El volumen de operaciones por minuto es bastante consistente y se puede ver una sombra inferior larga en la línea de minutos. Cómo explotar robots de venta sin sentido con una estrategia de alta frecuencia en 80 líneas de código Al observar la línea K de 1 segundo de Binance, encontramos una pista. Alguien vendería entre 10 000 y 20 000 STORJ cada 5 o 7 segundos, sin importar el costo, y chocaría directamente con un pequeño agujero en la línea K. Se recuperaría en el interior. Esta operación fue obviamente realizada por un robot encargado por Iceberg. Esta operación de venta duró mucho tiempo y el monto total se estimó en decenas de millones de dólares. En muchos casos, el deslizamiento causado alcanzó 11000, lo que significa que el ejecutor de esta estrategia perdió decenas de miles de dólares. Solo por el deslizamiento de la transacción. Dólar. Sin embargo, estas operaciones mecánicas y transacciones activas crean oportunidades obvias para la creación de mercado y el scalping. Cómo explotar robots de venta sin sentido con una estrategia de alta frecuencia en 80 líneas de código

Con solo modificar la estrategia spot original de alta frecuencia, solo tomó unos minutos crear este robot que explota específicamente la venta sin sentido de órdenes iceberg.

Pensamiento estratégico

Dado que habrá ventas en el mercado cada pocos segundos, solo necesitamos encontrar una profundidad de 10 000 en el libro de órdenes de compra y colocar la orden por adelantado. De esta manera, cuando se vende este iceberg, existe una alta probabilidad de que el robot creador de mercado pueda recibirlo. En este momento, el comercio es muy activo y la caída instantánea del precio también desencadena algunas órdenes de compra. El mismo principio se aplica para colocar órdenes de venta y venderlas en consecuencia. Repita la operación. La frecuencia de las transacciones es muy alta, y aunque la tasa de retorno cada vez no es grande, el beneficio total sigue siendo considerable. Por supuesto, la premisa de todo es tener una cuenta con comisiones de transacción bajas. Si las comisiones de transacción por compra y venta son del 0,1%, entonces este espacio no es suficiente para pagar las comisiones de transacción.

Rendimiento de la estrategia

El funcionamiento de la estrategia es el siguiente. Al principio, no se imprimían las ganancias. Lo cambié esta tarde e imprimí las ganancias. El loco robot de ventas ha cambiado la cantidad a aproximadamente 5000 cada vez, por lo que el mejor período de arbitraje ya pasó. Al principio, puedes ganar entre 100 y 200 USD por hora. La clave es que no implica riesgos y es de bajo costo. Mirándolo desde el otro lado, en realidad hay muchas técnicas para órdenes iceberg. Si sabe cómo escribir una estrategia, puede escribir una en FMZ en solo una docena de minutos. Observe la profundidad de las órdenes de compra para determinar el tamaño de la orden y Precio y observar el tamaño de las órdenes de compra activas para ajustar el tamaño de las órdenes pendientes. Y la estrategia de confianza del iceberg con características como ocupar el mercado puede ahorrar fácilmente decenas de miles de dólares.

Cómo explotar robots de venta sin sentido con una estrategia de alta frecuencia en 80 líneas de código

Código fuente de la estrategia

El código de estrategia es muy simple, sólo 80 líneas. Adecuado para principiantes. Algunos parámetros, como la precisión simple, están codificados en el programa. Puede modificarlos usted mismo. Los parámetros necesarios se muestran en la siguiente figura. Se recomienda guardarlos para usarlos en el futuro en caso de que el par de operaciones de intercambio Tiene otra transacción loca. Puedes cobrarles intereses en cualquier momento. Cómo explotar robots de venta sin sentido con una estrategia de alta frecuencia en 80 líneas de código

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()
    }
}