為替の定量分析やバックテスト、テクニカル指標の算出を行う際、API から取得した過去分足データに週末の時間的な断層(ギャップ) が生じる問題に悩む方は多いです。単にローソク足を確認するだけでは気づきにくいものの、分析や検証を進めると指標の乱れや検証結果の歪みといったトラブルが発生します。
今回は、週末ギャップが生まれる仕組み、用途別の対応手法、実際に使えるコードまで、実務経験をもとに分かりやすく解説します。
一、週末ギャップが引き起こす問題
API で為替の分足データを取得する際、多くの方はデータ量や通信速度ばかりに注目し、取引時間に伴う時系列の不具合を見落としがちです。
為替市場は 24 時間取引が可能な仕組みですが、金曜日の取引終了から月曜日の取引開始までの週末期間は、実際の約定が発生しません。一般的なデータ配信 API はこの空白期間を補完せず、タイムスタンプがそのまま飛ばされるため、データに断層が生まれます。
このギャップは様々な悪影響を及ぼします。移動平均線、RSI、MACD、ボラティリティといったテクニカル指標の数値がずれたり変動したりするほか、戦略のバックテスト実行時には月曜寄付きのシグナルが過大に表示され、検証結果の信頼性が大きく低下します。また、データの不具合によってコードのデバッグ作業にも時間が取られてしまいます。
二、データギャップが発生する根本的な原因
ここで押さえておきたいポイントは、24 時間取引可能=常に約定が発生する わけではないということです。
週末は全世界的に取引が休止し、新たな注文や価格変動が生まれません。大半のデータプロバイダーは実際の取引が行われた時間帯のデータのみを配信し、非取引時間のデータを意図的に作成しないため、EUR/USD、GBP/USD など主要通貨ペアを問わず、週末ギャップは標準的な現象となっています。これは API の不具合やデータの異常ではなく、為替データが持つ本来の構造です。
三、用途別の代表的な対応手法
週末ギャップに対する絶対的な解決策は存在せず、「市場の真の状態を再現する」「時系列データを連続させる」の 2 つの軸の中から、利用シーンに合わせて手法を選択する必要があります。現場でよく使われる 3 つの方法を紹介します。
-
元のデータ構造をそのまま使用する 生データに手を加えず、コード側にフィルターロジックを実装し、指標算出時に非取引時間のデータを除外します。市場の状態を忠実に再現できるため、厳格な定量バックテストや高頻度データ分析に適しています。
-
取引日ごとにデータを分割して計算する 全体のデータセットを 1 営業日単位に分割し、各日ごとに指標を算出。最後にグラフ表示用にデータを連結させる手法です。グラフの見た目が滑らかになるため、相場表示や初心者向けのデモンストレーションに向いています。
-
週末を休止区間としてマーキングする タイムライン上で週末の区間を「休止区間」と定義し、グラフ描画のみに使用し、価格計算や指標算出、戦略シミュレーションには使用しない方法です。表示の見やすさと計算の正確性を両立できます。
四、リアルタイムデータと過去データの使い分け
データの種類によって処理方針を変えると、開発効率が大きく向上します。
リアルタイムの相場ストリームを利用する場合は、特別な補完処理を行う必要はありません。取引が発生したタイミングのみデータが配信され、週末には配信が停止するため、プログラム側で自然に時間の断層が形成されます。
一方、過去の蓄積データを扱う場合は事前の前処理が必須です。時間形式を統一してインデックスを設定し、週末のデータを除外した上で、指標算出や分析作業を進めるのが標準的な流れです。
まとめ
長年データ分析や定量開発に携わって感じるのは、週末ギャップはデータの不具合ではなく、為替市場の特性の一つだということです。補間や数値の追加で無理に時間軸を埋めると、市場の動きが歪められ、特に短期戦略の分析結果に大きな誤差が生まれます。
営業日を基本単位としてデータを扱い、用途に応じた処理手法を選択するのが最善のアプローチです。
私自身、日々の研究や開発業務では AllTick API を為替相場データの取得に活用しています。データのフォーマットが統一され、タイムスタンプのルールも明確なため、データ前処理の負担を大幅に抑えることができます。