Le backtesting de stratégie JavaScript est débogué dans DevTools du navigateur Chrome

Auteur:Le petit rêve, Créé: 2022-06-24 14:10:02, Mis à jour: 2023-09-25 19:50:23

img

Le backtesting de stratégie JavaScript est débogué dans DevTools du navigateur Chrome

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.JavaScriptLa langue, leChromele 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.JavascriptNote que cette méthode de débogage n'est prise en charge que pourJavaScriptLes stratégies linguistiques sur la plateforme FMZ.

Ledebuggercommandement sur la plateforme FMZ

Le dépôt de ladebuggerLa 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:

img

En continuant à regarder le code de stratégie, nous pouvons voir que nous avons écrit ledebuggercommandement 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.debuggers 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 leDevToolsde Chrome avant d'exécuter le backtest, puis ledebuggerLe code de la stratégie n'est pas encore en vigueur.debuggerLe programme stratégique de backtesting ne peut pas être interrompu ou arrêté au point de rupture.DevToolspour tester la stratégie, le programme de stratégie sera interrompu au premier réglagedebuggerposition, et ledebuggerpeuvent é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 leDevToolsoutil du navigateur Chrome:

    1. Nous utilisons le bouton droit sur la page pour ouvrir le menu contextuel

    Nous cliquons sur Check pour afficher l'interface DevTools.

    1. Utilisez les touches de raccourci

    Vous pouvez également utiliser les touches de raccourci pour ouvrirDevToolsen appuyantCommand+Option+I (Mac)ouControl+Shift+I (Windows, Linux).

Après ouvertureDevToolscomme indiqué sur la figure:

img

Interface de DEBUG dans le navigateur pour la stratégie de langage JavaScript

Après le test ci-dessus, lorsque nous cliquons sur le bouton Start Backtest pour backtest la stratégie, la stratégie s'arrête et attend à la position correspondante parce quedebuggerLa commande est définie dans le code. Le backtest semble bloqué, comme suit:

img

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 étantGetTickerVous 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.

Définir les points de rupture pour le débogage manuel

Nous pouvons cliquer sur le numéro de ligne sur le côté gauche du code pour ajouter un point d'arrêt.

img

Cliquez sur reprendre l'exécution du script pour reprendre l'exécution du script, le programme s'exécutera au point de rupture suivant, s'il n'y a pas de point de rupture ou si le programme présente une erreur qui provoque une exception, le backtest prendra fin.

img

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.

img

Testez le code DEBUG

img

À ce stade, lorsque nous continuons à cliquer sur le bouton resume script execution pour continuer l'exécution, une exception se produira dans le programme de stratégie, et le backtest se terminera avec un message d'erreur d'exception imprimé.

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 step into next function call.

img

Va à l'échange. Appelle la fonction achat.

img

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.


Relationnée

Plus de