ティックデータの現実 — bid/ask・スプレッドの時間構造・約定モデルを正しく扱う

Ember 編集部 ・ 2026-07-16 ・ 約6分 ・ market-microstructure

本記事は情報提供・教育を目的としたものであり、特定の金融商品の取得・売買を推奨する投資助言ではありません。投資判断はご自身の責任で行ってください。

ローソク足のバックテストには、原理的に見えないものがあります。 スプレッド です。OHLC の4本値は「取引がその値段で成立し得た」ことを保証しません — その値段は bid だったのか ask だったのか、そのとき反対側はどこにいたのか。ローソク足はそれを全部潰した後の要約です。 短期戦略(保有が日内〜数日)の成績はコストが支配項になるので(第1回参照)、 コストの実体であるスプレッドを持たないデータで短期戦略を検証することは、原理的にできません 。ティックデータを扱う理由は「精密さへのこだわり」ではなく、単にそこにしか答えがないからです。 この記事で扱うこと: FX ティックデータの構造と入手(bid/ask 両建て気配、無料で取れる範囲) スプレッドの時間構造 — 1日の中でコストが 10 倍変わるという事実と、その理由 約定モデル — 成行はどちらの価格で埋まるか、リミット注文の fill をどこまで保守的に判定すべきか(逆選択の話) フラッシュイベント・週末ギャップなどの「データに残る地雷」の扱い bid/ask を保ったままバー化する実装(pandas) 対象は FX を例にしますが、bid/ask のある市場(先物・暗号資産)にそのまま一般化できます。

ティックデータの構造 — 「価格」は1本ではない FX スポットのティックデータは、1行がおおよそ次の形をしています。 重要なポイントが3つあります。 1. 価格は常に2本(bid/ask) 。「EURUSD の価格」という1本の数字は存在しない。mid(中間値)は計算上の便宜であって、 mid で取引できる人はいません 2. ティック=気配の更新 であって約定ではない。FX スポットは分散型市場なので、取引所株式のような「約定テープ」は(リテールが見える範囲には)存在しない 3. volume は当てにならない 。付いていても「そのリクイディティプロバイダの提示量」であって市場全体ではない 入手について: リテールでも Dukascopy などが 過去数年分のティック(bid/ask)を無料で公開 しています。主要通貨ペアの検証にはこれで十分に始められます。取得と整形は退屈な仕事ですが、この退屈な仕事をやったかどうかが検証の質を分けます。 スプレッドの時間構造 — コストは1日の中で10倍動く スプレッドを「EURUSD なら 0.2pips」のような定数で置くのが最初の誤りです。実データでヒストグラムを取ると、スプレッドは 時刻の関数 として明確な構造を持ちます。 ロンドン+NY の重複時間帯(日本時間 21〜25時ごろ) : 最も厚く、メジャーペアで 0.1〜0.3pips 東京時間 : やや広い。クロス円以外は流動性が細る NY クローズ〜ウェリントン(日本時間 6〜8時ごろ) : いわゆるロールオーバーの時間帯。 日中の 5〜20 倍 まで開くのが日常。多くのブローカーがこの時間にスワップ処理を行い、提示を間引く 指標発表の前後数秒〜数分 : 瞬間的に大きく開き、その間の「約定保証」は事実上ない これが実務に意味することは単純です。 同じ戦略でも、エントリー時刻の分布がロールオーバーに寄っていれば、コストは桁で変わる 。バックテストのコストモデルは、最低でも「その時刻の実測スプレッド」を使うべきで、ティックデータがあればそれは無料で手に入ります。 約定モデル — バックテストで一番嘘が入る場所 成行注文: 必ず「不利な側」で埋める 買い成行は ask、売り成行は bid。これだけで往復 1 スプレッドのコストが確定します。mid で約定させるバックテストは、 1トレードあたり片道 0.5 スプレッド分の利益を捏造 しています。1日 10 回転する戦略なら、それだけで年率数%〜数十%の水増しです。 さらに正確を期すなら、シグナル計算に使ったティックの 次のティック の不利側で埋めます(自分の見た気配はもう存在しないかもしれない)。 リミット注文: 「触れたら約定」は楽観的すぎる リミット注文のバックテストには本質的な不確実性があります。市場価格がリミット価格に 触れた とき、あなたの注文が埋まったかどうかはキュー内の順番次第で、そのデータはリテールには存在しません。 そこで保守側に倒します。実務でよく使う判定は: 楽観(使わない) : bid/ask がリミット価格に触れたら fill 保守(推奨) : 反対側の価格がリミット価格を 貫通 (strictly through)したら fill — つまり「自分より悪い価格で取引が起きた」ことを確認してから埋める 保守ルールにすると約定率は下がりますが、ここで重要なのは 埋まらなかったトレードは都合の悪い方に偏って欠落する という逆選択の構造です。あなたの買いリミットがギリギリ埋まらないのは価格が上に行ったとき(=勝ちトレードの欠落)ではなく、埋まるのは価格が貫通して下に行ったとき(=負けやすいトレードの選択的な約定)。リミット注文戦略のバックテストが本番より良く見える最大の理由がこれです。 検算: 約定モデルだけ入れ替えてみる 同じ戦略で「mid 約定」「タッチ fill」「貫通 fill」の3本のエクイティカーブを引いてください。3本の開き幅そのものが、あなたの戦略の マイクロストラクチャ感応度 の実測値です。開きが大きい戦略ほど、本番との乖離リスクが高い。 データに残る地雷 ティックデータには市場の事故がそのまま残っています。代表的なもの: 2015 01 15 スイスフラン・ショック : 対フランのペアで気配が数十分壊滅。この日を含むか除くかでフランクロスの戦略成績は別物になる 2019 01 03 円フラッシュクラッシュ : 東京早朝の流動性の谷で数分間に数%の変動 週末ギャップ : 金曜クローズと月曜オープンの断絶。「金曜に持ち越すか」は戦略仕様として明示的に決める クリスマス〜年末 : スプレッドが慢性的に広く、ボラは低い。年間成績への寄与を確認する 方針はどちらでも構いません(除外する/含める)が、 「気づかずに含めていた」だけは避ける 。異常スプレッドのフィルタ(例: その時間帯の中央値の 10 倍超を欠測扱い)を通してから集計するだけで、事故日の存在には必ず気づけます。 実装: bid/ask を保ったままバー化する ティックのままでは戦略ロジックが書きにくいので、バーに落とします。このとき mid に潰さず、bid/ask それぞれの OHLC を保つ のがポイントです。 時間バーの代わりにティック数・取引量ベースのバー(tick bar / volume bar)を使う流儀もあり、情報の到着レートに同期する利点がありますが、まずは時間バー+実測スプレッドで「コストの現実」をバックテストに入れることが先です。 ここまでで、検証の土台(第1回)とデータの土台(この記事)ができました。次回はいよいよ「その数字は信じられるのか」を数式で判定します — シャープレシオの推定誤差、年率換算の罠、そして試行回数で割り引く Deflated Sharpe Ratio です。