Bot CEX 開発ログ

🛠️開発記録#456(2026/2/18)「動く」と「取れる」は違う ― 圧縮→拡散を徹底検証した記録

「動く」と「取れる」は違います。

本記事では、暗号資産の短期板データを用いて、圧縮(compression)から拡散(expansion)への遷移が本当にトレードエッジになり得るのかを、統計的・執行的に徹底検証した記録をまとめます。検証は mid ベースの観測指標だけでなく、ToB executable(買いは ask、売りは bid)基準で再計算し、さらに右裾依存を排除するための trim5、中央値(p50)、same_shock baseline 比較、多重検定補正(BH 法)まで含めて行いました。

結論から言えば、「圧縮→拡散」は確かに“動きます”。しかし、それは必ずしも“取れる動き”ではありませんでした。ブレイク追随、確認付きエントリー、フェード、遅延ゲートといった複数の戦略仕様を実装し、エントリー直後の MFE / MAE まで掘り下げた結果、入口時点で構造的に不利であることが明確になりました。

観測エッジと収益エッジをどのように分離し、どのように否定を積み重ねていったのか、その具体的な手順とログを技術的に整理します。エッジが見つかった話ではありません。むしろ「取れないことを証明した」過程の記録です。しかし、短期アルゴリズム開発においては、この否定の積み重ねこそが次の仮説の精度を上げる基盤になると考えています。

圧縮→拡散は本当にエッジなのか。それとも、アルゴの狩場に過ぎないのか。本稿では、その白黒をデータで確認していきます。

1. なぜ「圧縮→拡散」を検証したのか

本検証は、「圧縮→拡散(compression → expansion)」という一見すると教科書的な構造が、本当にトレードエッジになり得るのかを確かめるために行いました。

これまでの探索では、主にイベント駆動型の瞬間構造を対象に検証を進めてきました。具体的には、spread ショック、流動性急減(liq_drop)、update_rate の急増といった“板が歪む瞬間”を起点に、60秒先の方向やレンジを統計的に評価しました。しかし、結果は一貫して厳しいものでした。観測上はレンジが拡大する局面が確認できるにもかかわらず、executable ベースのブレイク追随やフェード戦略では収益化できませんでした。

この過程で明確になったのは、「荒れている最中は取れない」という事実です。liq_drop × expansion × mid_update_rate のような条件では、確かに 60 秒レンジは有意に拡大します。しかし、エントリー直後の MFE/MAE を分解すると、1 秒時点で 95% 以上がマイナスになるなど、入口時点で構造的に不利であることが確認されました。つまり、「動くこと」は観測できても、「取れる動き」ではなかったのです。

そこで視点を反転させました。

拡散の“最中”が取れないのであれば、取れる可能性があるのはどこか。自然な仮説は、「荒れの直前」、すなわち圧縮状態です。市場は常に拡散しているわけではありません。低レンジ・低 update_rate・安定したスプレッドといった圧縮状態が続いた後、どこかで拡散が始まります。この遷移点は、いわゆる volatility breakout の原型であり、多くの戦略で前提とされている構造です。

しかし、教科書的であるがゆえに、そこにエッジが残っているとは限りません。むしろ、短期 CEX 市場においては、圧縮からの初動ブレイクはアルゴリズム同士の刈り取り合戦になっている可能性もあります。したがって、「圧縮→拡散」は常識だから有効だろう、という前提は一切置かず、以下の問いをゼロから検証することにしました。

  • 圧縮状態は統計的に定義できるのか
  • 圧縮後の 60 秒レンジは有意に増加するのか
  • その増加は trim 後や p50 でも残るのか
  • same_shock baseline と比較しても濃縮効果があるのか
  • executable ベースでも観測エッジは残るのか
  • そして、それは実際にトレード収益へ変換できるのか

このように、「圧縮→拡散」を検証対象に選んだ理由は単純な思いつきではなく、既存の瞬間イベント型探索が収益化に失敗したことから導かれた、構造的な仮説転換でした。

本章以降では、まず圧縮状態の定義方法とスキャン設計について説明し、その上で観測エッジと収益エッジの分離をどのように行ったかを具体的に示していきます。


2. マルチ銘柄一括スキャン基盤の構築

2. マルチ銘柄一括スキャン基盤の構築

圧縮→拡散を検証するにあたり、まず取り組んだのは「探索基盤の再設計」でした。単一銘柄・単一条件の検証を繰り返すやり方では、偶然のヒットや右裾依存を見抜けません。そこで、10銘柄を同時に扱うマルチ銘柄一括スキャン基盤を構築しました。

今回対象としたのは以下の JPY 建て銘柄です。

  • BTCJPY
  • ETHJPY
  • SOLJPY
  • ADAJPY
  • XRPJPY
  • BNBJPY
  • DOGEJPY
  • SHIBJPY
  • POLJPY
  • NEARJPY

すべて同一期間の raw データ(depthSnapshot / depthUpdate / trade)から正規化イベントを構築し、同一ロジックでスキャンできるようにしました。


正規化イベントの設計

まず、各銘柄について events_normalized.jsonl を生成しました。1行1イベント形式で、以下の情報を含めています。

  • symbol
  • event_time
  • mid(ToB midpoint = (bid + ask) / 2)
  • spread_bps
  • range_5s / range_30s
  • update_rate
  • top5_liquidity
  • abs_ret_60s_bps
  • range_60s_bps

ここで重要なのは、探索段階では mid ベースの指標を使いつつ、後段で executable(bid/ask)基準に切り替えられる構造にしておくことです。観測エッジと収益エッジを明確に分離するため、同じイベント集合から両方を再計算できるようにしました。


条件空間の固定

次に、探索自由度を制御するため、条件空間を明示的に固定しました。

shock_type(例)

  • spread_shock
  • liq_drop
  • update_burst

post_regime

  • convergence
  • expansion
  • neutral

rate_bucket

  • low(下位40%)
  • mid(中位20%)
  • high(上位40%)

さらに、今回の圧縮探索では

  • compression=True(range_30s が下位20%)
  • trigger=A(range_5s が一定倍率を超える)

といったフラグを付与しました。

こうして、
symbol × condition × rate_bucket
の組み合わせを網羅的に評価できるようにしました。


右裾依存の排除

単純な平均 uplift では、極端な値(上位数%)に支配されます。そこで以下を必須出力にしました。

  • raw uplift
  • trim5 uplift(上位5%除外)
  • p50 uplift(中央値差)

これにより、「一部の巨大ジャンプだけで成立している疑似エッジ」を排除できます。


baseline の明確化

uplift は必ず baseline と比較しました。

  • baseline_all(全イベント)
  • baseline_same_shock(同一 shock_type 内)

特に same_shock baseline を導入したことで、「shock_type 自体がボラ高いだけ」というケースを排除できます。条件を濃縮した結果、本当に差分が出ているかどうかを確認するためです。


多重検定補正

条件は合計30(銘柄×条件×バケット)程度に及びます。偶然ヒットを避けるため、Benjamini–Hochberg 法による FDR 補正を実装し、q ≤ 0.1 を候補条件の最低基準としました。

この段階で、30条件中、上位候補は1つだけという結果になりました。

ADAJPY | compression=True | trigger=A | rate=low
n = 1180
range60_trim5 = +2.1162bps
range60_p50   = +2.4704bps
abs60_trim5   = +1.1306bps
q_range60     = 0.00000

この結果は、探索基盤が「当たりを量産する装置」ではなく、「厳しく絞り込む装置」として機能していることを示しています。


実装上のポイント

スキャン基盤は以下の構成で実装しました。

  • multi_symbol_volatility_scan.py
  • compression_expansion_scan.py
  • 出力:
    • scan_summary.csv
    • top_candidates.md
    • events_normalized.jsonl
    • scan_meta.json

銘柄間でロジック差分を持たないこと、条件定義をコード内で固定すること、そして探索ログをすべて保存することを徹底しました。


この基盤で得られたもの

このマルチ銘柄一括スキャン基盤により、

  • 銘柄固有の歪みか
  • 市場全体の構造か
  • 条件の濃縮効果か
  • 単なるボラ環境の反映か

を分離できるようになりました。

単銘柄で見れば「なんとなく効いていそう」な条件も、銘柄横断で見ると消えることが多く、逆に複数銘柄で残る条件は構造的な可能性が高まります。

この探索基盤の構築自体が、今回の作業における最も重要な成果の一つでした。エッジが見つかったわけではありません。しかし、「偶然ではないヒットだけを残す」ための土台は整いました。


3. 観測エッジの発見:ADAJPYの圧縮→拡散

マルチ銘柄一括スキャンを実行した結果、30条件中、統計的に有意な候補として残ったのは1つだけでした。

ADAJPY | compression=True | trigger=A | rate=low
n = 1180

他の銘柄や条件は、trim後や same_shock baseline 比較、多重検定補正を通すと消えていきました。しかし、この条件だけは残りました。

本章では、この「観測エッジ」が何を意味していたのかを整理します。


圧縮の定義

compression は以下の3条件で定義しました。

  • 直近30秒レンジが銘柄内下位20%
  • update_rate が低位(下位40%)
  • spread が安定(中央値以下)

つまり、

価格が動かず、板更新も少なく、スプレッドも安定している状態

を圧縮と定義しています。

この圧縮状態を起点に、trigger=A(range_5s が一定倍率を超える)を発火条件とし、そこからの 60 秒レンジを評価しました。


60秒レンジの増加(midベース)

baseline_same_shock(compression 起点全体)と比較した uplift は以下の通りです。

  • range60_trim5: +2.1162bps
  • range60_p50: +2.4704bps
  • abs60_trim5: +1.1306bps
  • q_range60 = 0.00000

重要なのは、これが raw 平均だけでなく、

  • 上位5%除外後も残り
  • p50(中央値差)も明確にプラス
  • 多重検定補正後も有意

であったことです。

つまりこれは、

「一部の巨大ジャンプ」ではなく、分布全体が押し上げられている

ことを示しています。


executable ベースでの再検証

mid ベースの観測エッジは、実際の約定価格で消えることが多いです。そこで、ToB executable 基準(long=ask、exit=bid / short=bid、exit=ask)で再計算しました。

結果は以下の通りでした。

  • range60_exec_long_bid uplift: +2.1640bps(trim5)
  • range60_exec_short_ask uplift: +2.1583bps(trim5)

mid とほぼ同水準で残りました。

これは重要です。

「mid の幻想」ではなく、実際の板ベースでも 60 秒レンジが増えている

ことが確認できました。


時間分解

さらに、時間分解を行いました。

range uplift(trim5)は以下のように推移します。

  • 10秒: +3.73bps
  • 20秒: +5.45bps
  • 30秒: +6.86bps
  • 45秒: +8.66bps
  • 60秒: +10.00bps

単発の瞬間ジャンプではなく、60秒まで持続的にレンジが拡大する傾向が見られました。


ここまでで言えること

ADAJPY の compression=True × trigger=A × rate=low 条件では、

  • 60秒レンジが有意に増加する
  • trim後も残る
  • p50も上昇する
  • executable基準でも残る
  • 時間とともに持続的に拡大する

という観測事実が確認されました。

これは明確に、

観測エッジ(volatility increase edge)

と呼べるものです。


しかし、まだ収益エッジではない

重要なのは、ここではまだ「レンジが増える」ことしか言っていない点です。

  • 方向は不明
  • 入口で有利かは未検証
  • コスト込みで利益が出るかは別問題

この時点では、あくまで

「この条件では、60秒のボラティリティが増える」

という観測事実を確定させたに過ぎません。

しかし、エッジ探索においてはこの段階が不可欠です。観測構造を明確にせずに戦略化すると、偶然や右裾依存に騙されます。

この章で確定したのは、

ADAJPY において、圧縮→拡散は統計的に再現可能な現象である

ということです。

次章では、この観測エッジがなぜトレード収益に変換できなかったのかを検証します。


4. しかし、ブレイクは全滅した

前章では、ADAJPY における「compression → expansion」が観測エッジとして成立していることを確認しました。mid ベースだけでなく executable ベースでも 60 秒レンジの増加は残り、trim 後や p50 でも明確な uplift が見られました。

ここまでは順調でした。

問題は、その観測エッジを「トレード収益」に変換できるかどうかです。

結論から言えば、ブレイク戦略は全滅しました。


戦略設計:Strategy S

圧縮→拡散に対する最も自然な戦略は、ブレイク追随です。

設計は以下の通りです。

  • 条件:ADAJPY & compression=True & trigger=A & rate=low
  • 形成窓:10秒
  • エントリー:high_10 / low_10 の初回ブレイク
  • 確認:1秒間ブレイク側に滞在
  • Exit:t0 + 60秒
  • 手数料:0.5bps / side(往復1.0bps)
  • 約定:ToB executable(long=ask、exit=bid)

統計的に「動く」のであれば、ブレイク追随は合理的に見えます。

しかし結果は以下の通りでした。

  • mean: -3.9422bps
  • p50: -5.5636bps
  • win_rate: 33.15%
  • trim5 mean: -5.9641bps
  • maxDD: 4261bps

観測エッジは存在していたにもかかわらず、収益は明確にマイナスです。


遅延エントリーも無効

「初動ブレイクが狩られているのではないか」という仮説のもと、

  • t0+5秒以前はエントリー禁止
  • t0+10秒以前は禁止
  • t0+15秒以前は禁止

といった遅延ゲートを導入しました。

しかし、

  • +5秒:変化なし
  • +10秒:変化なし
  • +15秒:むしろ悪化

という結果になりました。

さらに、エントリー後に追加で 5/10/15 秒遅らせる検証も行いましたが、いずれも平均はマイナスのままで改善しませんでした。

つまり、タイミングの問題ではありませんでした。


決定打:入口が毒

最も重要だったのは、エントリー直後の MFE / MAE 分解です。

  • 1秒時点で pnl < 0 の比率:95.65%
  • 1秒時点で一度もプラスにならない比率:98.43%
  • MFE_1s p50:-2.323bps
  • MAE_1s p50:-4.578bps

10秒時点でも、

  • pnl < 0:72.50%
  • 一度もプラスにならない:75.83%

これは明確に、

「エントリー直後から不利」

であることを示しています。

exit が悪いのではありません。

入口時点で構造的に不利です。


なぜ起きるのか

圧縮→拡散の最初のブレイクは、

  • 板が薄い
  • スプレッドが広がる
  • アルゴが流動性を刈り取る

という構造になりやすいと考えられます。

ブレイクで成行を打つということは、

もっとも不利な価格で流動性を取りに行く

ことを意味します。

その結果、約定直後に逆行しやすくなります。

観測上はレンジが拡大していても、その拡大は「往復型」であり、「持続トレンド型」ではない可能性が高いと解釈できます。


結論

圧縮→拡散は確かに動きます。

しかし、

  • 通常ブレイク追随
  • 確認付きブレイク
  • 遅延ブレイク
  • フェード

いずれも収益化できませんでした。

ここで確定したのは、

観測エッジ ≠ 収益エッジ

という事実です。

そしてさらに重要なのは、

このレジームでは「ブレイク」という行為そのものが構造的に不利

であることです。

次章では、この事実が探索全体にとって何を意味するのかを整理します。


5. 決定打:エントリー直後95%がマイナス

圧縮→拡散におけるブレイク追随がなぜ機能しなかったのか。その決定打になったのは、エントリー直後の挙動を分解した結果でした。

単純な最終損益や60秒後のリターンだけでは、「exit が悪いのではないか」「保持時間が長すぎるのではないか」といった疑念が残ります。そこで、trades.csv を起点に、エントリー後の executable 経路を板データから再構築し、MFE(Maximum Favorable Excursion)および MAE(Maximum Adverse Excursion)を 1秒・3秒・10秒単位で集計しました。

結果は明確でした。


1秒時点

  • pnl < 0 の比率:95.65%
  • MFE_1s <= 0 の比率:98.43%
  • MFE_1s p50:-2.323bps
  • MAE_1s p50:-4.578bps

エントリーしてから1秒以内に、ほとんどのポジションがマイナスになっていました。しかも、その1秒間に一度もプラスに触れないケースが98%を超えています。

これは「一瞬だけ逆行する」のではなく、

入口時点で既に不利な価格を掴んでいる

ことを意味します。


3秒・10秒時点

3秒時点でも、

  • pnl < 0 の比率:82.59%
  • MFE_3s <= 0 の比率:92.59%

10秒時点では、

  • pnl < 0 の比率:72.50%
  • MFE_10s <= 0 の比率:75.83%
  • MFE_10s p50:-2.283bps
  • MAE_10s p50:-6.840bps

さらに、

  • 「10秒時点で損失」の割合:72.50%
  • 「10秒以内に一度もプラスにならない」割合:75.83%

という結果でした。

これはほぼ、

最初の10秒でマイナスが確定している

状態です。


exit の問題ではない

「方向は合っているが exit が悪い」という可能性も検証しました。

しかし、

  • 10秒でプラス→最終マイナス:3.61%
  • 10秒以内に一度でもプラス→最終マイナス:7.96%

という比率から分かる通り、

一度利益方向に乗ったのに、exitで取り逃しているケースは少数派

でした。

つまり、問題は出口ではなく入口です。


構造的に不利な入口

この結果は偶然ではありません。

compression → expansion の最初のブレイクは、

  • 板が薄い
  • スプレッドが広がる
  • 流動性が抜けている

という状況で発生します。

そこに成行で飛び込むということは、

もっとも不利な価格で流動性を取りに行く

ことを意味します。

アルゴリズム市場では、こうした初動ブレイクは「刈り取り」の対象になりやすく、結果としてエントリー直後から逆行が発生します。

レンジは拡大しているにもかかわらず、エントリー直後に不利になるのはこのためです。


確定したこと

この章で確定したのは、

  • 観測エッジは存在する
  • しかしブレイク入口は構造的に不利
  • 問題は exit ではなく entry
  • 「遅らせれば改善する」という単純な話ではない

ということです。

95%が1秒でマイナスという事実は、戦略改善の余地がほぼ存在しないことを示しています。

ここで初めて、

このレジームでは、ブレイクという行為自体が誤りである

という白黒が付きました。

この確定は、失敗ではありません。むしろ、曖昧な可能性を完全に排除できたという意味で、探索の大きな前進です。


6. 動くことと取れることは違う

今回の一連の検証で、最も重要だったのは特定の条件が有効だったかどうかではありません。
本質的だったのは、次の事実が明確になったことです。

「動くこと」と「取れること」は違います。

これは理屈ではなく、データで確認した結論です。


圧縮→拡散は確かに“動いた”

ADAJPY における compression=True × trigger=A × rate=low 条件では、

  • 60秒レンジが有意に増加
  • trim5 後も uplift が残る
  • p50 でも分布全体が押し上げられる
  • executable ベースでもレンジ増加が消えない

という観測事実が確認されました。

つまり、

「この条件では動く」

ことは疑いようがありません。

観測エッジは存在していました。


しかし、ブレイクで入ると負ける

ところが、ブレイク追随戦略に落とし込むと、

  • 1秒で95%がマイナス
  • 10秒以内に一度もプラスにならないケースが75%超
  • 平均も中央値もマイナス
  • trim後はさらに悪化

という結果になりました。

ここで明確になったのは、

動きがあっても、それが“自分に有利な価格経路”とは限らない

ということです。


なぜこのズレが起きるのか

レンジが増えるということは、

  • 高値も安値も広がる
  • ボラティリティが上がる

という意味です。

しかし、トレードで重要なのは、

  • 自分がエントリーした価格から
  • 有利な方向に
  • コストを超えて
  • 持続するかどうか

です。

今回の圧縮→拡散では、

  • レンジは広がる
  • しかし初動は逆行しやすい
  • 方向は持続しない
  • ブレイクは最悪価格を掴みやすい

という構造が確認されました。

つまり、

市場は動いているが、動き方が「取れない形」だった

のです。


観測エッジと収益エッジの分離

今回の検証で明確になったのは、次の3層構造です。

  1. 観測エッジ
    • 条件付きで統計的差分が存在する
  2. 執行エッジ
    • executable ベースでも差分が残る
  3. 収益エッジ
    • 実際に戦略として利益が残る

圧縮→拡散は、1と2は満たしました。

しかし、3は満たしませんでした。

ここに大きな断絶があります。

多くの探索は、1で止まります。
しかし実際に重要なのは3です。


「動く」は簡単、「残る」は難しい

市場が効率的である理由の一端が、ここにあります。

動きは生じます。
歪みも生じます。
ボラティリティも増減します。

しかし、その歪みが

  • レイテンシ
  • スプレッド
  • 流動性制約
  • アルゴの刈り取り

を超えて残るかどうかは、まったく別問題です。

今回の検証は、

動きを当てることはできるが、残る歪みは見つかっていない

という現実を明確にしました。


これは敗北ではない

「動くのに取れない」という事実は、失敗ではありません。

むしろ、

  • 観測と収益を分離できた
  • 入口の不利を構造的に特定できた
  • exit の問題ではないと確定できた

という意味で、探索は一段進みました。

エッジ探索は「当たりを見つける作業」ではなく、

取れないものを削り落としていく作業

です。

今回の検証で削れたのは、

  • 瞬間イベント型の安易なブレイク発想
  • 「ボラがある=取れる」という思い込み

でした。


次に問うべきこと

ここまで来ると、問いはこうなります。

  • 取れるのは“動く最中”なのか
  • それとも“動く前”なのか
  • あるいは“動き切った後”なのか

少なくとも一つだけ、確定しました。

圧縮→拡散の初動ブレイクは、取れない。

この確定は、探索を前に進めるための土台になります。

動くことと取れることは違う。

その違いを、今回ようやくデータで掴むことができました。


7. 今回確定したこと

今回の一連の検証は、「エッジを見つけた」という話ではありません。
むしろその逆で、

何がエッジではないかを、明確に確定させた

という記録です。

しかし、この“否定の確定”こそが、探索を前進させるための最も重要な成果でした。

ここでは、今回の作業で白黒がついたことを整理します。


1. spreadショック系は収益化できない

まず、spread_shock を中心とした瞬間イベント型の探索は、方向・ボラともに収益化できないと確定しました。

  • midベースでは差分が見える場合がある
  • しかし executable ベースに落とすと消える
  • trim5 や p50 で崩れる
  • ブレイク追随もフェードも機能しない

これは単なる「うまくいかなかった」ではなく、

構造的に不利である

ことを統計的に確認しました。


2. liq_drop × expansion × mid は“荒れる”が取れない

次に、流動性急減 × 拡散継続 × 中程度 update_rate という条件では、

  • 60秒レンジが増加
  • trim後も残る
  • 複数銘柄で再現

という観測エッジが確認されました。

しかし、

  • ブレイク追随は不利
  • 確認付きでも不利
  • フェードも不利

という結果になりました。

つまり、

荒れることは当てられるが、荒れは取れない

という構造が確定しました。


3. compression → expansion は観測エッジだが収益エッジではない

圧縮→拡散の探索では、ADAJPY において明確な観測エッジが見つかりました。

  • 60秒レンジ uplift
  • trim後も残る
  • p50でも残る
  • executable基準でも消えない

ここまでは非常に強い結果でした。

しかし、実際にブレイク戦略へ落とすと、

  • 1秒で95%以上がマイナス
  • 10秒以内に一度もプラスにならないケースが75%以上
  • 平均・中央値ともにマイナス
  • trim後はさらに悪化

という決定的な結果になりました。

ここで確定したのは、

観測エッジと収益エッジは別物である

ということです。


4. 問題は出口ではなく入口である

exit の改善余地を疑い、

  • 遅延エントリー
  • 確認時間延長
  • 保持時間調整

を検証しましたが、いずれも改善しませんでした。

MFE / MAE 分解により、

エントリー直後から構造的に不利

であることが確定しました。

これは戦略調整の問題ではなく、レジーム特性の問題です。


5. イベント駆動型瞬間構造は収益化困難

ここまでの探索で、以下が確定しました。

  • 瞬間ショック型
  • 流動性急減型
  • 圧縮→拡散型

いずれも、

初動を取る設計では収益化困難

です。

つまり、短期 CEX 市場においては、

「動く瞬間」は多くの場合、刈り取り構造になっている

可能性が高いという結論に至りました。


6. 探索エンジンは成熟した

今回の作業で構築・確立できたものもあります。

  • マルチ銘柄一括スキャン
  • trim5 / p50 による右裾排除
  • same_shock baseline 比較
  • 多重検定補正
  • executable 基準での再検証
  • 簡易BTで即白黒

これにより、

「なんとなく効いている」条件を残さない

探索基盤が完成しました。


7. 最大の確定

今回最も重要な確定はこれです。

「動く」ことは確認できる。しかし「取れる」とは限らない。

この分離ができたこと自体が、探索の大きな前進です。

エッジ探索は、当たりを見つける作業ではありません。
外れを削り落とし、最後に残ったものだけを疑い続ける作業です。

今回削れたのは、

  • ブレイクへの過信
  • ボラ増加=エッジという誤解
  • 観測差分をそのまま収益と見なす思考

でした。

そしてここから、次の探索テーマがより明確になります。

瞬間ではなく、持続。
イベントではなく、状態。

今回確定したことは、次の仮説の精度を確実に上げています。


8. 非効率な市場を探すという次の課題

今回の一連の検証で明確になったのは、「エッジがない」ということではありません。より正確に言えば、

少なくとも今回検証した短期 CEX の瞬間構造には、残る歪みが見つからなかった

ということです。

この結論は消極的なものに見えるかもしれません。しかし実際には、次の課題をはっきりさせる積極的な成果でもあります。

それは、

非効率な市場を探すこと

です。


短期 CEX は想像以上に効率的だった

今回の検証では、

  • spread ショック
  • liq_drop × expansion
  • compression → expansion
  • ブレイク追随
  • フェード

といった、いかにも短期で歪みがありそうな構造を網羅的に検証しました。

しかし、

  • executable ベースで再計算すると差分が消える
  • trim 後や p50 で崩れる
  • エントリー直後に構造的に不利
  • ブレイクはほぼ刈られる

という結果になりました。

これは偶然ではありません。

短期の CEX 市場では、

  • 高速アルゴリズムが常に流動性を監視している
  • 板更新は極めて高速
  • ブレイクは事実上“流動性提供側の餌”

という構造になっている可能性が高いと考えられます。

つまり、

市場は歪むが、その歪みは瞬時に回収される

ということです。


非効率はどこに生まれるのか

では、エッジは存在しないのか。

そうではありません。

エッジが生まれる典型的な源泉は、以下のいずれかです。

  1. 制約
    • 在庫制約
    • 資金制約
    • ガスコスト
    • 規制
  2. 同期遅延
    • 市場間の価格伝播の遅れ
    • 取引所間のレイテンシ差
  3. 参加者の偏り
    • 一方向フローの集中
    • 情報の非対称
  4. 価格形成の未成熟
    • 板の薄さ
    • 更新頻度の低さ

今回検証した CEX 短期市場は、これらの制約が相対的に弱い環境でした。

  • 板は厚い
  • 更新は高速
  • 価格伝播は即時
  • 流動性提供者が多数存在

その結果、「瞬間的な歪み」はあっても、それが収益として残らない市場でした。


DeFi という選択肢

ここで自然に浮かぶのが、DeFi 市場です。

AMM(Automated Market Maker)型の市場では、

  • 在庫はプール構造に依存
  • ガスコストという明確な制約
  • ブロック単位での価格更新
  • MEV という構造的摩擦

が存在します。

これらは「非効率の源泉」になり得ます。

ただし同時に、

執行層で抜かれるリスク

も存在します。

エッジがあっても、

  • フロントラン
  • バックラン
  • MEV ボット

に回収される可能性があります。

したがって、「DeFiに行けば簡単」という話ではありません。

重要なのは、

どこに制約があるかを仮説として持つこと

です。


探索の方向性

今回の検証で明確になったのは、

  • 瞬間イベント型は厳しい
  • ブレイクは構造的に不利
  • ボラ増加は収益に直結しない

ということです。

次に進む方向は、少なくとも二つ考えられます。

  1. 持続構造の探索
    • フローの持続
    • 状態遷移
    • レジーム依存
  2. 市場構造の変更
    • 異なる取引所
    • 異なる建値(USDT系など)
    • DeFi 市場

いずれにせよ、焦点は

「どこが非効率なのか」

に移ります。


今回得た最大の武器

今回の探索で得た最大の成果は、

  • 観測エッジと収益エッジを分離できるようになったこと
  • mid と executable を明確に分けられるようになったこと
  • 右裾依存を排除できるようになったこと

です。

つまり、

効率的な市場を効率的だと判定できる能力

を手に入れました。

これは、非効率を探すための前提条件です。


結論

エッジ探索は、

  • 何かを見つける作業ではなく
  • 削っていく作業

です。

今回削れたのは、

  • 短期 CEX の瞬間構造

でした。

次の課題は、

非効率な市場を見つけること

です。

それは、

  • 市場の種類を変えることかもしれません
  • レイヤーを変えることかもしれません
  • 時間軸を変えることかもしれません

いずれにせよ、探索は続きます。

効率的な市場を見抜けたことは、敗北ではありません。
むしろ、次の一手を選ぶための重要な地図が手に入ったということです。


9. 今回の探索で得たもの

今回の探索で「勝てる戦略」は見つかりませんでした。

しかし、それでもなお、得たものは少なくありません。むしろ、エッジが見つからなかったからこそ得られたものがあります。

この章では、今回の作業を通じて何を手に入れたのかを整理します。


1. 観測エッジと収益エッジを分離できるようになった

これが最大の成果です。

これまでは、

  • レンジが増えている
  • ボラが拡大している
  • 統計的に有意差がある

といった結果を見ると、「取れるかもしれない」という期待が残っていました。

しかし今回、

  • mid ベースで有意
  • executable でも残る
  • trim 後も残る
  • p50 でも残る

という“強い観測エッジ”があっても、

収益に変換できない

ことを実測しました。

これは抽象的な理解ではなく、データで確認した事実です。

この分離ができるようになったことは、探索の質を一段引き上げています。


2. 「入口が毒」という構造理解

ブレイク追随が機能しない理由を、

  • 感覚ではなく
  • MFE / MAE 分解で

特定できました。

エントリー直後に 95% がマイナスという事実は、

exit の問題ではなく、entry の問題である

ことを明確に示しました。

これにより、

  • 遅延させれば改善するのではないか
  • 保持時間を変えればよいのではないか

といった曖昧な可能性を排除できました。

探索において、「違う」と確定できることは非常に重要です。


3. 右裾依存を排除する視点

raw 平均がプラスでも、

  • 上位5%除外で崩れる
  • p50 がマイナス

というケースを何度も確認しました。

その結果、

平均は信用しない

という基準が定着しました。

  • trim5
  • p50
  • same_shock baseline
  • BH補正

を通さない限り、候補と見なさない。

この探索基準は、今後の仮説検証の精度を大きく引き上げます。


4. executable 基準の徹底

mid ベースでプラスでも、約定ベースで消えるケースは多いです。

今回、

  • mid での uplift
  • executable での uplift
  • さらに実際の BT

まで一貫して検証しました。

これにより、

観測と執行のズレ

を常に意識できるようになりました。

これは短期市場で戦う上で不可欠な視点です。


5. 「動く」市場は効率的かもしれないという理解

今回の結果は、

  • 瞬間ショック
  • 流動性急減
  • 圧縮→拡散

いずれも収益化困難というものでした。

つまり、

短期 CEX 市場は想像以上に効率的である

という可能性が高まりました。

これは悲観ではありません。

効率的な市場を効率的だと判断できることは、非効率を探すための前提条件です。


6. 探索エンジンの成熟

今回構築した基盤は、

  • マルチ銘柄一括スキャン
  • 条件固定による自由度制御
  • 多重検定補正
  • executable 再検証
  • 簡易 BT による即時白黒

まで含んでいます。

これはもう、思いつきレベルの検証ではありません。

仮説を迅速に潰せるエンジン

ができた、ということです。


7. エッジ探索は「削る作業」であるという実感

今回の作業で、改めて理解しました。

エッジ探索は、

  • 何かを見つける作業ではなく
  • 残らないものを削り続ける作業

です。

spread ショックを削り、
liq_drop 拡散を削り、
compression 拡散を削り、
ブレイクを削りました。

残ったのは、

まだ何も見つかっていないという事実

ではありません。

ここには無い、という地図

です。


終わりではなく、整理

今回の探索で得たものは、

  • 具体的な勝ちパターンではありません。
  • しかし、探索の解像度です。

どこで負けるのか。
なぜ負けるのか。
何が効率的なのか。

それが明確になったことで、次の仮説はより絞られます。

エッジが見つからなかったことは、失敗ではありません。

探索の質が一段上がったことこそが、今回の最大の成果です。

-Bot, CEX, 開発ログ