Die Ressourcen sind geladen. Beförderung...

JavaScript-Strategie-Backtesting ist in DevTools des Chrome-Browsers debuggt

Schriftsteller:Die Erfinder quantifizieren - Kleine Träume, Erstellt: 2022-06-24 14:10:02, aktualisiert: 2023-09-25 19:50:23

img

JavaScript-Strategie-Backtesting ist in DevTools des Chrome-Browsers debuggt

Für Debugging-Strategien in Backtesting-Systemen werden in der Regel nur dieLog()DEBUG ist sehr ineffizient und schwierig für Anfänger mit wenig Erfahrung.JavaScriptSprache, dieChromeDer Browser unterstützt es besser, was das Debugging von Breakpoints, das Debugging in einem einzigen Schritt, die Überwachung von Variablenwerten, die Überwachung von Ausdrücken und so weiter während des Backtestings implementieren kann.JavascriptDiese Debugging-Methode wird nur fürJavaScriptSprachenstrategien auf der FMZ-Plattform.

DiedebuggerBefehl auf der FMZ-Plattform

Einfügen derdebuggerDer Befehl in den Strategiecode der JavaScript-Sprache auf FMZ ermöglicht es, die Programmdurchführung während des Backtestings zu unterbrechen.

Wir verwenden den folgenden Teststrategiecode:

/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

function main() {
    var n = 1 
    while (true) {
        var t = exchange.GetTicker()
        debugger
        var r = exchange.GetRecords()
        if (n == 1) {
            // When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute
            var id = exchange.Buy(t.buy, 0.1)    
            var orderBuy = exchange.GetOrder(id)
        }
        Sleep(500)
    }
}

Konfiguration von Code aus dem Backtesting

/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

Hier können wir sehen, dass die Börse, die wir für Backtesting hinzugefügt haben, Binance Spot ist, die Konfiguration ist wie im Screenshot gezeigt:

img

Wenn wir weiter auf den Strategie-Code schauen, können wir sehen, dass wir diedebuggerBefehl unter dervar t = exchange.GetTicker()Das ist gleichbedeutend mit einem Breakpoint hier, und die Ausführung des Programms wird an dieser Position aufhören.debuggers kann im Strategiecode verwendet werden, aber es wird nicht empfohlen, dies zu tun, verwenden Sie einfach einen Bruchpunkt an einem bestimmten Ort, und nachfolgende Bruchpunkte können in der DevTools-Debugging-Funktion des Browsers festgelegt werden.

Wir müssen dieDevToolsDer Backtest wird dann durch den Chrome-Browser durchgeführt.debuggerDie in der Strategie enthaltenen Bestimmungen werden in Kraft treten.debuggerDas Strategieprogramm des Backtests kann nicht am Ausbruchpunkt unterbrochen oder gestoppt werden.DevToolsUm die Strategie zurück zu testen, wird das Strategieprogramm bei der ersten Einstellung unterbrochen.debuggerPosition und diedebuggerDie Kommission hat in der Mitteilung über die Zusammenarbeit mit den Mitgliedstaaten über die

Es gibt zwei Möglichkeiten für uns, dieDevToolsWerkzeug des Chrome-Browser:

    1. Wir klicken mit der rechten Maustaste auf die Seite, um das Popup-Menü zu öffnen.

    Wir klicken auf Check, um die DevTools-Schnittstelle anzuzeigen.

    1. Verwenden Sie die Verknüpfungstasten.

    Sie können auch die Abkürzung Tasten verwenden, um zu öffnenDevToolsdurch DrückenCommand+Option+I (Mac)oderControl+Shift+I (Windows, Linux).

Nach dem ÖffnenDevToolswie in der Abbildung dargestellt:

img

Schnittstelle von DEBUG im Browser für die JavaScript-Sprachstrategie

Nach dem obigen Test, wenn wir auf die Schaltfläche Start Backtest klicken, um die Strategie zurück zu testen, bricht die Strategie ab und wartet an der entsprechenden Position, weildebuggerDer Backtest scheint festzustecken, wie folgt:

img

Es ist zu sehen, dass bei der Position markiert durch die Strategie unterbrochendebugger, das gesamte Programm führt nur die Marktdaten aus, die von der Funktion mit dem Wert von n 1 und dem Wert von t zurückgegeben werden.GetTickerSie können die spezifischen Variablenwerte im roten Feld der obigen Abbildung sehen, so dass der Wert jeder Variablen beim Ausführen der Strategie leicht zu beobachten ist.

Setzen Sie manuelle Debugging-Breakpoints

Wir können auf die Zeilennummer auf der linken Seite des Codes klicken, um einen Bruchpunkt hinzuzufügen.

img

Klicken Sie auf resume script execution, um die Ausführung des Skripts fortzusetzen, das Programm läuft zum nächsten Bruchpunkt, wenn es keinen Bruchpunkt gibt oder das Programm einen Fehler hat, der eine Ausnahme verursacht, endet der Backtest.

img

Es gibt auch einige Schaltflächen, die implementiert werden können, z. B. überspringen Sie die nächste Funktion, gehen Sie zum nächsten Funktionsanruf, treten Sie aus dem aktuellen Funktionsanruf aus, führen Sie den einzelnen Schritt aus, ignorieren Sie alle Bruchpunkte usw.

img

Testen Sie den Code DEBUG

img

An diesem Punkt, wenn wir weiterhin auf die Schaltfläche resume script execution klicken, um die Ausführung fortzusetzen, tritt eine Ausnahme im Strategieprogramm auf, und der Backtest endet mit einer gedruckten Ausnahmefehlermeldung.

main:17:31 - TypeError: Cannot convert "undefined" to double

Nicht groß- und kleinbuchstabensensibel zu sein für einen Strukturbeitrag ist ein häufiger Fehler von Anfängern.

var id = exchange.Buy(t.buy, 0.1)  //  When placing a purchase order, if there is an error here, an error will be reported, and null will be returned, and GetTicker will return data t with Buy attribute only, and the attribute name is case-sensitive without buy attribute

Die Preisübertragung in die Exchange.Buy-Funktion ist eine undefinierte Variable, die eine Ausnahme des Programms verursacht und den Backtest beendet.

Wenn das Programm an der Breakpoint-Position stoppt, wird diese Codezeile nicht ausgeführt. Wir klicken weiterhin auf die Schaltfläche step into next function call.

img

Gehen Sie zur Börse. Kaufen Sie Funktion.

img

Hier können wir sehen, dass der Preis eine undefinierte Variable ist.

Durch die Verwendung des obigen Ansatzes ist es einfach, die Programmfehler Schritt für Schritt herauszufinden. Viele Anfänger machen oft Fehler, zum Beispiel wird der Index eines Arrays außerhalb der Grenzen aufgerufen, undefinierte Variablen werden referenziert, Ausdrücke werden falsch geschrieben, usw. All dies ist einfach, um das Programm zu DEBUG.


Verwandt

Mehr