Wie man Hirnlose Verkaufs-Bots mit einer Hochfrequenz-Strategie in 80 Codezeilen ausnutzt

Schriftsteller:Lydia., Erstellt: 2023-12-25 13:12:00, aktualisiert: 2024-01-02 21:23:26

img

Beobachtung der Chancen

Vor kurzem fand ich, dass Binance hat eine Währung STORJ Markt ist sehr seltsam unbeabsichtigt, wenn ich den Markt beobachtete, das Handelsvolumen ist sehr groß, und die Handelsfrequenz ist sehr schnell, die spezifische ein-Minuten-K-Linie der folgenden Grafik, können wir sehen, dass das Handelsvolumen jeder Minute sind konsistent, und die Minute K-Linie kann in einer langen unteren Schattenlinie gesehen werden.

img

Beobachten Sie mit Binance 1-Sekunde K-Linie, Ich fand heraus, das Ende der Geschichte, jemand wird vermarktet 10.000-20.000 STORJs alle 5-7s, unabhängig von den Kosten, und brechen ein kleines Loch in der K-Linie direkt, während der Preis erholt sich auf kurze Sicht. Diese Operation wurde offensichtlich durch einen Roboter auf einer Eisberg-Kommission verursacht. Diese Verkaufsaktion dauerte für eine sehr lange Zeit, insgesamt geschätzte $10 Millionen Niveau, und in vielen Fällen verursacht Schlupf von bis zu 0,1%, was bedeutet, dass der Ausführende dieser Strategie verlor Zehntausende von Dollar in Schlupf auf dem Handel allein. Aber mit einer solchen mechanischen Operation und aktiven Handel, gab es eine klare Gelegenheit für den Markt Scalping machen.

img

Eine einfache Änderung der ursprünglichen Spot-HF-Strategie, und in wenigen Minuten bekam ich diesen Bot, der sich auf den Ausnutzung dieses hirnlosen Verkaufs von Eisbergprovisionen spezialisiert hat.

Strategie-Idee

Da der Markt alle paar Sekunden zum Marktpreis verkauft, müssen wir nur die 10k-Tiefe im Buy-Order-Buch finden und den Auftrag davor aufhängen. So dass, wenn der Eisberg verkauft, eine hohe Wahrscheinlichkeit besteht, dass der Market-Making-Roboter nur empfangen kann, und zu diesem Zeitpunkt ist die Transaktion sehr aktiv, der momentane Preisrückgang auch einige Buy-Orders auslöste. Auf die gleiche Weise können Hanging-Sell-Orders in den Trend geworfen werden, so dass wiederholte Operationen. Die Häufigkeit der Transaktionen ist sehr hoch, auch wenn jedes Mal die Rendite nicht sehr groß ist, ist die Gesamtrendite auch erheblich. Natürlich ist die Prämisse von allem, ein niedriges Gebührenkonto zu haben, wenn sowohl die Kauf- als auch die Verkaufsgebühren 0,1%, dann reicht der Platz nicht aus, um die Gebühren zu bezahlen.

Strategieleistung

Die Strategie funktioniert wie folgt, zunächst wurde keiner der Gewinne gedruckt, also habe ich sie heute Nachmittag geändert, und habe die Gewinne gedruckt, die verrückten Verkaufsroboter haben das Volumen auf ungefähr 5000 pro Mal geändert, also ist es über die optimale Zeit für Arbitrage. Ich mache wahrscheinlich zuerst 100-200U pro Stunde, der Schlüssel ist risikofrei und kostengünstig. Auf der anderen Seite hat die Eisberg-Kommission tatsächlich viele Fähigkeiten, wenn Sie wissen, wie man eine Strategie schreibt, können Sie zehn Minuten auf FMZ verbringen, um die Eisberg-Kommission zu schreiben, die die Tiefe der Bestellung beobachtet, um die Größe und den Preis der Bestellung zu bestimmen, beobachtet die Größe der aktiven Bestellung, um die Größe der ausstehenden Bestellung anzupassen und den Markt und andere Merkmale zu übernehmen, und spart leicht Zehntausende von Dollar bei der Überwachung.

img

Strategie-Quellcode

Der Strategie-Code ist sehr einfach, nur 80 Zeilen, die für Anfänger geeignet ist, hier sind einige der Parameter wie Bestellgenauigkeit und so weiter im Programm festgeschrieben, können Sie die Parameter wie folgt ändern.

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 //Subtract your own pending orders here
        }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) //Guaranteed at the market
    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
var log_account_time = 0
function main() {
    CancelPendingOrders()
    while (true) {
        OnTick()
    }
}

Mehr