
Pour les stratégies de débogage dans un système de backtesting, généralement uniquementLog()fonction. Ce type d’efficacité de DEBUG est très faible et il est difficile pour les novices qui ont peu d’expérience dans les tests de programmes. pourJavaScriptDébogage stratégique du langageChromeLes navigateurs bénéficient d’un meilleur support. Il peut réaliser le débogage des points d’arrêt, le débogage en une seule étape, la surveillance des valeurs des variables, la surveillance des expressions, etc. pendant les tests rétrospectifs. Apprenons alors à utiliser cette méthode pour gérer lesJavascriptDÉBOGAGE lors du backtesting des stratégies dans le langage. Veuillez noter que sur FMZ uniquementJavascriptLes politiques de la langue prennent en charge cette approche du débogage.
debuggerinstructionInsérer dans le code de politique du langage JavaScript sur FMZdebuggerInstruction pouvant interrompre l’exécution du programme lors du backtesting.
Nous utilisons le code de stratégie de test suivant :
/*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)
}
}
À partir du code de configuration du backtest
/*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"}]
*/
Vous pouvez voir que l’échange que nous avons ajouté pendant le backtest est Binance spot, et la configuration est celle indiquée dans la capture d’écran :

En continuant à regarder le code de la stratégie, nous pouvons voir quevar t = exchange.GetTicker()Sous cette phrase nous avons écritdebuggerL’instruction équivaut à définir un point d’arrêt ici, et le programme s’arrêtera lorsqu’il atteindra cette position. Multipledebugger, mais il n’est pas recommandé de le faire. Il suffit de définir un point d’arrêt à un certain endroit. Les points d’arrêt suivants peuvent être définis dans la fonction de débogage DevTools du navigateur.
Vous devez d’abord ouvrir le navigateur ChromeDevToolsEnsuite, effectuez le backtest, le code de stratégie définidebuggerprendra effet, sinondebuggerIl sera ignoré et le programme de stratégie de backtest ne pourra pas être interrompu et arrêté au point d’arrêt. OuvrirDevToolsAprès avoir effectué un backtesting de la stratégie, le programme de stratégie sera interrompu au premier setdebuggerEmplacement,debuggerPeut également être défini dans la portée globale du code de politique.
Nous ouvrons le navigateur ChromeDevToolsIl existe deux types d’outils :

Lorsque nous cliquons sur « Inspecter », l’interface DevTools s’affiche.
Vous pouvez également utiliser la touche de raccourci pour l’ouvrir.Command+Option+I (Mac)ouControl+Shift+I(Windows、Linux)Ouvrir DevTools。
OuvrirDevToolsEnsuite, comme le montre la figure :

Suite au test ci-dessus, lorsque nous cliquons sur le bouton « Démarrer le backtesting » pour backtester la stratégie, en raison du paramètre dans le codedebuggerInstruction, la stratégie interrompt et attend à la position correspondante. Le backtest semble bloqué, comme indiqué ci-dessous :

On peut voir que dans la stratégiedebuggerMarquez la position d’interruption. L’ensemble du programme exécute uniquement n affecté à 1 et t affecté àGetTickerLes données de marché renvoyées par la fonction. Dans la case rouge de l’image ci-dessus, vous pouvez voir les valeurs spécifiques des variables, ce qui rend très pratique l’observation des valeurs de diverses variables lorsque la stratégie est en cours d’exécution.
Nous pouvons cliquer sur le numéro de ligne sur le côté gauche du code pour ajouter un point d’arrêt.

Cliquez sur « Reprendre l’exécution du script » pour reprendre l’exécution du script. Le programme s’exécutera jusqu’au point d’arrêt suivant. S’il n’y a pas de point d’arrêt ou si le programme présente une erreur et provoque une exception, le backtest se terminera.

Il existe également des boutons qui peuvent être utilisés pour : ignorer la fonction suivante, passer à l’appel de fonction suivant, sortir de l’appel de fonction en cours, effectuer une seule étape, ignorer tous les points d’arrêt, etc.


À ce stade, lorsque nous continuons à cliquer sur le bouton « Reprendre l’exécution du script » pour continuer l’exécution, le programme de stratégie aura une exception, le backtest se termine et un message d’erreur d’exception est imprimé.
main:17:31 - TypeError: Cannot convert "undefined" to double
Il s’agit d’une erreur courante commise par les novices, qui ne font pas la distinction entre les majuscules et les minuscules pour un nom d’attribut de structure.
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
En conséquence, le prix transmis à l’échange. La fonction Buy est une variable indéfinie, provoquant une exception de programme et la fin du backtest.
Lorsque le programme s’arrête à un point d’arrêt, cette ligne de code n’est pas exécutée. Nous continuons à cliquer sur le bouton « Passer à l’appel de fonction suivant ».

Accédez à l’échange. Appel de fonction d’achat.

Voyez que le prix est une variable indéfinie.
En utilisant la méthode ci-dessus, il est facile de trouver les bugs du programme étape par étape. De nombreuses erreurs sont souvent commises par les novices : par exemple, un accès hors limites aux index de tableau, des références à des variables non définies, une écriture d’expression incorrecte, etc. De cette façon, il est facile de déboguer le programme.