テスターが履歴データをダウンロードする方法
履歴データの読み込み、テストの準備、テスト開始日の調整
ストラテジーテスター は、高度に現実的な市場シミュレーションを作成します。そのために、選択した銘柄に十分な履歴データを事前に読み込みます。
テストを実行する前に、履歴データが同期されます。
- 取引サーバーから、選択した銘柄の1分足データとティックデータがターミナルにダウンロードされます。テスターを初めて起動すると、この銘柄の利用可能な履歴全体がターミナルにダウンロードされます。
- 履歴は圧縮された形式でターミナルからテストエージェントにコピーされ、エージェントはローカルでティックを生成するか、実際のティックデータ(使用可能な場合)を使用します。
- 多通貨テストでは、戦略が初めて新しい銘柄や時間足にアクセスした際、欠落しているデータをダウンロードしている間、テストは一時停止されます。さらに、インジケーターが最初のバーから正しく計算できるように、追加のデータバッファも同時にダウンロードされます。
履歴データの最小要件
計算の安定性を確保するために、テスターは常に以下の「開始前履歴バッファ」を読み込みます。
- 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\<取引サーバー名>\history\EURUSD
|
ティック履歴も同様に保存されます。
\Program Files\MetaTrader 5 Strategy Tester\Tester\bases\<取引サーバー名>\ticks\EURUSD
|
テスト開始日のずれを減らす、または回避する方法
より短い時間足を使用します。
テスターは、モデリングを開始する前に、選択した時間足で最低100本のバーを必要とします。
これは、インジケーターの計算を安定させ、初期化を正しく行うためです。
- D1でテストを実行する場合、少なくとも100本の日足(約5か月)が必要です。
- H1(1時間足)またはM15(15分足)では、100本の時間足または15分足で十分です。この量は、履歴データが限定的でもほぼ常に確保できます。
- したがって、履歴データが不十分な場合でも、短い時間足でテストすると開始日のずれは小さくなります。
注意:エキスパートアドバイザーは、選択した時間足で正しく動作する必要があります。元々D1向けに設計された戦略をH1やM15でテストする場合は、計算の同期を正しく行い、シグナルの再計算が過剰にならないよう注意してください。
|
時間足ごとの最小履歴データとテスト開始日のずれ
テスト時間足
|
最小読み込みデータ
|
可能な開始日のずれ
|
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()
- これらの関数はテスト中にサポートされます。OnTimer()はシミュレーションを遅くし、Sleep()は一時停止をシミュレートします(ただし、無限ループはエラーの原因となります)。
エージェントのキャッシュと再利用
- 履歴データは圧縮された形で保存され、テスト期間や設定が変更されない限り再利用されます。
- テスト終了後も、ローカルエージェントのプロセスは約5分間アクティブなまま残るため、次回のテストをより速く開始できます。