Bot CEX 開発ログ

🛠️開発記録#455(2026/2/18)「“当たる”と“稼げる”の間にある2.6bps」

本日の検証で、ひとつはっきりしたことがあります。
私のbitFlyer FX戦略は「方向性」をある程度捉えられていました。しかし、それでもお金は増えませんでした。

ofi_1sは5秒先の価格方向を約70%の精度で示しており、ミッド基準では平均+0.9bpsの優位性が確認できました。数字だけを見れば悪くありません。ですが、実行可能価格(executable)ベースに置き換えた瞬間、その優位性は消えました。平均スプレッド約2.6bpsという現実が、すべてを飲み込んでいたのです。

本記事では、「当たる」ことと「稼げる」ことのあいだに横たわるこの2.6bpsの壁について、Rawログ検証の結果をもとに整理します。閾値調整をやめ、観測フェーズへ移行した理由。そして、なぜ今はトレード回数よりもログ蓄積を優先するのか。その背景を、できるだけ冷静にまとめます。

これは後退ではありません。
戦略を作り直すための、構造確認の一日です。

1. 今日の結論:方向性はある、しかし勝てない

まず、今日の結論から書きます。

今回のRawログ検証で分かったのは、私の戦略には「方向性情報」は存在している、ということです。
ofi_1sを用いたシグナルは、5秒先の価格方向をおよそ70%の精度で捉えていました。ミッド価格基準では、平均で約+0.9bpsの優位性も確認できています。

ここだけを見ると、悪くありません。
むしろ「もう少し調整すればいけるのではないか」と思いたくなる数字です。

ですが、問題はそこから先にありました。

実行可能価格(executable)ベースに置き換えた瞬間、その優位性は消えました。
平均スプレッド約2.6bpsの環境下では、+0.9bpsの偏りはまったく足りません。実際、スプレッド控除後のリターンは概ね-1.2〜-2.9bpsと、安定してマイナスでした。

つまり、

  • 「当たっている」
  • しかし「取れていない」

という状態です。

これはトレードをやっていると、何度も直面する壁ではないでしょうか。
シグナルは悪くない。方向も読めている感覚がある。それなのに、口座残高は増えない。

今回の検証は、その曖昧な違和感を数値で突きつけるものでした。

重要なのは、ここで「精度が足りない」と短絡的に考えないことだと思っています。
今回の結果は、方向予測の問題というよりも、「コストを超える強度がない」という構造的な問題を示唆しています。

優位性はある。しかし、その幅が小さすぎる。
2.6bpsの壁を越えられない限り、それはエッジとは呼べません。

だからこそ、今日は閾値調整をやめました。
回し続ければ、きっとまたじわじわと資金が溶けていくだけだからです。

方向性があることが確認できたのは前進です。
しかし同時に、「このままでは勝てない」という事実も、はっきりしました。

この両方を同時に受け止めることが、今日の一番大きな収穫だったと思っています。


2. スプレッドという現実(平均2.59bps)

今回の検証で、いちばん重たくのしかかってきた数字があります。
平均スプレッド約2.59bpsです。

p50は約2.56bps、p95では約4.24bps。
つまり、通常時でも2.5bps前後はほぼ確実に存在し、状況が荒れれば4bpsを超えることも珍しくありません。

これが、bitFlyer FXの“現実”です。

ミッド価格基準で+0.9bpsの優位性があったとしても、成行で入って成行で出れば、スプレッドを跨ぐだけで往復2.6bps近くを支払うことになります。理屈の上では、優位性よりも先にコストが消費されてしまう構造です。

ここで改めて整理すると、

  • ミッド基準:+0.9bps
  • スプレッド平均:約2.6bps
  • 実行可能ベース:マイナス

という関係になります。

つまり、問題は「当たらないこと」ではなく、「コストに勝てないこと」です。

トレードを始めたばかりの頃は、どうしても方向の正しさに目が向きがちです。
「どちらに動くか」を当てることが、本質だと感じてしまいます。

しかし、実際の損益は、
「どれだけ当たるか」ではなく、
「コストを超えるだけの強度があるか」で決まります。

スプレッド2.59bpsという数字は、小さく見えるかもしれません。
ですが、短期戦略にとっては圧倒的な壁です。

+0.9bpsの優位性は、統計的には意味があっても、実行可能ベースでは意味を失います。
ここに気づかずに閾値をいじり続けると、「惜しい」「あと少し」という感覚のまま、時間と資金だけが減っていきます。

今回の検証は、その曖昧な“惜しさ”を切り離す作業でもありました。

スプレッドは敵ではありません。
市場の構造そのものです。

この構造を超えられない限り、エッジは成立しません。
そして、この壁を直視できるかどうかが、次の一手を決める分岐点になります。

平均2.59bps。

この数字を軽く扱わないこと。
それが、今日の大きな学びでした。


3. 「当たる」と「稼げる」は違う

トレードをしていると、つい「当たったかどうか」に意識が向きます。

エントリー後に価格が想定方向へ動けば、ほっとしますし、
逆に外せば、悔しさや焦りが残ります。

今回の検証でも、最初に目に入ったのは「当たっている」という事実でした。
ofi_1sは約70%の精度で方向を示し、ミッド基準では平均+0.9bpsの優位性もありました。

数字としては悪くありません。
むしろ、「これはエッジかもしれない」と思いたくなる内容です。

ですが、ここで立ち止まる必要がありました。

実際の損益は、ミッド価格ではなく実行可能価格で決まります。
成行で入ればask、出ればbid。
この差を無視した瞬間、検証は現実から離れてしまいます。

そして、実行可能価格ベースに置き換えた結果、リターンはマイナスでした。

つまり、

  • 方向は当たっている
  • しかし利益は残らない

という状態です。

ここに、「当たる」と「稼げる」の決定的な違いがあります。

当たるというのは、確率の話です。
稼げるというのは、構造の話です。

たとえば、60〜70%の確率で正しい方向を示せたとしても、
その値幅が小さければ、スプレッドや手数料に吸収されて終わります。

逆に、精度がそこまで高くなくても、
値幅が十分に伸びるなら、利益は残ります。

重要なのは「正解率」ではなく、「コスト控除後の期待値」です。

この視点に立てるかどうかで、戦略設計の方向性は大きく変わります。

今回の結果は、戦略が完全に間違っているという証明ではありません。
しかし、「当たっているから大丈夫」という安心感が、いかに危ういかを示しています。

当たることに満足している限り、
スプレッドという現実は、いつまでも壁のままです。

だからこそ、今回の検証は必要でした。

当たることを喜ぶフェーズから、
稼げる構造を問い直すフェーズへ。

ここからが、本当の戦略設計だと思っています。


4. 閾値調整では根本解決しない理由

今回の検証を通して、もうひとつはっきりしたことがあります。

それは、「閾値をいじっても、構造が変わらなければ勝てない」ということです。

これまでの私は、エントリー条件の閾値を少しずつ調整しながら改善を試みてきました。

  • ofiの強度を上げる
  • 同方向約定数の下限を引き上げる
  • expected_edgeの最低ラインを厳しくする
  • RESOLVED_WEAKをブロックする

どれも合理的な変更ですし、実際にロジックは洗練されてきました。

しかし、今回のRaw検証が示したのは、もっと根本的な問題でした。

ミッド基準での優位性は約+0.9bps。
一方で平均スプレッドは約2.6bps。

つまり、優位性そのものがコストを下回っている可能性が高いということです。

この状態で閾値を厳しくするとどうなるでしょうか。

確かに、トレード回数は減ります。
見送り(SKIP_ENTRY)は増えます。
一見すると、無駄打ちを減らして改善しているようにも見えます。

しかし、優位性の幅が根本的に足りていない場合、
母数を削ったところで期待値は正に転びません。

閾値調整は、「分布の切り取り方」を変えるだけです。
分布そのものがコストを超えていなければ、どこを切っても構造は変わりません。

むしろ、閾値をいじることは危険でもあります。

  • たまたま良かったサンプルに最適化してしまう
  • 母数が減り、検証の統計的信頼性が落ちる
  • 「改善している気がする」という錯覚に陥る

こうして、ロジックは徐々に複雑になり、
しかし本質的な問題は残り続けます。

今回の検証で見えたのは、精度の問題ではなく「強度」の問題でした。

方向は当たっている。
しかし、伸び幅が足りない。

この構造が事実であるなら、閾値をいくら動かしても、本質は変わりません。

だからこそ、私は一度立ち止まることにしました。

閾値を調整するのではなく、
「その前提が正しいのか」を問い直す。

歪みは本当に価格変化の原因なのか。
この市場には、コストを超えるだけの偏りが存在するのか。

閾値調整は戦術です。
いま必要なのは、戦略そのものの再確認です。

この違いを受け入れられるかどうかが、
次のフェーズに進めるかどうかの分かれ目だと感じています。


5. 戦略を保守モードへ移行した理由

今回の検証結果を受けて、私は戦略を「保守モード」に移行しました。

これは後退ではありません。
むしろ、冷静な選択だったと考えています。

これまでのロジックは、方向性の情報をある程度捉えていました。しかし、実行可能価格ベースでは安定してマイナスでした。つまり、構造的にコストを超えられていない可能性が高い状態です。

この状況でトレードを回し続けることは、検証ではなく消耗です。

「もしかしたら今日は伸びるかもしれない」
「もう少し母数が増えれば変わるかもしれない」

こうした期待に頼って回し続けると、資金はじわじわと減っていきます。そして、その減少はロジックの質とは無関係に発生します。

だからこそ、一度守ることを優先しました。

保守モードとは、単に閾値を厳しくすることではありません。
資金を増やすフェーズから、構造を検証するフェーズへ意識を切り替えることです。

本番戦略は、より厳しいexpected_edgeゲートで運用し、明確に優位性が疑わしい領域ではエントリーしません。同時に、Rawログは通常どおり蓄積し、観測の厚みを増やしていきます。

つまり、

  • 実行は慎重に
  • 観測は積極的に

という分離です。

この分離ができるかどうかは、思っている以上に重要です。

トレードをしていると、「回していないと前に進んでいない気がする」という感覚に陥ります。エントリー数が少ないと、不安になることもあります。

しかし、優位性が確認できていない状態で回すことは、前進ではありません。検証のフリをした消耗になってしまいます。

いまは、勝ちを取りにいく局面ではありません。
勝てる構造があるかどうかを、冷静に見極める局面です。

資金は、再挑戦のための燃料です。
構造が不明なまま燃やす理由はありません。

保守モードへの移行は、防御ではなく準備です。

焦らず、溶かさず、確かめる。
それが、今日の判断でした。


6. Rawログ蓄積フェーズへ

戦略を保守モードへ移行したことで、次にやるべきことははっきりしました。

トレード回数を増やすことではなく、Rawログを蓄積することです。

今回の検証で見えたのは、「方向性の情報はあるが、コストを超えられない可能性が高い」という事実でした。ここで無理に回数を増やしても、構造が変わらない限り結果は変わりません。

だからこそ、いまは観測を厚くするフェーズに入ります。

現在蓄積しているのは、主に次の3つです。

  • 1秒バケット(buckets_1s)
  • WebSocket約定ログ(ws_executions)
  • WebSocket板ログ(ws_board)

これらは、トレードの成否とは無関係に、常に記録され続けます。

本番戦略は保守的に抑えていますが、観測は止めません。
むしろ、ここからが本番です。

Rawログの役割は、「本当にエッジが存在するのか」を事実ベースで確認することです。

たとえば、

  • 日別・時間帯別にexecutableベースで優位性はあるのか
  • expected_edgeの閾値と実現リターンは整合しているのか
  • H1/H2/H3(自分が持っている仮説)のどれかに限定すればコスト超えが起きるのか

これらは、トレードを増やさなくても検証できます。
Rawデータさえあれば、仮想的に何度でも検証可能です。

ここで重要なのは、「実行」と「検証」を分離することです。

トレードを回しながら検証することもできますが、それは常に資金をリスクに晒します。
Rawログがあれば、リスクを取らずに検証できます。

この違いは大きいです。

焦ってトレードを重ねるよりも、静かにデータを集める。
派手さはありませんが、構造を見極めるにはこの時間が必要です。

いまはエントリー回数が少なくても構いません。
むしろ、その間に観測の精度を上げていきます。

Rawログ蓄積フェーズとは、勝ちを取りに行く時間ではありません。
「勝てる可能性があるか」を冷静に見極める時間です。

急がず、溶かさず、積み上げる。

この姿勢が、次の一手を支える土台になると信じています。


7. これから検証する3つの軸

ここまでで、「方向は当たる。しかし稼げない」という事実が見えました。
だからといって、すぐに結論を出すわけではありません。

ここからは、感覚ではなく軸を持って検証していきます。

いま考えているのは、次の3つです。


① 日別・時間帯別に executable 優位性を比較する

今回の暫定結果は、あくまで一定期間の集計です。

もし市場が完全に効率的であれば、どの時間帯でも同じように負になるはずです。しかし、実際の市場は常に同じではありません。

  • 流動性が厚い時間帯
  • ボラティリティが高い時間帯
  • 参加者が偏る時間帯

これらの違いがあるなら、executableベースでも優位性が出る局面が存在する可能性があります。

まずは日別・時間帯別に分解し、
「どこでも負なのか」「一部でだけ右にズレるのか」を確認します。

もし全時間帯で安定して負であれば、それは構造的な問題です。
逆に、局所的にでもコスト超えが確認できれば、戦略の方向性は変わります。


② expected_edge と実現リターンの突合

次に行うのは、現在の expected_edge 設計が現実と整合しているかの確認です。

エントリー前に「この条件なら期待値がある」と判断しているにもかかわらず、実現リターンが負であれば、その推定モデルは機能していません。

ここで見るのは、

  • expected_edge_threshold を超えた領域だけを抽出した場合
  • 実際の executable リターン分布が右に動くかどうか

です。

もし閾値を上げても分布が改善しないなら、
問題は閾値ではなく、仮説そのものにあります。

逆に、特定の閾値以上でだけ分布が改善するなら、
その領域を中心に再設計できます。

これは、「切り取り方の問題」なのか「構造の問題」なのかを見極める作業です。


③ H1 / H2 / H3 の仮説別にコスト超えを確認する

最後に、仮説を混ぜたまま評価しないことが重要です。

Continuation、Mean Reversion、Snapback。
それぞれが同じ市場で同じように機能するとは限りません。

全体平均が負でも、

  • H1だけはプラス
  • H2だけが致命的に負
  • H3は特定条件下でのみ機能

といった可能性は十分にあります。

そのため、仮説別に分布を分解し、

  • mean(edge_net_after_cost)
  • p25(edge_net_after_cost)
  • 左裾の厚み

を確認します。

どれか1本でもコスト超えが確認できれば、それを軸に再構築できます。
全滅であれば、「歪み前提そのもの」を疑う必要があります。


検証は「希望」を探す作業ではない

この3軸の検証は、「勝てる証拠」を探す作業ではありません。
むしろ、「幻想を切る」作業です。

  • 市場は本当に状態依存か
  • 方向性は利益に転換可能か
  • コストを超える瞬間は存在するか

この問いに、数字で答えを出します。

いまはまだ結論は出ていません。
ですが、軸が定まったことで、検証はぶれなくなりました。

焦らず、母数を積み、冷静に分解する。

ここからが、本当の意味での検証フェーズです。


8. いま疑っていること

ここまで検証を進めてきて、いま私がやっているのは「改善」ではなく「疑う」ことです。

ロジックを磨くよりも先に、前提を疑う。
これは簡単なようで、実際にはなかなか難しい作業です。

いま、私が疑っていることは大きく分けて3つあります。


① 「歪み」は本当に原因なのか

これまで私は、板や約定の偏り(OBIやOFI)を「価格変化の原因」として扱ってきました。

歪みがある
→ それが継続するか解消する
→ 価格が動く

という前提です。

しかし、今回の検証結果を見ると、こうも考えられます。

歪みは原因ではなく、結果なのではないか

価格が動くから板が偏る。
強い参加者が動いた後にOFIが偏る。

もしそうなら、歪みをもとにエントリーすること自体が、常に一歩遅れている可能性があります。

これは戦略の根本に関わる疑問です。


② bitFlyerは思った以上に効率的なのではないか

方向性の情報はある。
しかし、コストを超えられない。

この事実は、「市場が効率的である可能性」を示唆します。

もし短期ミクロ構造において、すでに優位性が裁定されているなら、
残るのはスプレッドと手数料分だけの負の期待値です。

その場合、問題は閾値や観測粒度ではなく、
「そもそもこの市場でその戦い方をすること」が間違いになります。

これは受け入れづらい仮説ですが、無視することはできません。


③ 執行がすべてを殺しているのではないか

もうひとつ疑っているのは、執行の弱さです。

方向は当たる。
しかしexecutableでは負になる。

この差は、

  • スプレッド
  • 滑り
  • 遅延

のどれか、あるいは複合によって生じます。

もし執行品質が本質的に弱いのであれば、
どれだけシグナルを磨いても、出口で削られて終わります。

その場合、改善すべきは戦略ロジックではなく、
執行設計そのものになります。


疑うことは後退ではない

疑うという行為は、一見ネガティブに見えるかもしれません。

しかし、疑わないまま回し続ける方が、よほど危険です。

  • 歪みは本当に原因か
  • 市場は効率的すぎないか
  • 執行がボトルネックではないか

これらを一つずつ切り分けることが、いまのフェーズです。

疑いを持つことは、諦めではありません。
むしろ、思考停止を避けるための姿勢です。

いまは勝ちを急ぐ段階ではありません。
前提を確認する段階です。

この問い直しを経て、それでも残るものがあれば、
それが本当に向き合うべきエッジだと思っています。


9. それでも止めない理由

ここまで読むと、「もうやめた方がいいのではないか」と思われるかもしれません。

方向は当たるが、稼げない。
スプレッドは厚い。
市場は効率的かもしれない。
歪みは原因ではなく結果かもしれない。

疑いは増えました。

それでも、私は止めません。

理由は単純です。
いまは「負けている」のではなく、「確かめている」段階だからです。

これまでのフェーズは、ロジックを作り、回し、改善する段階でした。
いまは、構造があるかどうかを見極める段階です。

この違いは大きい。

もし何も考えずに回し続けて資金を溶かしているなら、それは消耗です。
しかし、仮説を立て、Rawデータを蓄積し、分布を確認し、幻想を削っているなら、それは前進です。

たとえ最終的に、

  • この市場では短期優位性がない
  • 歪みはエッジにならない

という結論に至ったとしても、それは大きな収穫です。

なぜなら、「何がダメなのか」がはっきりするからです。

曖昧な希望にすがって回し続けるよりも、
明確に否定できる方が次に進めます。

止めない理由は、意地ではありません。
「検証をやり切る」という意思です。

まだやるべきことは残っています。

  • 日別・時間帯別の分解
  • 仮説別の分布確認
  • 執行品質の検証

これらをやり切らないまま、「勝てない」と結論づけるのは早すぎます。

いまは焦らず、資金を守りながら、データを積み上げる段階です。

勝てると信じて突き進むのではなく、
勝てるかどうかを冷静に見極める。

その姿勢を崩さない限り、
たとえ遠回りに見えても、前には進んでいると考えています。

止めないのは、希望があるからではありません。
問いに対して、まだ答えを出し切っていないからです。


10. 今日のまとめ:これは後退ではない

今日の検証を振り返ると、派手な成果はありません。

利益が出たわけでもなく、
強力なエッジが見つかったわけでもありません。

むしろ、「方向は当たる。しかし稼げない」という、少し厳しい現実を確認した一日でした。

ですが、これは後退ではありません。

これまでの私は、ロジックを改善しながら前に進もうとしていました。
閾値を調整し、条件を絞り、トレードを回し続ける。

それはそれで必要なフェーズでした。

しかし今日、ひとつ段階が変わりました。

「どうすれば勝てるか」を考える前に、
「そもそも勝てる構造があるのか」を確認するフェーズに入ったのです。

これは逃げではありません。
むしろ、真正面から向き合う姿勢です。

平均2.59bpsのスプレッドという現実を直視し、
executableベースでマイナスである事実を受け入れ、
閾値調整ではなく前提を疑う。

このプロセスは、見た目には地味です。
しかし、戦略を一段深くするためには避けて通れません。

もしここで「惜しい」「あと少し」と思考停止していたら、
私は同じロジックを回し続け、資金を削り続けていたでしょう。

止まって、確かめる。

その判断ができたこと自体が、今日の収穫です。

いまは保守モードで運用しながら、Rawログを蓄積しています。
トレード回数は減りましたが、観測の密度は上がっています。

勝ちを急がない。
幻想を削る。
構造を見極める。

この姿勢がある限り、たとえ今は利益が出ていなくても、後退ではありません。

今日やったことは、エッジ探しのやり直しではなく、
エッジ探しの「土台作り」でした。

次に進むための確認作業。

静かですが、確実に前へ進んだ一日だったと思います。

2.6bpsの壁に対して、現実的な打ち手の方向性(アイデアだけ置く)

記事では、いまは「観測フェーズ」って言ったので、実装提案は控えめにしますが、壁の越え方は大きく3種類しかないです。

  • コストを下げる:成行前提を崩す(ただし約定率・キャンセル・逆選択地獄が始まる)
  • 値幅を取りに行く:保有時間/ターゲットを伸ばして +0.9bps を“もっと大きい優位性”に変える
  • 状態を選ぶ:スプレッドが薄い/板が厚い/ボラが出る局面だけに限定して “実行可能優位性” を探す

どれも簡単じゃない。市場は優しくない。特に効率的な市場は優しくない(たぶん人間にも優しくない)。

-Bot, CEX, 開発ログ