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

戦略コードを見ていくと、var t = exchange.GetTicker()この文の下にはdebuggerこの命令はここでブレークポイントを設定するのと同じであり、プログラムはこの位置に到達すると停止します。複数debuggerただし、そうすることはお勧めしません。特定の場所にブレークポイントを設定するだけです。後続のブレークポイントは、ブラウザの DevTools デバッグ機能で設定できます。
まずChromeブラウザを開く必要がありますDevTools次にバックテストを実行し、戦略コードセットdebugger有効になります。debuggerこれは無視され、バックテスト戦略プログラムはブレークポイントで中断および停止できなくなります。開けるDevTools戦略をバックテストした後、戦略プログラムは最初のセットで中断されますdebugger位置、debuggerポリシー コードのグローバル スコープで設定することもできます。
Chromeブラウザを開きますDevToolsツールには 2 つの種類があります。

「検査」をクリックすると、DevTools インターフェースが表示されます。
ショートカットキーを使用して開くこともできます。Command+Option+I (Mac)またはControl+Shift+I(Windows、Linux)開ける DevTools。
開けるDevToolsその後は、図に示すようになります。

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

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

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

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


この時点で、「スクリプト実行を再開」ボタンをクリックして実行を続行すると、戦略プログラムに例外が発生し、バックテストが終了し、例外エラー メッセージが出力されます。
main:17:31 - TypeError: Cannot convert "undefined" to double
これは、構造属性名の大文字と小文字を区別しない初心者がよく犯す間違いです。
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
その結果、exchange.Buy関数に渡される価格は未定義の変数となり、プログラム例外が発生してバックテストが終了します。
プログラムがブレークポイントで停止すると、このコード行は実行されません。 「次の関数呼び出しにステップイン」ボタンをクリックし続けます。

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

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