こんにちは、ぼっちbotterよだかです。
今回は、multi_market_probe の歪み回帰判定機を「もっと賢くする」方向ではなく、まずは事実ベースで読める形へ寄せ直す作業を進めました。corr や quality を前段の白黒判定から外し、恒常乖離は residual として切り出し、Structure Probe も 30〜120 秒まで拡張しています。まだ「構造あり」と言い切れる段階ではありませんが、その代わりに、何が見えていて何がまだ言えないのかは前よりかなりはっきりしてきました。今回は、今日入れた修正と現時点の事実、そして次に何を詰めるべきかを、実行プランにつながる形でまとめます。
-
-
🛠️開発記録#490(2026/3/22)multi_market_probe開発ログ ― 歪み回帰を「構造判定」と「執行判定」に切り分け始めた話
続きを見る
1. 今日のゴール:歪み回帰判定機を一旦仕上げ、探索範囲を30〜120秒に絞る
今回のゴールは、歪み回帰でいきなり優位を証明することではありませんでした。まずやりたかったのは、binance_perp と bitFlyer FX のあいだにある歪み回帰構造を観測するための判定機を、一旦まともに動く形まで持っていくことです。言い換えると、「勝てるシグナルを見つける」の前に、「何を見ていて、何がまだ見えていないのか」を誤読しにくい状態へ戻すことが今回の目的でした。
背景にあったのは、ここ数日の違和感です。前回までの J-Reversion は、構造判定器として作っているつもりでも、実際には corr や quality、ready 条件、さらには判定器自身の内部選別がかなり近い場所に混ざっていました。その結果、「本当に歪み回帰構造が弱いのか」「観測器の前提が強すぎて事実を拾えていないだけなのか」が、少し分かりにくくなっていました。今回まずやりたかったのは、この混線をほどくことです。
もう一つ大きかったのは、探索範囲をこれ以上広げすぎないことでした。歪み回帰のようなテーマは、時間幅を自由にしてしまうと際限なく広がります。30秒では弱そうに見えたら60秒、60秒で微妙なら120秒、さらにその先も……と、いくらでも問いを後ろへずらせてしまう。これをやると研究が深まるというより、むしろ「何を判定したいのか」が曖昧になりやすい。そこで今回は、最初から上限を120秒に置き、その範囲の中で 30 / 60 / 90 / 120 秒を比較する、という形にしました。
この制限にはかなり意味があります。自分がやりたいのは、あくまで主戦場で現実に執行可能な時間幅の中で、歪み回帰が構造として存在するのかを見極めることです。数分、数十分、あるいはもっと長い時間幅まで自由に広げてしまうと、「研究として面白い問い」と「自分が実際に触れる問い」が簡単に混ざります。だから今回は、探索範囲を狭めたというより、問いを現実の戦場に縛り直した、という感覚の方が近いです。
今日のゴールをもう少し具体的に書くと、やりたかったのは次の三つでした。第一に、J-Reversion の前段から解釈寄りの条件をできるだけ外し、歪み回帰をまず事実ベースで見られるようにすること。第二に、その判定器を 30 秒だけでなく 60 / 90 / 120 秒にも拡張し、時間幅比較ができる状態にすること。第三に、binance_perp だけでなく bybit_perp や coinbase_spot にも横展開できる器へして、特定市場だけの見かけの構造に閉じないようにすることでした。
つまり今回は、「構造あり」と言い切る日ではありません。むしろその逆で、まだ言えないことを言えないまま扱える観測器へ寄せる日でした。歪み回帰があるならある、ないならない、まだ薄いなら薄い。その現在地を、前より雑に誤認しないための器を作る。今回の作業全体は、そのための一段目だったと思っています。
2. 今日入れた修正:raw premium から residual へ、判定器を“事実寄り”に組み直した
今回いちばん大きかったのは、歪み回帰判定機の中で混ざっていたものを、一度分け直したことでした。やりたかったのは単なるパラメータ調整ではありません。何を市場の事実として見て、何を判定器側の都合として扱うのかを整理し直し、そのうえで J-Reversion と Structure Probe を組み直すことでした。
まず手を入れたのは、歪みの主系列です。これまでは raw premium をそのまま見ている感覚が強く、恒常的に存在する乖離幅と、一時的な歪みが混ざりやすい状態でした。今回ここを residual ベースへ寄せました。つまり、raw premium から baseline を引いた residual premium を判定の主系列にし、恒常乖離そのものは別に残す形です。これはかなり重要でした。raw premium をそのまま歪みとして扱うと、「たまたま開いた差」と「普段からそこにある差」の区別がつきにくいからです。今回の修正で、少なくとも短期の歪み回帰判定器は、一時的なズレを見に行く器としてかなり意味がはっきりしました。
この baseline には EWMA を使い、half-life は 30 分から始めています。ここで重要なのは、これを「真の均衡価格」として扱っていないことです。今回の baseline は、あくまで短期歪みを切り出すための局所基準です。長期の市場構造を説明するものではなく、30〜120 秒の範囲で「いまこの瞬間、基準からどれだけ外れているか」を見るための便宜的な土台として置いています。この割り切りは、今回かなり大事でした。
次にやったのが、判定ロジックの整理です。今回の J-Reversion では、Verdict 自体は Yes / No の二値寄りに寄せました。ただし、そのかわりに「そもそも今の判定が評価可能なのか」を別で持つ形にしています。方向未観測、サンプル不足、歪みイベント不足、CI が結論不能、こうしたものを全部 Verdict に混ぜると、NO の意味が濁るからです。今回は evaluable_flag を別に出し、Verdict とは切り離して見られるようにしました。要するに、白黒は白黒として返しつつ、「その白黒がどれだけ事実ベースで語れる状態なのか」は別軸で残す形です。
統計判定も、今回かなり整理しました。CI は 95% Wilson、margin は 0.00 で開始しています。ここでやりたかったのは、hit rate の生値だけで YES / NO を決めることを避けることでした。短期構造の観測では、サンプル数が薄い段階でそれらしい値が出ることは普通にあります。今回の修正で、少なくとも「少数サンプルの偏りで見かけ上よさそうに見える」ものを、そのまま構造ありと読む危険は少し下げられました。
direction の扱いも整理しています。今回の判定では、delta の符号チェックと hit rate の両方を見ています。つまり、途中で少し戻ったかどうかだけではなく、30 秒後の終点ベースでもゼロ方向へ向いているかを確認する形です。ここは単なる解釈の追加ではなく、「回帰」と呼ぶ以上は最低限必要な整合性チェックとして残しました。戻り方がたまたま一瞬だけだったのか、それとも終点まで含めて回帰方向を向いていたのかを分けるためです。
Structure Probe 側もかなり変えました。今回の Probe は、判定器が YES / NO を返したものだけを拾うのではなく、まず residual の threshold 到達イベントを一次母集団として持つようにしています。そのうえで、YES / NO は参考ラベルとして上に重ねる構造にしました。さらに、threshold を跨いだ瞬間だけでなく、threshold 超えが継続している間も rearm_sec=10 で再アンカーするようにしています。これを入れた理由は単純で、閾値上に張り付く局面では、従来の「跨ぎ時だけ」だと母集団形成が止まってしまうからです。今回の修正で、Structure Probe はかなり「市場で起きたことをまず数える」装置に近づきました。
最後に、時間幅と市場の横展開も入れました。判定と Probe は 30 秒だけでなく 60 / 90 / 120 秒まで拡張し、bybit_perp と coinbase_spot 版のダッシュボードも追加しています。これは単なる見た目の追加ではなく、時間幅比較と市場比較をできるようにするための器づくりです。30 秒では見えないものが 60 秒で見えるのか、binance では弱くて bybit では立つのか、といった問いを、同じ構造の上で比較できる状態にしたかったからです。
要するに今回の修正は、歪み回帰判定機を「もっと賢くした」というより、まずは何を事実として見ている装置なのかを明確にし直した作業でした。raw premium から residual への移行、Verdict と evaluable の分離、CI 判定の導入、Structure Probe の再武装、30〜120 秒への拡張。どれも派手な最適化ではありませんが、少なくとも前より「何が見えていて、何がまだ言えないのか」はかなり誤読しにくくなったと思っています。
3. いま見えている事実:判定結果はまだ薄いが、市場間の形と差は見え始めた
今回の改修を入れたあと、最初に確認したかったのは「良い結果が出たかどうか」ではありませんでした。まず見たかったのは、器がちゃんと動いているかどうかです。判定器、Structure Probe、複数 horizon、複数市場の横展開まで一気に入れたので、この段階で重要なのは、優位を証明することではなく、少なくとも「何が更新されていて、何がまだ立っていないのか」を誤読しない状態になっているかどうかでした。その意味では、今回のスクリーンショットから読める現在地はかなりはっきりしています。


まず、J-Reversion や Structure Probe の白黒判定そのものは、まだかなり薄いです。YES がきれいに立っているわけでもないし、Structure Probe も horizon によってはアンカー数が十分に積み上がっていません。つまり現時点では、「歪み回帰構造がある」と言い切れる段階にはまだ入っていません。ここははっきりしています。ただし、それは失敗ではありません。今回の段階で必要だったのは、まず器が動き、まだ言えないことを「まだ言えない」と読めることだったからです。少なくとも今は、結果が薄いことを、そのまま現在地として扱える状態にはなっています。
その一方で、M 系の [M] Premium Mid bps を見ると、かなり興味深い事実も出ています。binance_perp、bybit_perp、coinbase_spot をそれぞれ ref_market にしたグラフは、完全一致ではないにせよ、かなり似た形をしています。これは重要です。少なくとも現時点では、bf_fx に対する外部市場 3つの premium 変動は、バラバラというより、かなり共通した大きな波の上で動いているように見えます。つまり、「市場ごとにまったく別世界を見ている」というよりは、共通した世界価格ショックを、それぞれ少し違う水準と細部で反映している可能性が高い、ということです。



ただし、似ているといっても同じではありません。水準差はありますし、局所的な動きも少しずつ違います。だから今の段階で言えるのは、「大きな外形はかなり共通している」というところまでです。逆に言えば、今後の論点はこの先で、どこが似ていてどこが違うのか、そしてその差が主戦場で使える差なのかを切ることになります。少なくとも今回の時点では、「市場別に分離できているのか」という不安に対しては、かなりポジティブな確認が取れました。
F 系については、まだ読み方に注意が必要です。Forward 側にそれっぽい反応が出始めている市場もありますが、現時点でそれをそのまま「構造あり」と読むのは危険です。今回の判定は residual ベースに寄せ直したとはいえ、まだサンプルが薄い時間帯もありますし、horizon ごとの差も十分に見切れていません。つまり、反応があること自体は観測できていても、それが統計的に安定した構造なのか、一時的な揺れなのかはまだ分からない。ここはかなり大事です。今回見えているのは、優位の確定ではなく、少なくとも「何も起きていないわけではない」という事実です。
Structure Probe も同じです。30 / 60 / 90 / 120 秒まで拡張したことで、「どの時間幅で最初に母集団が立つのか」を同じ器で見られるようになりました。ただし、現段階では horizon 間の優劣を語れるほどサンプルはまだ溜まっていません。ここでの前進は、結論が出たことではなく、結論が出る前に比較可能な形へ揃えられたことです。30 秒だけを見て「弱い」と言っていた頃と違って、今は少なくとも「30 では弱いが 60 なら立つのか」「90 まで伸ばすとどうなるのか」を同じ枠組みで観測できます。これはかなり大きいです。
要するに、いま見えている事実は二つあります。ひとつは、判定器の結果そのものはまだ薄く、歪み回帰構造の有無を断定できる段階ではないこと。もうひとつは、それでも市場間の premium 形状や horizon ごとの立ち上がり方といった、次の比較に使える事実は確実に見え始めていることです。今回の現在地は、「何も分からなかった」ではありません。まだ結論は出ていないが、どこを見ればその結論に近づけるかは、前よりずっとはっきりしてきた段階だと思っています。
4. 現時点の課題:構造バイアスをどう扱うかが、次の本丸になってきた
今回いちばん大きく残った課題は、やはり構造バイアスの扱いです。実際に [M] Premium Mid bps を見ていると、この問題の難しさはかなりはっきりします。短い時間幅だけを見ると、一定の帯の中で逸脱と収束を繰り返しているように見えます。だから最初は「この帯からの飛び出しを歪み、その後の戻りを回帰として見ればよいのではないか」と考えやすいです。ところが、観測時間を少し広げると、その帯そのものが動いて見える。さらに日単位まで引くと、そもそも premium の中心水準が全然一定ではありません。つまり、短期では“帯の中の往復”に見えるものが、長期では“帯そのものの移動”に見えてしまう。このズレが、いま直面している構造バイアスの難しさです。



ここで重要なのは、「回帰しているのか、していないのか」という二択ではないことです。本当に難しいのは、「何に対して回帰しているとみなすのか」が時間幅によって変わってしまうことです。30〜120 秒の問いとして見るなら、「短期的に基準から外れた差が戻るか」が主題になります。ところが、数十分〜数時間で見ると、今度はその基準自体が動いているように見える。つまり raw premium をそのまま一本で眺めると、見ている問いそのものが途中で変わってしまうわけです。この状態で「歪み回帰がある/ない」を一本化して決めようとすると、かなり苦しくなるのは当然でした。
だから今回、判定器の主系列を residual に寄せたのは正しかったと思っています。短期の歪み回帰を見たいなら、raw premium の中に入っている恒常乖離や水準差をいったん引き算して、局所的なズレだけを見る方が筋がいい。少なくとも 30〜120 秒の判定という目的に限れば、構造バイアスは「まずは分離してから見る」方が自然です。ただし、ここで大事なのは、構造バイアスを“消えたもの”として扱わないことです。baseline 控除は便利ですが、それは同時に情報圧縮でもあります。実際には、bias の大きさや傾き、自体の動き方に情報が含まれているかもしれない。だから、判定では residual を使うとしても、raw premium や baseline 自体は観測対象として残しておく必要があります。
ここで今回かなりはっきりしたのは、構造バイアスをどう扱うかの問いは、短期歪み回帰の問いとは少し別だということです。短期戦略の判定器としては、「今の局所基準からどれだけ外れたか」を見る residual で十分かもしれません。でも、それとは別に、「そもそもこの市場ペアは普段どれくらいズレているのか」「そのズレは時間帯や regime でどう変わるのか」という問いは残ります。しかもこちらは、将来的には単なる観測テーマではなく、取引戦場の向き不向きそのものに関わる可能性があります。つまり、構造バイアスは今すぐ判定ロジックに戻すべきものではないが、長期的には別テーマとして詰める価値が高い、ということです。
今回の気づきとして大きかったのは、研究対象の範囲を最初から制限することの重要性もここに直結していた点です。もし時間幅を自由に広げていたら、この構造バイアスの問題は無限に広がります。30 秒の歪み回帰を見たいのか、数十分スケールの帯の移動を見たいのか、数日スケールの市場構造を見たいのか、それぞれ問いが違うからです。今回は 120 秒を上限に置いたことで、少なくとも短期の判定器としては「そこから先は今は見ない」と線を引けました。これはかなり大きいです。構造バイアスの本質そのものを今日解決したわけではありませんが、「自分がいま何を解きたいのか」はかなり狭められました。
だから現時点での整理としては、こう置くのがいちばん自然だと思っています。raw premium は市場構造の地図として残す。baseline は短期歪みを切り出すための局所基準とみなす。residual は 30〜120 秒の歪み回帰判定に使う。そして、構造バイアス自体の意味づけ――たとえば level、slope、stability が何を表しているのか――は別テーマとして残す。今回の課題は、構造バイアスを完全に理解できていないことそのものではなく、それを何に使う問いなのかをまだ分けきれていないことでした。今回の改修で、少なくともそこを分けて考える足場はかなりできたと思っています。
5. 次にやること:構造を見て、そのあと執行を考える順番を守ったまま詰める
今回の改修で、すぐに新しい優位が見つかったわけではありません。むしろ逆で、「まだ言えないこと」がかなりはっきりしました。ただ、これは後退ではなく前進だと思っています。前よりも、何が市場の事実で、何が判定器側の都合で、どこから先がまだ未確定なのかを分けて読めるようになったからです。だから次にやることも、闇雲に機能を足すことではなく、今回整えた器の上で、事実を順番に積んでいくことになります。
まず最初にやるべきなのは、30 / 60 / 90 / 120 秒の各 horizon で、母集団がどう立ち上がるかをそのまま観測することです。今回ここまで広げた意味は、どの時間幅が本命かを後付けで決めるためではありません。むしろ、同じ構造の上で比較できるようにして、どこで最初にサンプルが立ち、どこで最初に差が見え始めるのかを確認するためでした。したがって次のフェーズでは、まず各 horizon の ALL anchors がきちんと積み上がるか、YES / NO の差が出る前に一次母集団としての観測が成立しているかを見ます。ここが立たないままでは、その先の解釈に進む意味がありません。
次に見るべきなのは、判定不能や NO がどの reason に偏るのかです。今回、Verdict 自体はかなり二値寄りに寄せましたが、そのかわり evaluable_flag と reason を残しています。ここを見ることで、「構造が無い」のか、「方向未観測なのか」、「サンプルが足りないのか」、「CI がまだ結論不能なのか」を分けて読めます。次回以降は、単に NO が多いか少ないかを見るのではなく、NO の内訳がどこに集中しているのかをまず確認するつもりです。いま本当に詰めるべきなのは閾値そのものではなく、どこで判定が止まっているのかを事実ベースで切ることだからです。
三つ目は、市場比較をちゃんと進めることです。今回 bybit_perp と coinbase_spot 版も作ったことで、少なくとも同じ器で比較する準備はできました。実際、[M] Premium Mid bps の形はかなり似て見えています。ただし、ここで終わってはいけません。次に見たいのは、見た目の大きな波が似ていることではなく、その上で F や Structure Probe がどう違うかです。たとえば、binance では薄いのに bybit では早く立つのか、coinbase では水準差は近いのに touch が弱いのか、といった差です。今後の比較は、「形が似ている」で止めず、「何が共通で何が違うのか」を前段と後段で切り分けていくことになります。
四つ目は、構造バイアスをすぐに判定ロジックへ戻さないことです。今回かなり大きく見えてきた課題ではありますが、だからといって次にいきなり baseline の意味づけや長期 bias を J-Reversion の内部へ混ぜるつもりはありません。順番としては、まず residual ベースの短期歪み回帰判定を、この 30〜120 秒の枠内で一度見切る。そのうえで、raw premium や baseline の変動を別テーマとして観測し、必要があれば後から条件変数として格上げする。この順序を守ることが大事だと思っています。構造バイアスは重要ですが、今のフェーズでは「まだ混ぜない」が正解です。
そして最後に、執行判定を本当に後段へ押し込めることです。最終的に知りたいのは、もちろん主戦場で取れるかどうかです。ただ、今回ようやく「構造っぽい反応」と「構造あり判定」と「主戦場での executable 優位」は別問題だと、前よりはっきり読めるようになりました。だから次も同じで、前段ではまず構造を見る。そのあとで、見えた構造のうちどれが bf_fx で executable 優位に変換されるのかを見る。この順番を崩さないことが、今後の実行プランの軸になります。
今回の結論を一言でまとめるなら、やはりこれです。まず構造を見て、そのあと執行を考える。今回はその順番に戻した。 まだ白黒は出ていませんが、その代わりに、白黒をどこでどう判定するべきかはかなり整理されました。次にやることは、その整理した器の上で、余計な解釈を増やさず、事実を少しずつ積み上げていくことだと思っています。