FXにおけるヒストリカルデータの仕組み
FXにおけるヒストリカルデータとは?
FXのヒストリカルデータとは、時間の経過に沿った通貨価格と関連する市場フィールドの、過去の観測記録です。これは「以前に何が起きたのか」を説明するため、または「ある手法がどのように振る舞った可能性があるか」を検証するために、たとえば時間帯同士を比較したりする分析を支えるために使われます。
役立つイメージは、タイムスタンプ付きの値の系列があり、それらの値に対して意思決定がどのように対応づけられるかを再生したいということです。したがってヒストリカルデータは「予測」ではありません。過去の振る舞いを理解するため、あるいは手法の仮定への感度を確認するための入力データセットです。
どのように作られ、通常何が含まれるか
ヒストリカルデータセットは、通常 生のフィード(ライブ市場の観測)から作られ、記録され、その後保存されます。データソースや詳細度によって、ヒストリカルデータには次のようなものが含まれる場合があります。
- Bid と ask(両側の価格提示)
- ミッド価格(bid/ask から計算されることが多い派生値)
- 固定の時間間隔(たとえば1分足)の Open, high, low, close(OHLC)
- 出来高またはティック数(利用可能性は異なります)
- タイムスタンプとタイムゾーンの取り決め
正確性のために重要な区別は2つあります。
- 時間の粒度:ティックデータ(非常に細かいタイムスタンプ)と、バーのデータ(区間ごとに要約された値)は異なります。
- 価格と約定:市場価格は提示されたものを示します。約定は、注文タイプ、スリッページ、スプレッドのようなルールの後に、実際にどのような取引が成立するかを示します。
基本的なワークフロー:入力 → シミュレーション出力
分析やバックテストのための「ヒストリカルデータ」ワークフローとして、よくあるのは次のような単純な流れです。
- データセットを選ぶ:シンボル(通貨ペア)、期間、粒度(ティックまたはバー)を選択します。
- 計算する内容を定義する:たとえば、時間に沿ったリターン、シミュレーションしたエクイティカーブにおけるドローダウン、あるいはルールに基づく勝ち/負けの回数などです。
- 約定モデルを指定する:過去のクオートしかないため、取引ベースのシミュレーションでは、注文がどのように約定するかを決める必要があります。一般的な仮定のカテゴリには次が含まれます。
- エントリー/エグジット時にミッド価格を使うか、bid/ask を使うか
- スプレッドの適用(固定または時間変動)
- スリッページのモデリング(意図した価格と受け取った価格の差)
- 取引コストの追加(コミッション/手数料)
- マッピングを実行する:時間を追って進め、意思決定ロジックをヒストリカルな系列に適用し、シミュレーションされた取引やシグナルを生成します。
- 結果を出力する:出力は、選んだ仮定とマッピングの純粋な結果です。たとえば、シミュレーションされたポジションの時系列、集計された統計、あるいはベンチマークに対する誤差指標などです。
要点:ヒストリカルデータはタイムラインと値を提供し、約定モデルが「実際にどれを取引していたか」をつなぐブリッジを提供します。 このブリッジが曖昧だったり非現実的だったりすると、出力は誤解を招く可能性があります。
例によるエビデンス(明示的な仮定つき)
バーのデータを使った、単純なシナリオを考えてみましょう。
- データセット:1分間隔の通貨ペアの OHLC バー
- 仮定A:バーの開始時に条件が検出されたら、バーのオープンでエントリーする
- 仮定B:次のバーのクローズでエグジットする
- 仮定C:スプレッドは無視する(または0と仮定する)し、コストもない
これらの仮定を使えば、OHLC の値からシミュレーションされたポジションのリターン系列を計算できます。仮定Aだけを「オープンではなくクローズでエントリーする」に変更すると、ヒストリカルデータセットが同じでも、シミュレーション結果は変わります。
これは一般的なチェックを示しています:仮定を1つずつ変えてみる(スプレッドの扱い、約定タイミング、コスト)ことで、結論が頑健か脆いかを確認できます。
重大な制限と失敗パターン
ヒストリカルデータは有用ですが、信頼性に影響するいくつかの問題があります。
1) データ品質と欠落情報
ヒストリカルな記録には、欠け、重複したタイムスタンプ、一貫しないタイムゾーン、サンプル内での市場状態の違いなどがあるかもしれません。分析に連続性が必要なら、欠落データは計算されたタイムラインを歪める可能性があります。
2) 生存者バイアスと選択効果
結果を見た後に「関連がありそうな」期間を選ぶと、意図せず結果を偏らせたデータセットを作ってしまうことがあります。意図的に「不正をする」つもりがなくても、特定のレジームでしか見えないパターンを繰り返すと、安定しているように見える錯覚が生まれ得ます。
3) クオートから取引までのギャップ(スプレッド、スリッページ、コスト)
ヒストリカルなクオートは自動的に取引の約定を表すわけではないため、約定モデルが不可欠です。実際には、スプレッドやスリッページは変動し得て、コストも無視できない場合があります。
タイトな約定を仮定しているのに、実際の約定がそれより悪いなら、シミュレーション結果はパフォーマンスを過大評価する可能性があります。
4) 関係の非定常性
FXの市場環境は時間とともに変わります。過去に見えていた統計的な関係が、後になっても成り立つとは限りません。ヒストリカルデータは相関パターンを示せますが、それが持続することを保証できません。
5) ノイズへの過剰適合
ある手法をヒストリカルデータセットに対して繰り返し調整すると、一般的な性質というよりノイズを捉えてしまうことがあります。その結果、インサンプルでは強く見えても、新しいデータでは信頼できない可能性があります。
結果を示唆せずに事実を独立に検証する方法
セルフチェックによって、ヒストリカルデータ分析の中核となるメカニクスを検証できます。
- 定義を確認する:「open」「high」「low」「close」「tick」がデータセット内で具体的に何を表しているのか(そしてどのタイムスタンプが使われているのか)を確認します。
- 変換を監査する:ミッド価格や派生フィールドが提供されている場合、(該当するなら)bid/ask からどのように計算されたのかを検証します。
- 約定モデルにストレスをかける:スプレッドとコストに関する、明確に述べた代替の仮定のもとで再計算します。
- 粒度を比較する:ティックベースとバー ベースのデータで、結論が変わるかどうかを確認します。
- アウト・オブ・サンプル評価を使う:タイムラインを別々の期間に分割し、それらの間で振る舞いを比較します。ただし、それでも仮定に依存する点を忘れないでください。
検証の考え方を持つことで、ヒストリカルデータが直接支えられるもの(過去の値と、明示的な仮定のもとでの再生)と、保証できないもの(将来の振る舞い)を切り分けやすくなります。