Pour les stratégies de débogage dans les systèmes de backtesting, on utilise généralement uniquement lesLog()
Le débogage de stratégie est un processus de débogage de stratégie qui permet de détecter les erreurs de la stratégie.JavaScript
La langue, leChrome
le navigateur le prend en charge mieux, ce qui peut implémenter le débogage de point de rupture, le débogage en une seule étape, la surveillance des valeurs variables, la surveillance des expressions et ainsi de suite pendant le backtesting.Javascript
Note que cette méthode de débogage n'est prise en charge que pourJavaScript
Les stratégies linguistiques sur la plateforme FMZ.
debugger
commandement sur la plateforme FMZLe dépôt de ladebugger
La commande dans le code de stratégie du langage JavaScript sur FMZ permet d'interrompre l'exécution du programme pendant le 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) {
// 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)
}
}
Configurer le code à partir du 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"}]
*/
Ici, nous pouvons voir que l'échange que nous avons ajouté pour le backtesting est Binance spot, la configuration est comme indiqué dans la capture d'écran:
En continuant à regarder le code de stratégie, nous pouvons voir que nous avons écrit ledebugger
commandement en vertu de lavar t = exchange.GetTicker()
la phrase, ce qui équivaut à frapper un point de rupture ici, et l'exécution du programme s'arrêtera à cette position.debugger
s peut être utilisé dans le code de stratégie, mais il n'est pas recommandé de le faire, il suffit d'utiliser un point de rupture à un certain emplacement, et les points de rupture suivants peuvent être définis dans la fonction de débogage DevTools du navigateur.
On doit ouvrir leDevTools
de Chrome avant d'exécuter le backtest, puis ledebugger
Le code de la stratégie n'est pas encore en vigueur.debugger
Le programme stratégique de backtesting ne peut pas être interrompu ou arrêté au point de rupture.DevTools
pour tester la stratégie, le programme de stratégie sera interrompu au premier réglagedebugger
position, et ledebugger
peuvent également être définies dans le champ d'application global du code de stratégie.
Il y a deux façons pour nous d'ouvrir leDevTools
outil du navigateur Chrome:
Nous cliquons sur
Vous pouvez également utiliser les touches de raccourci pour ouvrirDevTools
en appuyantCommand+Option+I (Mac)
ouControl+Shift+I (Windows, Linux)
.
Après ouvertureDevTools
comme indiqué sur la figure:
Après le test ci-dessus, lorsque nous cliquons sur le bouton debugger
La commande est définie dans le code. Le backtest semble bloqué, comme suit:
On peut voir que, à la position marquée interrompue par la stratégiedebugger
, l'ensemble du programme exécute uniquement les données de marché renvoyées par la fonction avec la valeur de n étant 1, et la valeur de t étantGetTicker
Vous pouvez voir les valeurs spécifiques des variables dans la case rouge de la figure ci-dessus, de sorte qu'il est facile d'observer la valeur de chaque variable 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
Il y a aussi quelques boutons qui peuvent être implémentés, par exemple, sauter la fonction suivante, aller à l'appel de fonction suivant, sortir de l'appel de fonction en cours, exécuter l'étape unique, ignorer tous les points de rupture, etc.
À ce stade, lorsque nous continuons à cliquer sur le bouton
main:17:31 - TypeError: Cannot convert "undefined" to double
Ne pas être sensible aux majuscules pour un nom de contribution de structure est une erreur courante commise par les novices.
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
La fonction acheter est une variable indéfinie, qui provoque une exception de programme et met fin au backtest.
Lorsque le programme s'arrête à la position de point de rupture, cette ligne de code n'est pas exécutée. Nous continuons à cliquer sur le bouton
Va à l'échange. Appelle la fonction achat.
Ici, nous pouvons voir que le prix est une variable indéfinie.
En utilisant l'approche ci-dessus, il est facile de découvrir les bugs du programme étape par étape. Beaucoup de novices font souvent des erreurs, par exemple, l'index d'un tableau est accédé en dehors des limites, des variables non définies sont référencées, des expressions sont écrites incorrectement, etc., tous sont faciles à DEBUG le programme.