BJF TRADING GROUP · SHARPTRADER OPTIMIZER
公開されているレイテンシー・アービトラージのバックテストの多くは、紙の上では驚くほど優秀に見えますが、ライブ運用に移した瞬間に崩れます。原因は戦略ロジックの悪さではありません — 標準的なリテール向けバックテスターが、密かにゼロレイテンシーでの約定を前提にしていることです。このガイドでは、ミリ秒単位の実行時間が計算をどのように変えるのか、そして実際に取引できる結果を出すためにバックテストが何をモデル化すべきかを正確に解説します。
レイテンシー・アービトラージの収益性は、50〜200ミリ秒の窓の中に存在します。 これは、高速フィードと遅いブローカーの間にある価格差が、遅いブローカーの気配値が更新されるまで通常どれくらい開いたままになるかを示す時間です。もし実際の往復実行時間 — シグナル検出から約定確認まで — がその窓の大半を消費してしまうなら、残された余地はほとんどありません。標準的なリテール向けバックテスターは、注文が表示価格で即座に約定すると仮定するため、この問題全体をシミュレーションから消し去ります。その結果、紙幣を印刷しているように見えるバックテストと、スプレッド後にすべての取引で負けるライブ運用が生まれます。
この記事では、そのギャップを定量化し、ミリ秒が実際にどこで失われるのかを分解し、ライブ口座で見る数字と一致する結果を出すために、バックテスト内で実行時間をどのようにモデル化すべきかを説明します。
動画: 実行時間がレイテンシー・アービトラージのバックテストをどう変えるか — 同じ戦略を0 ms、50 ms、150 msの実行レイテンシーで、ティックごとに解説します。
レイテンシー・アービトラージ・システムでは、戦略は2つの価格フィードを比較します — 高速フィード(通常はTier-1アグリゲーターまたはLPフィード)と、低速フィード(取引対象のブローカー)です。高速フィードが、スプレッドに設定された閾値を加えた分を超えて低速フィードを先行した場合、戦略は低速側に注文を出し、低速価格が収束することを期待します。
機会が存在するのは、2つの価格がずれている間だけです。ブローカーの気配値エンジンが追いついた瞬間 — 通常は50〜200ミリ秒以内 — エッジは消えます。あなたの注文は、その前に市場へ到達していなければなりません。
この文脈での「実行時間」は、単一の数値ではありません。複数のレイテンシーの積み重ねであり、それぞれが数ミリ秒ずつ寄与します。
ブローカーとは別のデータセンターにある標準VPSで稼働する戦略の場合、現実的な往復時間が80〜100msを下回ることはほとんどありません。ブローカーと同じ場所にコロケーションし、クロスコネクト経由で稼働する戦略であれば、1〜5msまで低下することがあります。 この桁違いの差が、すべてを決めます。
きれいなシグナルを想像してください。高速フィードが1.5ピップス跳ねました。低速ブローカーはまだ更新していません。平均すると、低速ブローカーの気配値エンジンが新しい価格を反映するまでに、80〜150ミリ秒ほどあります。その窓の中で、2つのことが同時に起こります。
往復時間が50msを消費する場合、価格差がまだ約70%残っている時点で到着し、その大部分を獲得できます。往復時間が150msを消費する場合、価格差はすでに約10%まで崩れており、スプレッドとスリッページ後には負けている可能性が高くなります。
往復レイテンシーとアービトラージPnLの関係は線形ではありません。実行窓の下では、収益性は高く安定しています。それを超えると、収益性はゼロまたはマイナスへ崩壊します。ほとんどのリテールトレーダーはその崖の間違った側にいて、しかもバックテストがそれを隠しているため気づいていません。
以下は、理論上1.5ピップスのエッジを持つ同じレイテンシー・アービトラージ・シグナルを、4つの異なる往復実行レイテンシーでシミュレーションしたものです。下の数字は、通常の流動性と0.6〜0.9ピップのスプレッドがあるロンドン時間のEUR/USDでよく見られる典型例です。
| 往復実行 | 獲得できるエッジ | エントリー時のスリッページ | 1取引あたりの純PnL | 判定 |
|---|---|---|---|---|
| ~5ms(コロケーション) | シグナルの~95% | 0.0–0.2 pip | +0.6 to +1.0 pip | 収益性あり |
| ~50ms(近距離VPS) | シグナルの~70% | 0.2–0.5 pip | +0.2 to +0.6 pip | 収益性あり、ただし薄い |
| ~120ms(中距離) | シグナルの~30% | 0.5–1.0 pip | −0.3 to +0.1 pip | 限界的 / 負けやすい |
| ~200ms(長距離) | シグナルの~10% | 1.0–1.8 pip | −1.0 to −0.5 pip | 毎回負ける |
パターンに注目してください。5msから50msでは、収益性は緩やかに低下します。50msから120msでは、崖から落ちるように低下します。150msを超えると、戦略はコスト後に期待値がマイナスのコイントスになります。 この崖は、即時約定を前提にするバックテスターには見えません。
標準的なリテール向けバックテスターは、トレンドフォローやインジケーター系システムのために作られました — 保有期間が数分から数日で、数秒の実行スリッページが丸め誤差にすぎない戦略です。その設計はそれを反映しています。
数時間ポジションを保有する戦略なら、これは問題ありません — これらの単純化によるコストはPnLの1%未満です。しかし、1取引あたり1〜3ピップスを稼ぎ、100msの窓の中で生死が決まるレイテンシー・アービトラージ戦略にとっては、これらの単純化はすべて致命的です。
100msの価格差はM1バーの中では見えません — バーはOHLCを示すだけで、バー内部のティックストリームは示しません。バー再生型バックテスターは、レイテンシー・アービトラージのシグナルを正しく検出することすらできません。
注文が送信された瞬間に表示価格で約定するなら、50〜200msの実行窓全体がゼロに崩れます。バックテストは毎回、すべてのシグナルの100%を獲得します。現実では、インフラに応じて30%〜95%しか獲得できません。
実際のアービトラージ機会は、ニュース、ロールオーバー、流動性の薄い時間帯に集中します — まさにスプレッドが3〜5倍に広がる瞬間です。固定スプレッドのバックテストは、現実の条件では存在しない利益を数えます。
レイテンシー・アービトラージは、建てるのと同じ速さでポジションを閉じます。標準的なバックテスターは、クローズ側のスリッページを完全に無視するか、同じ固定スプレッドを適用し、非現実的な楽観を倍増させます。
ライブブローカーとの接触に耐えるバックテストを作るには、シミュレーターが往復の各区間を明示的にモデル化する必要があります。真剣なレイテンシー・アービトラージ・バックテストに必要な内訳は次のとおりです。
| 要素 | 典型的な範囲 | 表しているもの |
|---|---|---|
| 1. シグナルから送信までのレイテンシー | 0.5–20 ms | トリガーティックを受信してから注文を発行するまでの時間。言語、コードパス、CPUに依存します。コンパイル済みC++なら<1ms、高水準スクリプトなら5〜20ms。 |
| 2. ネットワーク往復(往路) | 1–80 ms | 取引ホストからブローカーまでの伝送時間。コロケーション = 1〜3ms、同一都市圏 = 5〜15ms、地域間 = 30〜80ms。 |
| 3. ブローカーのマッチングレイテンシー | 3–100 ms | ブローカーの注文管理およびマッチングエンジン内部で費やされる時間。Tier-1 ECNブローカー: 3〜15ms。標準リテールブローカー: 30��100ms。手動処理を伴うSTPブローカー: 100ms以上。 |
| 4. 確認の往復(復路) | 1–80 ms | 外向きのネットワーク区間を反映します。約定確認を受け取るまで、約定価格は分かりません — リスク管理とクローズ側タイミングに関係します。 |
一般的なVPSから標準的なリテールブローカーを通じて行う典型的なリテール・レイテンシー・アービトラージ運用では、4つの要素の合計はおよそ80〜180msになります — シグナル獲得率が50%未満に落ちる危険地帯の真っただ中です。高速ECNブローカー経由でコロケーション運用する場合、同じ要素の合計は5〜20msになります — 崖を大きく下回ります。
レイテンシー・アービトラージ戦略の誠実なバックテストは、トレーダーがこれらのレイテンシーを設定し、その影響を確認できるべきです。 SharpTrader Optimizer は、実行レイテンシーを単一の設定可能パラメーター(ミリ秒単位)としてモデル化し、実際の過去ティックデータに加えて、シミュレーション時に各注文へ適用します。
3つの要素が必要です。それぞれが必要条件であり、単独では十分ではありません。
標準的なリテール向けバックテスターは、バーのOHLC値の間を補間して「ティック」データを埋めます。生成される合成ティックは、バーの高値と安値にバー内のランダムな時点で到達し、始値と終値の間を滑らかに移動します。実際の市場はそのようには動きません — 跳ねます。あなたが捉えようとしている1.5ピップスのレイテンシー・アービトラージ・シグナルはまさにジャンプであり、補間されたティックデータはそれを存在しないものへ滑らかにしてしまいます。
真剣なバックテストは、ブローカーのマッチングエンジンから実際に記録されたBid/Askティック(またはロンドン発の機関投資家向けデータのようなクリーンな参照フィード)を再生します。すべてのティックにはタイムスタンプ、Bid、Askがあります。戦略は、ライブ運用で見るのと同じ順序、同じタイミングでそれらを見ます。
トレーダーは、ライブで想定する往復実行時間T(ミリ秒単位)を設定します。戦略が注文を発行すると、シミュレーターはリクエスト区間の分だけ時計を進めます — 通常はT/2です。なぜなら、約定価格に影響するのはシグナルからブローカー側マッチングまでの時間だけであり、レスポンス区間はすでに起きたことを戦略に知らせるだけだからです。T = 80msなら、シミュレーターはシグナルの40ms後のティックストリームを見て、シグナルを発生させたティックではなく、そのティックのBid/Askを約定価格として使用します。
この1つの変更 — シグナルと約定の間で時計を進めること — が、現実的なレイテンシーでの崖を再現します。また、バックテストを決定論的にします。同じティックストリーム上で同じ戦略をT = 50msとT = 150msで実行すると、測定可能なほど異なる結果が生まれ、トレーダーは戦略がどこで機能しなくなるのかを正確に確認できます。
各約定で実現するスリッページは、ティックウォークが生み出したものです — それはシミュレーションの出力であり、トレーダーが推測して設定する数値ではありません。有利に約定するもの(ポジティブスリッページ)もあれば、不利に約定するもの(ネガティブスリッページ)もあり、その大きさはその数ミリ秒間の実際のティック変動に追随します。これこそ、標準的なリテール向けバックテスターすべてに欠けている現実的な分布です。
レイテンシー・アービトラージは、開くのと同じ速さで閉じます。イグジットはエントリーから200〜800ms後、収束中の価格に対して行われます。シミュレーターがエントリーとイグジットに同じ固定スプレッドを適用するなら、2つのことを見落とします。(1) レイテンシー窓から生じるエントリースリッページ、(2) クローズ側の往復中に価格が戻ることによるイグジットスリッページです。本物のモデルでは、オープンとクローズの実行時間を独立して設定できます — これは、イグジットがエントリーより遅いルーティング経路を通ることが多い実際のブローカー挙動を反映します — そして各区間のスリッページをティックストリームから自動的に解決します。
以下は、SharpTraderのレイテンシー・アービトラージ戦略を、30日分のEUR/USDティックデータに対して、同じパラメーターで3つの異なる実行レイテンシー設定によりバックテストした代表的な結果です。これらの数字は、BJF Feed(London / Tokyo / NY)のバックテストでよく見られる典型例です。
| 指標 | 0ms(架空) | 50ms(近距離VPS) | 150ms(長距離) |
|---|---|---|---|
| 発火したシグナル | 2,847 | 2,847 | 2,847 |
| エッジで約定したシグナル | 2,847 (100%) | 1,983 (70%) | 854 (30%) |
| 平均獲得ピップ | 1.42 | 0.98 | 0.21 |
| エントリー時の実現スリッページ(ティックウォーク出力) | 0.0 pip | 0.3 pip | 0.9 pip |
| 1取引あたりの純PnL | +0.82 pip | +0.48 pip | −0.31 pip |
| 月間リターン(1ロット) | +233% | +137% | −88% |
0ms列は、標準ツールが生み出す「バックテスト幻想」です。50ms列は、適切に配備されたレイテンシー・アービトラージ戦略が実際にどのように見えるかを示します。150ms列は、多くのリテールトレーダーが、一般的なVPSで戦略を立ち上げ、標準ブローカー経由で取引しながら、自分の往復時間が崖のどこにあるかを理解せずに、うっかり実行しているものです。
同じ戦略でも、非常に高い収益性を持つことも、ぎりぎり収益性があることも、確実な損失になることもあります — それは標準的なバックテスターがモデル化しない1つの数値だけに依存します。
実行レイテンシーは、リテール向けレイテンシー・アービトラージのバックテストで最もモデル化されていない変数ですが、それだけではありません。信頼できるバックテストは3つのものを組み合わせ、それぞれが他を増幅します。
崖を明らかにします。戦略が実際に収益化するために必要なインフラと、どの時点でエッジが消えるのかを教えてくれます。
アービトラージ機会が、まさにスプレッドが広がる瞬間に集中するという事実を捉えます。固定スプレッドのバックテストは、その瞬間に物理的に存在し得ない利益を数えます。
最適化ツールがインサンプル期間のノイズに合ったパラメーターセットを見つけたために、インサンプルで良く見える戦略を検出します。ウォークフォワードなしでは、バックテストは過去を見た履歴書にすぎません。
レイテンシー・アービトラージ取引には、オープンとクローズという2つのスリッページイベントがあります。ほとんどのバックテストは一方(またはゼロ)しかモデル化せず、楽観を倍増させます。
4つすべてが揃うと、バックテストはマーケティングツールではなく予測ツールになります。生成される数字はライブ結果から50〜200%も乖離することをやめ、10〜20%以内に収まり始めます — リスクサイズ、資本配分、ブローカー選定の意思決定を実際にバックテストに基づいて行える程度に近づきます。
業界の経験則: ライブのドローダウンは、バックテスト上のドローダウンの1.5倍から2倍になると想定してください。 標準バックテスターで実行されるレイテンシー・アービトラージ戦略では、その比率はむしろ5倍から10倍に近くなります — なぜならバックテストが実行レイテンシー、可変スプレッド、または両側スリッページをモデル化していないからです。それらが含まれれば1.5〜2倍ルールが適用されますが、含まれていなければバックテストには予測価値がまったくありません。
少なくとも3つのレイテンシー設定で最適化を実行してください: 10ms(最良ケースのコロケーション)、50ms(近距離VPS)、150ms(一般的なVPS、遠いブローカー)。戦略が10msでしか収益化しないなら、配備上の問題があります — 取引する前にコロケーション計画が必要です。50msでは収益化するが150msではしないなら、VPSの選択とブローカー選定がすべてになります。
3つの層があります: (1) 取引ホストからブローカーの注文入力エンドポイントにpingを打つ — これで生のネットワーク往復が分かります。(2) 静かな時間帯に小さなテスト注文を送り、シグナル発行と約定確認の時刻を記録する — 差分にはブローカーのマッチングレイテンシーが含まれます。(3) 複数セッションで繰り返す — レイテンシーはブローカー負荷、時間帯、経路により変動します。運用にとって現実的な数値は、ベストケースのpingではなく、多数の測定値の中央値です。
はい — しかも窓はさらに狭くなります。ニュース取引の窓は10〜50ms幅になることがあります。実行時間ギャップの問題は同じで、より小さな窓に圧縮されているだけです。同じバックテストインフラ(実ティック、設定可能な実行レイテンシー、可変スプレッド)が必要であり、レイテンシー許容度はさらに厳しくなります。
どちらの現象も原因は同じです。流動性提供者が価格に不確実性を感じ、気配値を引くためです。高速フィードが跳ねると、低速ブローカーへ流動性を供給するLPは、狙い撃ちされることを防ぐため一時的に気配値を広げます。つまり、価格差が開く瞬間は、それを獲得するためのスプレッドも広がる瞬間なのです。固定スプレッドのバックテストはこれを見られず、純エッジを30〜50%過大評価します。
Tier-1 ECNブローカーに対する機関投資家型レイテンシー・アービトラージでは、はい — 競争環境は往復5ms未満へ移っており、クロスコネクトまたはプロキシミティホスティングが必要です。より遅いリテールブローカーに対するリテール型レイテンシー・アービトラージでは、いいえ — 30〜80msの往復でもエッジを生み出せることがあります。低速ブローカーの窓が広いからです。正しい質問は「コロケーションが必要か」ではなく、「自分の往復時間が、取引相手ブローカーの窓の中に収まっているか」です。それこそ、実行レイテンシーを考慮したバックテストが答える質問です。
数時間または数日ポジションを保有するトレンドフォロー戦略では、数百ミリ秒の実行レイテンシーは丸め誤差です。レイテンシー・アービトラージでは、その同じミリ秒がシグナル全体です。通常のFXバックテストインフラは前者のために設計されており、後者には密かに役に立たない結果を出します。だからこそ、専用のアービトラージ・バックテストツールが別カテゴリーとして存在します。
それらは最適な戦略を変えるのであって、分析を変えるわけではありません。アンチ・アービトラージプラグイン(遅延実行、ラストルック、利益時のリクオート、保留後約定)を実行するブローカーは、自然なレイテンシーに加えて、実質的に人工的な実行レイテンシーを導入します。設定可能な実行レイテンシーを持つバックテストなら、ブローカーのアンチアービトラージ挙動をシミュレーションし、そのブローカーに対して戦略がまだ有効か、あるいは取引先を変える必要があるかを判断できます。
5〜8個のパラメーターを持つレイテンシー・アービトラージ戦略では、典型的なグリッドは30,000〜100,000通りです — その中には、スイープする次元の1つとして3〜5個の実行時間設定が含まれます。目的は収益性クラスターを見つけることです — 単一の「幸運な」スパイクではなく、多くのパラメーター値にわたって戦略が収益化する範囲です。単一のピークはカーブフィッティングであり、クラスターは堅牢性です。一般的なリテール向けワークステーションを現実的な基準にすると、4コアCPUで1週間分のXAUUSDティックデータに対して30,000通りのグリッドを走らせると約12時間で完了します。同じグリッドは16コアで約3時間です。 SharpTrader Optimizer は、マルチコアハードウェア上で1回の実行につき100,000以上の組み合わせを処理します。
これは機関投資家のアルゴリズム取引における経験的観察です。よくモデル化されたバックテストであっても、ブローカー拒否、週末ギャップ、レジーム変化など、一部の現実世界の摩擦をきれいにモデル化できないため、ライブドローダウンをおよそ50〜100%過小評価します。このルールは、バックテストがすでに現実的な実行レイテンシー、可変スプレッド、両側のスリッページを含んでいることを前提にしています。 それらが欠けている場合、倍率ははるかに高くなります — レイテンシー・アービトラージでは具体的に5倍から10倍です。
概念的には同一です。暗号資産のクロス取引所アービトラージにおける実行時間の窓は通常200ms〜2sです(取引所間の距離が長く、オーダーブックが深い一方で更新が遅いため、FXより遅い)。同じ3つの要素 — ティック再生、設定可能な実行レイテンシー、可変スプレッド — が誠実なバックテストを生み出します。BJFのcrypto arbitrageツールは、取引所APIとオーダーブック深度に適応した同じアーキテクチャを使用しています。
SharpTrader Optimizerは、設定可能な実行時間、実ティック再生、ティックごとの可変スプレッド、そして両側のティック解像度スリッページをモデル化する、リテールからアクセス可能な唯一のバックテスターです — これら4つの変数が、レイテンシー・アービトラージ戦略が本物か架空かを決定します。100,000以上のパラメーター組み合わせに対するマルチコア・グリッド最適化は、数日ではなく数時間で完了します。