avatar of 发明者量化-小小梦 发明者量化-小小梦
フォロー ダイレクトメッセージ
4
フォロー
1271
フォロワー

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

作成日:: 2022-06-22 14:23:26, 更新日:: 2023-09-18 20:24:01
comments   1
hits   1736

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

バックテストシステムにおけるデバッグ戦略の場合、通常はLog()関数。この種の DEBUG 効率は非常に低く、プログラムテストの経験がほとんどない初心者にとっては困難です。のためにJavaScript言語の戦略デバッグChromeブラウザのサポートが向上しました。バックテスト中にブレークポイントデバッグ、シングルステップデバッグ、変数値の監視、式の監視などを実現できます。次に、この方法を使用して FMZ を制御する方法を学びましょう。Javascript言語で戦略をバックテストするときにデバッグします。 FMZのみJavascript言語のポリシーは、このデバッグ手法をサポートしています。

FMZプラットフォームdebugger命令

FMZのJavaScript言語のポリシーコードに挿入するdebuggerバックテスト中にプログラムの実行を中断できる命令。

次のテスト戦略コードを使用します。

/*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)
    }
}

バックテスト設定コードから

/*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"}]
*/

バックテスト中に追加した取引所は Binance spot であり、設定はスクリーンショットのとおりであることがわかります。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

戦略コードを見ていくと、var t = exchange.GetTicker()この文の下にはdebuggerこの命令はここでブレークポイントを設定するのと同じであり、プログラムはこの位置に到達すると停止します。複数debuggerただし、そうすることはお勧めしません。特定の場所にブレークポイントを設定するだけです。後続のブレークポイントは、ブラウザの DevTools デバッグ機能で設定できます。

まずChromeブラウザを開く必要がありますDevTools次にバックテストを実行し、戦略コードセットdebugger有効になります。debuggerこれは無視され、バックテスト戦略プログラムはブレークポイントで中断および停止できなくなります。開けるDevTools戦略をバックテストした後、戦略プログラムは最初のセットで中断されますdebugger位置、debuggerポリシー コードのグローバル スコープで設定することもできます。

Chromeブラウザを開きますDevToolsツールには 2 つの種類があります。

  • 1. ページを右クリックしてポップアップメニューを開きます

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

「検査」をクリックすると、DevTools インターフェースが表示されます。

  • 2. ショートカットキーを使用する

ショートカットキーを使用して開くこともできます。Command+Option+I (Mac)またはControl+Shift+I(Windows、Linux)開ける DevTools

開けるDevToolsその後は、図に示すようになります。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

JavaScript言語戦略のブラウザでのデバッグインターフェース

上記のテストに続いて、「バックテストを開始」ボタンをクリックして戦略をバックテストすると、コードの設定によりdebugger命令、戦略は対応する位置で中断して待機します。以下のように、バックテストが停止しているようです。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

戦略ではdebugger割り込み位置をマークします。プログラム全体では、1に割り当てられたnと、1に割り当てられたtのみが実行されます。GetTicker関数によって返される市場データ。上の図の赤いボックスでは、特定の変数の値を確認できるため、戦略の実行中にさまざまな変数の値を観察するのに非常に便利です。

デバッグ用にブレークポイントを手動で設定する

コードの左側の行番号をクリックすると、ブレークポイントを追加できます。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

「スクリプトの実行を再開」をクリックすると、スクリプトの実行が再開されます。プログラムは次のブレークポイントまで実行されます。ブレークポイントがない場合、またはプログラムにエラーがあり例外が発生した場合は、バックテストは終了します。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

次の関数をスキップする、次の関数呼び出しにステップインする、現在の関数呼び出しからジャンプする、シングルステップ、すべてのブレークポイントを無視するなどの操作に使用できるボタンもあります。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

このテストコードにDEBUGを指​​定します

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

この時点で、「スクリプト実行を再開」ボタンをクリックして実行を続行すると、戦略プログラムに例外が発生し、バックテストが終了し、例外エラー メッセージが出力されます。

main:17:31 - TypeError: Cannot convert "undefined" to double

これは、構造属性名の大文字と小文字を区別しない初心者がよく犯す間違いです。

var id = exchange.Buy(t.buy, 0.1)  //  下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。

その結果、exchange.Buy関数に渡される価格は未定義の変数となり、プログラム例外が発生してバックテストが終了します。

プログラムがブレークポイントで停止すると、このコード行は実行されません。 「次の関数呼び出しにステップイン」ボタンをクリックし続けます。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

交換にジャンプします。購入関数の呼び出し。

Chrome ブラウザ DevTools での JavaScript 戦略バックテストのデバッグ

価格は未定義の変数であることがわかります。

上記の方法を使用すると、プログラムのバグを段階的に簡単に見つけることができます。初心者がよく犯す多くの間違い: たとえば、配列インデックスへの範囲外アクセス、未定義の変数への参照、誤った式の記述など。この方法では、プログラムのデバッグが容易になります。