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.JavaScript
Sprache, dieChrome
Der 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.Javascript
Diese Debugging-Methode wird nur fürJavaScript
Sprachenstrategien auf der FMZ-Plattform.
debugger
Befehl auf der FMZ-PlattformEinfügen derdebugger
Der 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:
Wenn wir weiter auf den Strategie-Code schauen, können wir sehen, dass wir diedebugger
Befehl unter dervar t = exchange.GetTicker()
Das ist gleichbedeutend mit einem Breakpoint hier, und die Ausführung des Programms wird an dieser Position aufhören.debugger
s 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 dieDevTools
Der Backtest wird dann durch den Chrome-Browser durchgeführt.debugger
Die in der Strategie enthaltenen Bestimmungen werden in Kraft treten.debugger
Das Strategieprogramm des Backtests kann nicht am Ausbruchpunkt unterbrochen oder gestoppt werden.DevTools
Um die Strategie zurück zu testen, wird das Strategieprogramm bei der ersten Einstellung unterbrochen.debugger
Position und diedebugger
Die Kommission hat in der Mitteilung über die Zusammenarbeit mit den Mitgliedstaaten über die
Es gibt zwei Möglichkeiten für uns, dieDevTools
Werkzeug des Chrome-Browser:
Wir klicken auf
Sie können auch die Abkürzung Tasten verwenden, um zu öffnenDevTools
durch DrückenCommand+Option+I (Mac)
oderControl+Shift+I (Windows, Linux)
.
Nach dem ÖffnenDevTools
wie in der Abbildung dargestellt:
Nach dem obigen Test, wenn wir auf die Schaltfläche debugger
Der Backtest scheint festzustecken, wie folgt:
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.GetTicker
Sie 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.
Wir können auf die Zeilennummer auf der linken Seite des Codes klicken, um einen Bruchpunkt hinzuzufügen.
Klicken Sie auf
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.
An diesem Punkt, wenn wir weiterhin auf die Schaltfläche
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
Gehen Sie zur Börse. Kaufen Sie Funktion.
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.