avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

Créé le: 2022-06-22 14:23:26, Mis à jour le: 2023-09-18 20:24:01
comments   1
hits   1736

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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.

Sur la plateforme FMZdebuggerinstruction

Insé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 :

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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 :

  • 1. Nous faisons un clic droit sur la page pour ouvrir le menu contextuel

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

Lorsque nous cliquons sur « Inspecter », l’interface DevTools s’affiche.

  • 2. Utiliser les touches de raccourci

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 :

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

L’interface de débogage dans le navigateur de la stratégie de langage JavaScript

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 :

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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.

Définir manuellement des points d’arrêt pour le débogage

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

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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.

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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.

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

Donnez ce code de test DEBUG

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

À 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 ».

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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

Stratégie JavaScript, backtesting, débogage dans le navigateur Chrome DevTools

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.