avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Erstellt in: 2022-06-22 14:23:26, aktualisiert am: 2023-09-18 20:24:01
comments   1
hits   1736

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Zum Debuggen von Strategien in einem Backtesting-System werden in der Regel nurLog()Funktion. Die DEBUG-Effizienz dieser Art ist sehr gering und für Anfänger mit wenig Erfahrung im Programmtesten schwierig. fürJavaScriptStrategie-Debugging der SpracheChromeBrowser bieten bessere Unterstützung. Es kann während des Backtests Breakpoint-Debugging, Einzelschritt-Debugging, Variablenwertüberwachung, Ausdrucksüberwachung usw. realisieren. Dann lernen wir, wie man mit dieser Methode die FMZ steuert.JavascriptDEBUG beim Backtesting von Strategien in der Sprache. Beachten Sie, dass nur auf FMZJavascriptDie Richtlinien der Sprache unterstützen diesen Ansatz zum Debuggen.

Auf der FMZ-PlattformdebuggerAnweisung

Fügen Sie den Richtliniencode der JavaScript-Sprache auf FMZ eindebuggerAnweisung, die die Programmausführung während des Backtestings unterbrechen kann.

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) {
            // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性,属性名区分大小写
            var id = exchange.Buy(t.buy, 0.1)    
            var orderBuy = exchange.GetOrder(id)
        }
        Sleep(500)
    }
}

Aus dem Backtest-Konfigurationscode

/*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"}]
*/

Sie können sehen, dass die Börse, die wir während des Backtests hinzugefügt haben, Binance Spot ist und die Konfiguration wie im Screenshot dargestellt ist:

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Wenn wir uns den Strategiecode weiter ansehen, können wir feststellen, dassvar t = exchange.GetTicker()Unter diesen Satz schrieben wirdebuggerDie Anweisung entspricht hier dem Setzen eines Haltepunkts und das Programm wird angehalten, wenn es diese Position erreicht. Mehreredebugger, aber es wird nicht empfohlen, dies zu tun. Setzen Sie einfach einen Haltepunkt an einer bestimmten Stelle. Nachfolgende Haltepunkte können in der DevTools-Debugging-Funktion des Browsers gesetzt werden.

Sie müssen zuerst den Chrome-Browser öffnenDevToolsFühren Sie dann den Backtest durch, den Strategiecodedebuggerwird wirksam, andernfallsdebuggerEs wird ignoriert und das Backtest-Strategieprogramm kann nicht unterbrochen und am Haltepunkt gestoppt werden. OffenDevToolsNach dem Backtesting der Strategie wird das Strategieprogramm beim ersten Satz unterbrochendebuggerStandort,debuggerKann auch im globalen Bereich des Richtliniencodes festgelegt werden.

Wir öffnen den Chrome-BrowserDevToolsEs gibt zwei Arten von Werkzeugen:

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

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Wenn wir auf „Untersuchen“ klicken, wird die DevTools-Schnittstelle angezeigt.

  • 2. Verwenden Sie Tastenkombinationen

Sie können es auch über die Tastenkombination öffnen.Command+Option+I (Mac)oderControl+Shift+I(Windows、Linux)Offen DevTools

OffenDevToolsAnschließend, wie in der Abbildung dargestellt:

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Die Debug-Schnittstelle im Browser der JavaScript-Sprachstrategie

Wenn wir nach dem obigen Test auf die Schaltfläche „Backtesting starten“ klicken, um die Strategie zu testen, wird aufgrund der Einstellung im CodedebuggerAnweisung, die Strategie unterbricht und wartet an der entsprechenden Stelle. Der Backtest scheint festzustecken, wie unten gezeigt:

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Man sieht, dass in der StrategiedebuggerMarkieren Sie die Unterbrechungsstelle. Das gesamte Programm führt nur n aus, das 1 zugewiesen ist, und t, dasGetTickerDie von der Funktion zurückgegebenen Marktdaten. Im roten Feld im obigen Bild können Sie die spezifischen Variablenwerte sehen, was es sehr bequem macht, die Werte verschiedener Variablen zu beobachten, wenn die Strategie ausgeführt wird.

Manuelles Setzen von Haltepunkten zum Debuggen

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

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Klicken Sie auf „Skriptausführung fortsetzen“, um die Skriptausführung fortzusetzen. Das Programm wird bis zum nächsten Haltepunkt ausgeführt. Wenn es keinen Haltepunkt gibt oder das Programm einen Fehler aufweist und eine Ausnahme verursacht, wird der Backtest beendet.

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Darüber hinaus gibt es Schaltflächen, mit denen Sie die nächste Funktion überspringen, zum nächsten Funktionsaufruf gehen, aus dem aktuellen Funktionsaufruf herausspringen, einen einzelnen Schritt ausführen, alle Haltepunkte ignorieren usw. können.

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Geben Sie diesen Testcode DEBUG ein

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Wenn wir an diesem Punkt weiterhin auf die Schaltfläche „Skriptausführung fortsetzen“ klicken, um die Ausführung fortzusetzen, tritt im Strategieprogramm eine Ausnahme auf, der Backtest wird beendet und eine Ausnahmefehlermeldung wird ausgegeben.

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

Dies ist ein häufiger Fehler von Anfängern, die bei einem Strukturattributnamen nicht zwischen Groß- und Kleinschreibung unterscheiden.

var id = exchange.Buy(t.buy, 0.1)  //  下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。

Dies hat zur Folge, dass der an die Funktion „exchange.Buy“ übergebene Preis eine nicht definierte Variable ist, was zu einer Programmausnahme führt und den Backtest beendet.

Wenn das Programm an einem Haltepunkt stoppt, wird diese Codezeile nicht ausgeführt. Wir klicken weiterhin auf die Schaltfläche „Zum nächsten Funktionsaufruf gehen“.

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Springen Sie zum Aufruf der Funktion „Börse kaufen“.

Backtesting-Debugging der JavaScript-Strategie im Chrome-Browser DevTools

Beachten Sie, dass der Preis eine undefinierte Variable ist.

Mit der oben beschriebenen Methode können Sie Programmfehler einfach Schritt für Schritt finden. Viele Fehler, die Anfänger häufig machen: beispielsweise ungültige Zugriffe auf Array-Indizes, Verweise auf undefinierte Variablen, falsches Schreiben von Ausdrücken usw. Auf diese Weise lässt sich das Programm leicht debuggen.