Realisieren Sie einen einfachen Auftragsüberwachungsbot von Cryptocurrency Spot

Schriftsteller:- Ich bin ein Idiot., Erstellt: 2022-04-11 11:54:34, Aktualisiert: 2022-04-11 11:55:08

Realisieren Sie einen einfachen Auftragsüberwachungsbot von Cryptocurrency Spot

Es gibt viele Freunde im Kryptowährungskreis, die einen Auftragsüberwachungsbot benötigen, aber sie leiden unter der langen Zeit, um mit programmatischem Design zu beginnen, wenn sie Null-Basics haben.

Die Funktion dieses Bots besteht darin, zu erkennen, dass, wenn ein Konto eine Kauf- oder Verkaufsaktion hat, andere Konten der Auftragsüberwachung folgen und die Operation auch ausführen. Zuerst definieren wir zwei Themen:

  • Referenzkonto: das überwachte Konto, dessen Aktionen überwacht werden.
  • Auftragsüberwachungskonto: das Auftragsüberwachungskonto; wenn das Referenzkonto eine Aktion durchführt, führt das Auftragsüberwachungskonto dieselbe Aktion durch.

Wenn diese Anforderung erst einmal geklärt ist, denken wir weiter über den nächsten Schritt nach: Wie können wir jede Aktion des Referenzberichts identifizieren?

Wir müssen nur den Symbolbetrag in den neuesten Kontoinformationsdaten mit dem aktuellen Symbolbetrag in den neuesten erhaltenen Kontoinformationsdaten vergleichen. Wenn der Symbolbetrag in den aktuell erhaltenen letzten Kontoinformationsdaten größer ist als der vorherige Datensatz, beweist dies, dass das Referenzkonto eine Kaufoperation ausgeführt hat und die Ausführung erfolgreich war. Umgekehrt wird, wenn weniger Symbole vorhanden sind, eine Verkaufsoperation für das Referenzkonto ausgeführt. Nachdem wir die Aktion erkannt haben, lassen wir andere Plattformkonten die gleiche Operation ausführen.

Wird festgestellt, dass das Referenzkonto einen Handel ausgeführt hat, muss der letzte Konto-Datensatz aktualisiert werden, um ihn mit den beim nächsten Mal erhaltenen Kontoinformationen zu vergleichen, um festzustellen, ob es sich um eine neue Handelsaktion handelt.

Die Strategiecodebeschreibung der obigen Logik:

        // detect order supervising
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)  // detect the currency amount changes 
        var func = null 
        if (amount > 0) {   // the amount increased 
            func = $.Buy    // buy
        } else if (amount < 0) {  // the amount decreased 
            func = $.Sell         // sell 
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {    // when i equals 0, it indicates the reference platform, not to be processed; process other order supervising platforms 
            func(exchanges[i], Math.abs(amount))          // execute the specified trading function, and it could be $.Buy or $.Sell, which needs to be determined by observing whether amount is larger than 0 or less than 0
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc                                  // update the latest account information of the reference platform, to compare it with the next one 

Um das Design zu vereinfachen, verwendet die Strategie die offizielle FMZ-Vorlage [Digital Currency Trading Library] und$.Buyund$.SellDie Funktion ist die Ausführung der Auftragsvorgänge.

Hinzufügen einiger Statusleiste Anzeigen an die Strategie, um die Überwachung der Daten jedes Kontos zu erleichtern.

function test() { 
    // test function 
    var ts = new Date().getTime()    
    if (ts % (1000 * 60 * 60 * 6) > 1000 * 60 * 60 * 5.5) {
        Sleep(1000 * 60 * 10)
        var x = Math.random()
        if (x > 0.5) {
            $.Buy(exchange, x / 10)    
        } else {
            $.Sell(exchange, x / 10)    
        }        
    }
}

function main() {
    LogReset(1)
    if (exchanges.length < 2) {
        throw "no platform of order supervising"
    }
    var exName = exchange.GetName()
    // detect the reference platform 
    if (exName.includes("Futures_")) {
        throw "only support sport order supervising"
    }
    Log("start monitoring", exName, "platform", "#FF0000")
    
    // detect the order supervising platforms 
    for (var i = 1 ; i < exchanges.length ; i++) {
        if (exchanges[i].GetName().includes("Futures_")) {
            throw "Do not support the order supervising of futures platfroms"
        }
    }
    
    var initAcc = _C(exchange.GetAccount)
    while(1) {
        if(IsVirtual()) {
           // test function
           test()  
        }  
        Sleep(5000)
        
        // update the current information of the reference account 
        var nowAcc = _C(exchange.GetAccount)
        
        // the account information of the reference platform
        var refTbl = {
            type : "table", 
            title : "reference platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []
        }
        refTbl.rows.push([exName, nowAcc.Stocks, nowAcc.FrozenStocks, nowAcc.Balance, nowAcc.FrozenBalance])
        
        // the account information of the order supervising platform
        var followTbl = {
            type : "table", 
            title : "order supervising platform",
            cols : ["name", "symbol", "frozen symbol", "assets", "frozen assets"],
            rows : []        
        }
        for (var i = 1 ; i < exchanges.length ; i++) {
            var acc = _C(exchanges[i].GetAccount)
            var name = exchanges[i].GetName()
            followTbl.rows.push([name, acc.Stocks, acc.FrozenStocks, acc.Balance, acc.FrozenBalance])
        }
        
        // status bar display 
        LogStatus(_D(), "\n`" + JSON.stringify(refTbl) + "`", "\n`" + JSON.stringify(followTbl) + "`")
        
        // detect order supervising 
        var amount = (nowAcc.Stocks + nowAcc.FrozenStocks) - (initAcc.Stocks + initAcc.FrozenStocks)
        var func = null 
        if (amount > 0) {
            func = $.Buy
        } else if (amount < 0) {
            func = $.Sell
        } else {
            continue
        }
        
        // execute order supervising 
        Log("Order supervising! Amount:", Math.abs(amount), "#FF0000")
        for (var i = 1 ; i < exchanges.length ; i++) {            
            func(exchanges[i], Math.abs(amount))
        }
        
        // update the information record of the reference account after order supervising 
        initAcc = nowAcc
    }
}

Lassen Sie uns es auf dem echten Bot testen, von FMZ wexApp Simulationsplattform zum Testen. Hier habe ich drei wexApp Konten hinzugefügt, die alle unabhängige Konten sind. Einer von ihnen dient als Referenzplattform, und die anderen zwei dienen als Auftragsüberwachungsplattformen.

img

Dann platzierten wir manuell einen Auftrag über das FMZ-Trading-Terminal, um zu sehen, ob der Bot den Auftrag automatisch überwachen konnte.

img

Sie können sehen, dass der Bot den Handel erkannt hat und den Auftragsüberwachungsvorgang durchgeführt hat.

img

Vollständige Strategie:https://www.fmz.com/strategy/255182

Die Strategie ist nur für das Studium bestimmt, und wenn Sie Fragen haben, würden wir uns freuen, wenn Sie Kommentare dazu hinterlassen.


Mehr