テスターが履歴データをダウンロードする方法
履歴データの読み込み、テストの準備、テスト開始日の調整
ストラテジーテスター は、非常にリアルな市場シミュレーションを作成します。これを実現するために、選択した銘柄に十分な履歴データを事前に読み込みます。
テストを実行する前に、履歴データが同期されます。
- 取引サーバーから、選択した銘柄のM1バーとティックデータが端末にダウンロードされます。テスターを初めて起動すると、銘柄の利用可能な履歴全体が端末にダウンロードされます。
- 履歴は圧縮された形式で端末からテストエージェントにコピーされます。次に、エージェントはローカルでティックを生成するか、実際のティックデータ(使用可能な場合)を使用します。
- 多通貨テストでは、戦略が初めて新しい銘柄または時間枠にアクセスすると、欠落しているデータがダウンロードされる間、テストは一時停止されます。インジケーターが最初のバーから値を計算できるように、追加のデータバッファもダウンロードされます。
最低限の履歴データ要件
計算の安定性を確保するために、テスターは常に「開始前履歴バッファ」を読み込みます。
- D1以下:前暦年の初めから。これにより、少なくとも1年間の履歴が提供されます。例:テスト開始日が2023年3月1日の場合、2022年1月1日から端末データがダウンロードされます。これはテスト開始の14か月前に相当します。
- W1:少なくとも100週次バー(約2年)。
- MN1:少なくとも100月次バー(約8年)。
利用可能な履歴が不十分な場合、テスターは実際の開始日を、要件を満たす最も近い時点まで自動的にシフトします。
このような場合、テストはユーザーが指定した日付よりも後に開始されます。テスターログには、次のような関連メッセージが表示されます。
start time changed to 2024.03.15 00:00 to provide data at beginning
|
これはエラーではなく、正しい計算を保証するための組み込みメカニズムです。
多通貨テストでは、戦略が新しい銘柄または時間枠にアクセスするたびに、テスターは一時停止して追加の履歴を読み込みます。これには、インジケーターの計算と証拠金の再計算用の追加バッファのダウンロードも含まれます。
ストラテジーテスターは各銘柄の履歴を一元的に保存し、すべてのローカルエージェントが利用できるようにします。例(EURUSD):
\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<trading_server_name>\history\EURUSD
|
ティック履歴も同様に保存されます。
\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<trading_server_name>\ticks\EURUSD
|
テスト開始日のずれを減らす、または回避する方法
より短い時間枠を使用します。
モデリングを開始するには、テスターで選択した時間枠に少なくとも100本のバーが必要です。
これにより、安定したインジケーターの計算と適切な初期化が保証されます。
- D1でテストを実行する場合、少なくとも100本のD1バー(約5か月)が必要です。
- H1またはM15では、100本のH1バーまたはM15バーのみが必要です。履歴が限られている場合でも、この量のデータはほぼ常に利用可能です。
- したがって、履歴データが不十分な場合、開始日のシフトは、長い時間枠よりも短い時間枠で小さくなります。
ただし、エキスパートアドバイザーは選択した時間枠で正しく動作する必要があります。戦略が元々D1用に設計されている場合、M15またはH1でテストするときには、計算が適切に同期され、シグナルの再計算が頻繁に開始されないようにする必要があります。
|
時間枠別最小履歴と潜在的なテスト開始シフト
テスト期間
|
読み込まれる最小データ
|
可能な開始シフト
|
M1
|
≥100バー(≈1時間40分)
|
事実上ゼロ
|
M15
|
>100バー(約25時間)
|
最小限
|
H1
|
≥100バー(約4日間)
|
最小限
|
D1
|
≥100バー(約5か月)
|
最大5か月
|
W1
|
≥100週間(約2年)
|
最長2年
|
MN1
|
≥100か月(約8年)
|
最長8年(履歴が限られている場合)
|
表の読み方
- D1では、少なくとも100の日次バーが利用可能になるまで、テスターは常に開始日を前倒しします。
- H1またはM15では、通常は数日分のデータのみが必要なので、テストは選択した日付に近い日付で開始されます。
- より長い時間枠(W1およびMN1)では、何年にもわたる履歴が必要となるため、シフトは非常に大きくなる可能性があります。
追加のテスター機能
- ティック生成モード:
- 全ティック:ティックはM1バーから生成され、最大限のリアリティを提供します。これは最もリソースを消費し、時間のかかるテストモードです。
- 1分間OHLC:より高速ですが、現実的ではありません。ティックシーケンスは、M1 OHLC価格のみから構築されます。生成される制御ポイントの数が大幅に削減され、テスト期間が短縮されます。OnTick()関数はすべてのOHLCポイントでトリガーされます。
- 始値のみ:選択した時間枠のバーの始値のみを使用します。非常に高速ですが、精度が低く、複数通貨のテストでは注意が必要です。OnTick()は、各バーの始値の開始時にのみ呼び出されます。このため、ストップレベルと指値注文は正確な価格でトリガーされない可能性があります(特に長い時間枠の場合)。ただし、このモードは、エキスパートアドバイザーの予備テストを素早く行うのに最適です。これは最も高速ですが、最も精度の低いタイプのテストです。
- 実際のティックに基づいたすべてのティック:最高の精度です。生成されたティックシーケンスの代わりに、テスターはブローカーが提供するティックデータを使用します。M1バーはリアルティックモードでも使用されます。バーはティック履歴の確認と修正に使用されます。これにより、テスターとライブ端末のチャート間の矛盾も防止されます。
- 時間シミュレーション:
- TimeLocal()、TimeTradeServer()、TimeGMT()は、テスト中に同一の値を返します。
- OnTimerおよびSleep:
- これらの関数はテスト中にサポートされます。タイマーはシミュレーションを遅くし、Sleep()は一時停止をシミュレートします(ただし、無限ループはエラーの原因となります)。
エージェントのキャッシュと再利用
- 履歴データは圧縮形式で保存され、テスト間隔と設定が変更されていない場合は再利用されます。
- ローカルエージェントプロセスはテスト終了後も約5分間アクティブなままなので、後続のテストをより速く起動できます。