検証ラボ ── 2026-09-16
都合のよい結果が出たので、採用しなかった — デモ口座でコストを実測した記録
結果を見る前に、合否の基準を書いておくで、事前登録という手続きを書きました。第1期のホールドアウトで成立した話と、それを怠って2回失敗した話です。
その後、実際に事前登録してから測る機会がありました。今度は基準だけでなく、測定の限界も先に書きました。
結果は予想外に良く、そして採用しませんでした。その記録です。
結論
- バックテストのコスト前提(往復で約1.07bp)は、設定ファイルから読んだ推定値であって実測ではありませんでした
- デモ口座で2週間測ったところ、往復の実効コストは0.31〜1.04bp。前提より2〜3倍安いという結果です
- スリッページは4銘柄すべて0.0でした。前提に置いていた0.80pipsは、少なくともこの環境には存在しません
- 事前登録の判定表に当てはめると「楽観側に確定」になります。確定させませんでした
- 理由は、同じ事前登録の中に「デモ実測が楽観でも、実口座が楽観とは主張しない」と先に書いてあったからです
- 滑りが完全にゼロなのは、良い結果ではなく「測定が効いていない」疑いのサインでした
※ bp(ベーシスポイント)は0.01%です。往復1bpなら、100万円の取引で往復100円のコストにあたります。
前提:なぜ測る必要があったか
第1期の検証は、全30フェーズの結論がひとつのコスト前提に乗っていました。
| 項目 | 置いていた値 | 出所 |
|---|---|---|
| スプレッド | 0.5 pip | バックテスト設定ファイル |
| スリッページ | 0.80 pip(実効) | 同上 |
| 往復コスト | 約 1.07 bp | 上の2つから計算 |
**実市場で測った値ではありません。**設定にそう書いてあった、というだけです。
そして、この前提が結論を左右することが分かっていました。ある実験では、スプレッドだけを引くと2条件が黒字になり、スリッページを1.0pip足すと全滅しました。前提が2〜3倍動けば、結論が反転します。
だから測る必要がありました。SQXで延べ150万本の戦略を生成して1本も採用しなかった話の続きは、ここで止まっていたわけです。
実口座ではなくデモ口座で測ることにしました。実弾で発注する測定なので、まず実損の出ない環境で手順を確かめる、という順序です。
手順:測る前に5つ書いた
2026年8月9日、測定を始める前に文書を1つ作りました。書いたのは基準だけではありません。
| 書いたもの | 中身 |
|---|---|
| ① 何を測るか | スプレッド(発注しない受動記録・1秒観測/1分集計)と、往復のスリッページ(最小ロットで発注して即決済) |
| ② 判定統計量 | 1往復あたりの合計滑りの75パーセンタイル |
| ③ 判定の境界 | 0.2pips以下=楽観 / 0.2〜0.55=基準 / 0.55超=悲観 |
| ④ 判定しない条件 | 記録が14日未満、または往復が銘柄あたり30件未満 |
| ⑤ 測定の限界 | 4項目(下記) |
③の境界を測定前に置いたのが事前登録の本体です。結果を見てから境界を決めれば、それは判定ではなく選択になります。
ただ、今回いちばん効いたのは④と⑤でした。
⑤ 限界を、結果を見る前に書いた
そのまま引くと、こういう項目です。
- **デモは実約定サーバーではない。**採用できる主張は片側だけ ——「実コスト ≥ デモ実測値」。デモで悲観な結果が出れば現行前提の過小が確定するが、デモが楽観でも実口座が楽観とは主張しない
- デモと実口座で同じスプレッドが配信されるかは未確認
- 1分集計なので、分内のスパイクは最大値側にしか現れない。平均だけでなく最大の分布も見る
- **標本は上側で打ち切られる。**スプレッドが設定した閾値を超えると発注を見送る仕組みなので、滑りが最も大きくなる場面 —— 指標発表直後・ロールオーバー前後・薄商いの窓開け —— が測定対象から外れる
4番目には、こうも書き添えてあります。「時間帯別の集計が薄い区分については、データ不足ではなくこの打ち切りの結果である可能性を先に疑う」。
測定中に基準を1つ変えた。その記録も残した
始めてすぐ問題が出ました。
発注を見送る閾値を3.0pipsに置いていたところ、週明け寄り付きの観測24回のうち15回(62.5%)が見送りになりました。その時間帯の実測スプレッドは9.9〜14.1pipsで、1週間で最もコストの高い場面がまるごと標本から消えることになります。
閾値を3.0から20.0へ上げました。観測された正常な広がり(最大14.1)を含み、明らかな配信異常だけを弾く水準です。
ここで問題になるのが、「結果を見てから基準を動かした」ことにならないかです。事前登録の意味が消えます。
改訂の記録に、こう書きました。
改訂時点でスリッページの実測は1件も存在しない(発注を有効にしていないため。記録ファイルは見出し行のみ)。したがって「結果を見てから基準を動かした」には該当せず、破棄したデータもない。
**判定基準そのもの(75パーセンタイルと3区分の境界)は変えていません。**変えたのは測定の設定です。
同じときに標本の密度も上げました(15分間隔→1分間隔)。旧条件で採れていた11往復は、間隔が不規則に混ざっていたため破棄して採り直しました。
これが事前登録の記事に書いた「変更が必要になった場合は、変更前の基準と理由を残した上で新版を起こす」の実際の姿です。やってみると、変更しないことより、変更を記録することのほうが実務的でした。
結果:予想と逆の方向に外れた
| 銘柄 | 往復コスト p75 | スプレッド p75 | 滑り p75 |
|---|---|---|---|
| 米ドル/円 | 0.31〜0.38 bp | 0.5〜0.6 pips | 0.0 |
| ユーロ/米ドル | 0.43〜0.52 bp | 0.5〜0.6 pips | 0.0 |
| 英ポンド/米ドル | 0.67〜1.04 bp | 0.9〜1.4 pips | 0.0 |
| 豪ドル/米ドル | 0.85 bp | 0.6 pips | 0.0 |
前提は往復1.07bpでした。実測は0.31〜1.04bp。2〜3倍安いという結果です。
そしてスリッページが4銘柄すべてで0.0でした。
事前登録の判定表に当てはめます。往復滑りp75が0.2pips以下なら「楽観側」。楽観側に確定、と読めます。
前提が悲観すぎたのだから、過去の結論が復活するかもしれません。都合のよい結果です。
解釈:確定させなかった
滑りが完全にゼロというのは、都合がよすぎます。
事前登録の副次条件に、こう書いてありました。
価格改善率とゼロ滑り率: デモサーバーの約定が人工的(滑りゼロ連発・改善多発)かの検出指標
つまりゼロ滑りは、成果ではなく検出指標として先に置いてあったわけです。それが出ました。
加えて限界4があります。スプレッドが閾値を超えると発注を見送る設計なので、滑りが最も大きくなる場面は最初から標本に入っていません。滑りがゼロなのは当たり前、という読み方もできてしまいます。
だから採用したのは片側だけです。
| 採用したか | 主張 |
|---|---|
| ✅ | 実コスト ≥ デモ実測値(下限として使う) |
| ❌ | 実口座でも滑らないだろう |
| ❌ | スリッページ前提を0.8pipから下げてよい |
そのうえで、新しい検定は2つのコスト前提の両方で回すことにしました。デモ実測(下限)と、旧来の悲観値です。どちらでも結論が変わらないものだけを通すという運用です。
閉じた結論を復活させるかも見直しました。結果は復活なしです。方向予測の実験は、置換検定でコストに依存しない形で否定されていましたし、別の実験の死因は希釈であってコストではありませんでした。コストが安かったからといって、死んだ結論が生き返るわけではない、というのは別に確かめる必要がありました。
なぜ「限界を先に書く」必要があったのか
ここが今回いちばん学んだところです。
都合の悪い結果には、限界を思いつきます。「標本が少ない」「期間が特殊だった」「対照の作り方が悪い」——いくらでも出てきます。
都合のよい結果には、思いつきません。
「前提より2〜3倍安かった」と出たその場で、「でもデモだから使えない」と踏みとどまれる保証は、どこにもありません。しかもこの測定は、止まっていたプロジェクトを再開するためにやっているわけです。前に進みたい理由のほうが揃っています。
先に書いてあったから、読み返すだけで済みました。新しく考える必要がありませんでした。
事前登録の記事を「事前登録は正解を出す道具ではなく、間違いを間違いと分かるようにする道具」で締めました。今回、もう一段ありました。
正しく見える結果を、正しいと決めつけないための道具でもありました。
実務でどう使うか
- デモ口座で測ったコストは、下限としてしか使えません。「実コスト ≥ デモ実測値」という片側だけです
- **滑りがゼロだったら、まず測定を疑ってください。**環境が人工的か、大きく滑る場面が標本から外れているかのどちらかである可能性があります
- **発注を見送る閾値は、標本を切ります。**閾値を厳しくするほど「安全」に見えますが、最もコストの高い場面が消えます
- **限界は、結果を見る前に書いてください。**後から書くと、都合のよい結果に対しては書けません
- 測定の設定を変えるのと、判定基準を変えるのは別です。前者は記録して変えてよく、後者は変えてはいけません
- 前提が変わっても、死因が別のところにある結論は復活しません。ここは分けて確かめる必要があります
限界(この記事自体の)
- 国内店頭FXのデモ口座1つでの測定です。当サイトの方針として業者名は書きません。他の業者・他のデモ環境が同じとは限りません
- 2週間です
- 往復のスリッページは4銘柄です。スプレッドは13ペア+金で記録しました
- この結果の位置づけは暫定のままです。実口座で同じ手順を踏まないと確定しません
- **滑りがゼロだった原因は特定できていません。**デモ環境の仕様なのか、上側の打ち切りなのか、本当に滑らないのか、区別する材料がありません
- 数値はこの測定期間・この環境の値です。他に当てはめられるものではありません
- スプレッドの統計量は「銘柄別・時間帯別の平均の75パーセンタイル」で、配信データを1ティックずつ数えた記事の中央値とは別の量です。並べて比べないでください
まとめ
- コスト前提(往復1.07bp)は設定から読んだ推定値だった。実測したら0.31〜1.04bpで2〜3倍安い
- スリッページは4銘柄すべて0.0。事前登録の判定では「楽観に確定」になる
- **確定させなかった。**同じ事前登録に「デモが楽観でも実口座が楽観とは主張しない」と先に書いてあった
- ゼロ滑りは成果ではなく、検出指標として先に置いてあった項目だった
- 採用したのは片側だけ ——「実コスト ≥ デモ実測値」
- **都合の悪い結果には限界を思いつくが、都合のよい結果には思いつかない。**だから先に書く
測定は成功しました。その成功をそのまま使わない、という判断のほうが、今回の成果です。
出典
- 手続きそのもの: 結果を見る前に、合否の基準を書いておく(当サイト)
- 前段の検証: SQXで延べ150万本の戦略を生成して、1本も採用しなかった話(当サイト)
- 滑りの仕組み: 約定とスリッページの仕組み(当サイト)
- コストの測り方: 実際にいくら払っているのか(TCA入門)(当サイト)
- 前提が変わっても結論が戻らない理由: たくさん試して一番良いのを選ぶと、なぜ嘘の好成績が生まれるのか(当サイト)
- 記録の残し方: 同じ結果をもう一度出せるようにする(当サイト)
※本記事は情報提供を目的としたもので、特定の業者・ソフトウェア・手法の利用を推奨するものではありません。数値は測定期間・測定環境における実測値であり、将来の結果や他の環境での結果を保証するものではありません。