Wie man Hirnlose Roboter ausbeuten und verkaufen kann mit einer 80-Zeilen-code-Hochfrequenz-Strategie

Schriftsteller:Das Gras, Erstellt: 2023-12-24 21:37:45, Aktualisiert: 2023-12-26 15:40:23

img

Gelegenheit zur Beobachtung

In den letzten zwei Tagen, als ich den Markt betrachtete, stellte ich unabsichtlich fest, dass Binance einen Bitcoin STORJ-Markt hat. Es ist seltsam, dass das Handelsvolumen sehr groß ist und die Handelsfrequenz sehr schnell ist.imgBei der Beobachtung der 1-Sekunden-K-Linie von Binance wurde festgestellt, dass die Endpunkte, bei denen jemand alle 5- bis 7-s einen Preis von 20 000 STORJ auf den Markt bringt, unabhängig von den Kosten, direkt auf der K-Linie einen kleinen Putt bohrt, und der Preis in kurzer Zeit wiederhergestellt wird. Diese Operation wurde offensichtlich von einem von Eisberg beauftragten Roboter verursacht. Diese verkauften Operationen dauerten sehr lange, die Gesamtzahl wurde auf die zehn Millionen Dollar geschätzt.img

Der Roboter, der speziell für die Ausbeutung des Hirnlosen, der den Eisberg verkauft, wurde in wenigen Minuten mit der einfachen Änderung der ursprünglichen Strategie der Hochfrequenz-Handlung fertiggestellt.

Strategische Ideen

Da der Marktpreis alle paar Sekunden verkauft wird, müssen wir nur 10.000 Tiefen im Kaufbuch finden und die Einheiten vorne hängen. So ist es sehr wahrscheinlich, dass der Marktroboter genau das empfängt, wenn dieser Eisberg verkauft wird, und die Transaktionen sind sehr aktiv. Der sofortige Preisverfall hat auch einige Einheiten ausgelöst.

Strategische Leistung

Die Strategie zeigt sich wie folgt: Anfangs wurden keine Erträge gedruckt, heute Nachmittag wurden sie geändert, die Erträge wurden ausgedruckt, der verrückte Verkaufsroboter hat die Menge jedes Mal auf etwa 5000 geändert, also ist die optimale Zeit vorbei. Anfangs kann man wahrscheinlich 100-200U pro Stunde kaufen, der Schlüssel ist risikofrei und kostengünstig. Von hier aus gesehen, gibt es im Gegenteil auch viele Techniken, wenn man eine Strategie schreibt, kann man in FMZ ein paar zehn Minuten verbringen, um die Bestellungen zu schreiben.

img

Strategie-Quellcode

Der Strategie-Code ist sehr einfach, nur 80 Zeilen. Für Anfänger sind einige Parameter, wie z.B. die Präzision, bereits im Programm enthalten und können selbst geändert werden.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()
    }
}

Mehr

KontrollpunktWie viel kostet diese Strategie, um zu laufen?

yc123hWenn diese Strategie wirksam ist, dann ist es, wenn man zu Beginn jeder Runde oft zwei versagte Bestellungen sieht, bevor man sie zurücknimmt (d.h. dass alle Kauf- und Verkaufsbedingungen wirksam sind).

Das GrasDas ist ein Null-Verfahren.

yc123hDanke, aber ich möchte Ihnen auch die Parameter fragen. Wie optimieren Sie die Parameter für eine solche Hochfrequenzstrategie? Zum Beispiel, ich sehe die Strategie aus dem Jahr 2014, die Sie geteilt haben, die Standard-Trainingsintervalle erreichen 3500 ms, wenn es sich um eine hohe Frequenz handelt, sollte das Trainingsintervall nicht ein wenig kürzer sein.

Das GrasDie Abschaffung ist ein Versagen, es ist ein Deal, man muss Geld verdienen, um zu beweisen, dass es funktioniert.