単体テストの方法
単体テストとはひとつひとつの関数ごとに動作を確認することです。設計に状態遷移モデルを使っているので、状態遷移表の一つ一つのセル毎に動作確認を行います。プログラムの動作を確認するにはあらかじめログを仕込んでおきます。EAの場合、Print関数でログを出力できます。OnTickで状態遷移時にログを出力するようになっていますので、バックテストの結果を見て確認を行います。
試験書作成
今回は状態遷移表がありますので、”-“以外のセルがそのまま試験書となります。
初期状態(1) | 買い注文中(4) | 買いポジあり(2) | 売り注文中(5) | 売りポジあり(3) | 決済中(6) | |
---|---|---|---|---|---|---|
約定 | – | →買いポジあり(2) | – | →売りポジあり(3) | – | →初期状態(1) |
売りシグナル | 売り注文を発行 →売り注文中(5) | – | – | – | – | – |
買いシグナル | 買い注文を発行 →買い注文中(4) | – | – | – | – | – |
買いポジ決済 | – | – | 決済→買いポジ決済中(6) | – | – | – |
売りポジ決済 | – | – | – | – | 決済→売りポジ決済中(6) | – |
プログラムの状態番号が列の見出しの()の番号です。
バックテストの出力ログ確認方法
ストラテジーテスターの操作履歴タブで出力ログを確認できます。売りポジ、買いポジが発生し、決済まで完了すれば一通りすべての状態が確認できます。操作履歴は古いログが一番下で、新しいものが上に来るので注意してください。
2022.05.29 15:45:51.709 2022.01.03 14:21:18 rsi_iband USDJPY,M5: ポジションチェックで状態変化:6→1
2022.05.29 15:45:51.709 2022.01.03 14:21:16 rsi_iband USDJPY,M5: シグナルで状態変化:2→6
2022.05.29 15:45:51.709 2022.01.03 14:21:16 rsi_iband USDJPY,M5: close #2 buy 0.20 USDJPY at 115.185 at price 115.120
2022.05.29 15:45:51.693 2022.01.03 11:14:16 rsi_iband USDJPY,M5: ポジションチェックで状態変化:4→2
2022.05.29 15:45:51.693 2022.01.03 11:14:15 rsi_iband USDJPY,M5: シグナルで状態変化:1→4
2022.05.29 15:45:51.693 2022.01.03 11:14:15 rsi_iband USDJPY,M5: open #2 buy 0.20 USDJPY at 115.185 ok
2022.05.29 15:45:51.693 2022.01.03 11:14:15 rsi_iband USDJPY,M5: Ask=115.185Stop=0.0
2022.05.29 15:45:51.693 2022.01.03 09:56:34 rsi_iband USDJPY,M5: ポジションチェックで状態変化:6→1
2022.05.29 15:45:51.693 2022.01.03 09:56:34 rsi_iband USDJPY,M5: シグナルで状態変化:3→6
2022.05.29 15:45:51.693 2022.01.03 09:56:34 rsi_iband USDJPY,M5: close #1 sell 0.20 USDJPY at 115.245 at price 115.276
2022.05.29 15:45:51.677 2022.01.03 02:34:41 rsi_iband USDJPY,M5: ポジションチェックで状態変化:5→3
2022.05.29 15:45:51.677 2022.01.03 02:34:40 rsi_iband USDJPY,M5: シグナルで状態変化:1→5
2022.05.29 15:45:51.677 2022.01.03 02:34:40 rsi_iband USDJPY,M5: open #1 sell 0.20 USDJPY at 115.245 ok
2022.05.29 15:45:51.677 2022.01.03 02:34:40 rsi_iband USDJPY,M5: Bid=115.245Stop=0.0Limit=0.0
2022.05.29 15:45:51.615 2022.01.01 00:00:00 rsi_iband inputs: sell_threshold=75; buy_threshold=25; set_lots=2; stop_pips=80; limit_pips=200; stop_enable=0; limit_enable=0; magic_number=10415518;
上記のログで遷移表の各セルの動作を確認できます。
また、セッティングタブでチャートを開くをクリックするとバックテスト時のチャートが表示されます。結果タブの各取引をダブルクリックするとその時点のチャートにジャンプしますので、意図通りのタイミングで売買しているか確認できます。今回の場合RSI 25, 75でエントリー、ボリンジャーバンドの上下ラインで決済を行っているか確認しましょう。
フォワードテストで確認
バックテストでは異常系のテストができません。異常系はデモ口座を使ったフォワードテストで行います。テスト条件が整うまで時間がかかりますが、本番前にしっかり確認しましょう。
異常系テストリスト
- lotsを大きくして、必要証拠金が足りない時に、買いオーダー、売りオーダーが失敗して初期状態に戻るか確認する
- 買いポジあり状態でMT4を再起動し、初期状態から買いポジありに遷移するか確認する
- 買いポジあり状態で手動で決済を行い、初期状態に戻るか確認する
- 買いポジあり状態でlotsを変更し、決済発生時に正しく決済されるか確認する
- 売りポジあり状態でMT4を再起動し、初期状態から売りポジありに遷移するか確認する
- 売りポジあり状態で手動で決済を行い、初期状態に戻るか確認する
- 売りポジあり状態でlotsを変更し、決済発生時に正しく決済されるか確認する
このあたりが確認できれば大丈夫だと思います。