深掘り 60本

短文では書ききれなかった判断の理由を、開発記録・哲学・技術・実践教訓の4シリーズで。

シリーズA

120日の開発記録

#121

Day 1の誤解

最初は「過去データを大量に食わせれば、AIが勝ちパターンを見つける」と考えていました。実際に始めると、最初に詰まったのはAIではなくMT5接続でした。ZeroMQ、TCP、ファイル通信、ログ表現、256KB制限。自動売買の現実は、モデル以前にデータを壊さず渡すところから始まります。

結論: 機械学習EAは、AIプロジェクトである前にシステム統合プロジェクトです。

#122

ZeroMQを捨てた日

MT5とPythonをつなぐためにZeroMQを使おうとしました。しかしmacOS/Wine環境ではDLLが読み込めず、EAの初期化前に落ちました。ここでネットワーク通信へのこだわりを捨て、ファイルベース通信へ切り替えました。洗練されてはいませんが、壊れ方が見える。監査できる。自動売買では、この泥臭さが重要でした。

#123

MQL5 256KB制限の教訓

JSONでローソク足を受け渡ししていたら、データが途中で切れました。原因はMQL5側のサイズ制限。FILE_BIN化とページング取得を入れて回避しました。この経験で、データ取得は「成功したように見えて壊れている」ことがあると学びました。以後、件数・範囲・hash・manifestを残す設計に寄っていきます。

#124

最初のAIモデルは派手ではなかった

BTCUSDとXAUUSDをM5で学習し、threshold_pips、特徴量、GA最適化を繰り返しました。見た目はAIトレードらしい作業です。しかし片方向にしか入らない構造バグ、ターゲット変数の偏り、MTF特徴量の欠落など、基礎的な問題が多かった。AIは、こちらが作った歪んだ問題を忠実に学びます。

#125

M5スキャルを諦めた理由

M5は検証回数が多く、改善サイクルが速い。しかしBTCUSDのようなコストが重い環境では、短期の微弱な優位性は簡単に消えます。そこでH1/H4文脈を使う方向へ移りました。短期のノイズを追うより、少し大きな構造を見た方が、トレードとして成立する可能性が高いと判断しました。

#126

H1/H4を入れると別の問題が出る

上位足を入れると、相場文脈は豊かになります。しかし、確定H1/H4は遅れます。古い上位足情報を使って新規発注すると、実際の相場と判断がズレます。そこでPartial H1、H4 freshness gate、age_minutesログを入れました。上位足は強力ですが、鮮度管理なしでは危険です。

#127

4/2暴落で一番痛かったこと

暴落で負けたことより、「なぜその判断をしたのか」を十分に再現できなかったことが痛かった。TrendFilterが初動SELLを止め、CircuitBreakerがラッチし、旧モデルがstaleなH4文脈を抱えていました。この日以降、開発の重心はモデル精度から、preflight、replay parity、監査ログへ移りました。

#128

安全装置は勝ち筋も止める

暴落時、TrendFilterやCircuitBreakerは損失拡大を防ぐために存在しました。しかし、勝ち筋となる初動も止めていました。ガードは多ければ安全ではありません。止めるべき負けと、通すべき勝ちを区別するため、entry_context、entry_location_quality、entry_authority_basisが必要になりました。

#129

AI予測を直接発注に使わない理由

モデルは確率を出します。しかし、確率が高いことと、今この位置で入るべきことは別です。そこでEntryPolicy層を入れました。AIは候補を出し、EntryPolicyが文脈・構造・位置・鮮度で止める。この分離により、負け方を「モデルのせい」だけにせず、判断経路として分析できるようになりました。

#130

entry_contextを作った理由

BUY/SELLだけでは改善できません。同じSELLでも、trend_continuation_sell、early_reversal_sell、neutral_momentum_sellでは意味が違います。負けトレードを改善するには、まず名前が必要です。entry_contextは、売買判断を改善可能な単位に分解するための言語でした。

#131

出口設計が入口より難しかった

固定TPはトレンドの伸びを削り、固定SLは高ATRで損失を膨らませます。TIME_EXITは便利ですが、勝ちも負けも機械的に切ります。Profit Protection、仮想TP、strong trend trailing、bailoutを入れて、出口も文脈化しました。自動売買は「どこで入るか」より「どう終えるか」が難しい。

#132

会計バグは戦略評価を破壊する

exit_price=0、realized_pnl=0、exit_reason=null、raw_profit符号の矛盾。こうした会計系のバグは、戦略そのものを誤評価させます。モデルの良し悪し以前に、損益記録が正しいことを証明しないといけません。自動売買では、会計は研究基盤です。

#133

chart_structure_gateの意味

モデルの確率だけでは、入る場所の良し悪しを表現しきれません。そこでsweep、BOS、pullback-rebreakなどのチャート構造をEntryPolicyに入れました。これは裁量を雑に自動化する試みではなく、構造的証拠の有無をログとして残すための仕組みです。

#134

上位足・下位足の波形一致を検証して分かったこと

裁量手法として魅力的でも、単独戦略として統計的に強いとは限りません。上位足で第3波が出そうな方向を決め、下位足でも1波・2波・3波の成立を待つ手法は、単独では非推奨、observe-onlyの文脈情報として扱うのが妥当でした。手法名や納得感が強くても、期待値・分散・テール依存を見ないと、売買ロジックにはできません。

#135

時刻同期は地味だが致命的

MT5 exportはUTCではありませんでした。サーバー表示時刻で、米国DST基準でGMT+2/GMT+3が切り替わります。11月は01:00台が重複し、3月は1時間飛びます。ここを誤ると、Binance orderflowとの整合が壊れ、モデルは存在しない関係を学びます。

#136

DST境界のfail-close

11月の重複時間は、M5なら12本ずつあるはずです。もし欠損があれば、行順だけで割り当てると後続がすべて壊れます。そこでgroup lengthをassertし、欠損時はfailさせる方針にしました。時刻処理は「多分合っている」ではなく、壊れたら止まるべきです。

#137

長期学習の仮説

直近だけでは相場を知らなすぎる。数年分を学習すれば、AIは勝ちパターンを見つけるのではないか。これが長期学習の出発点でした。2021年末からのデータを使い、h12/h6/h3、rolling/expanding、合計18モデルを比較しました。

#138

長く学ぶほど慎重になる

長期データを入れると、AUCは少し良くなる一方、actionable ratioが減りました。2022年の下落、2023年の低ボラ、2024年の上昇が混ざるため、同じ特徴量でも正解が反転します。モデルは確信を失い、0.5付近の確率を出しやすくなりました。

#139

H12とH3では記憶の賞味期限が違う

H12は60分先を見ます。大きな波の性質は比較的残りやすい。一方、H3は15分先で、短期orderflowの性質は数ヶ月で変わります。長期データはH12には薬になり得ますが、H3にはノイズになりやすい。時間軸ごとに最適な記憶長が違いました。

#140

Purgeのoff-by-oneを恐れた理由

H12ラベルは未来12本を見ます。Train末尾のラベルがValidation先頭の価格を使っていたら、未来情報のカンニングです。PurgeはValidationを後ろにずらすだけでは不十分で、Train末尾を削る必要があります。これを単体テストで証明する方針にしました。

#141

H12 expanding 2022が一度有望に見えた

長期学習の中で、H12 expanding 2022が良さそうに見えました。OOF期待値+51.42 pips、P(mean>0)=99.3%。この数字だけ見ればshadow候補です。しかし後に、このheadlineは評価器の欠陥で過大だったと分かります。

#142

評価器を疑った理由

OOFの期待値と同一backtestの平均損益が桁違いでした。そこで、barrier決着したバーだけで評価していないか、連続シグナルを独立扱いしていないかを調べました。結果、どちらも問題でした。良すぎる数字は、まず評価器を疑うべきです。

#143

episode bootstrapでheadlineは死んだ

i.i.d. bootstrapでは、連続したH12シグナルを独立サンプルのように扱っていました。episode単位に畳むと、+51.42 pips / P=99.3%は+1.28 pips / P=0.524へ崩れました。有意性の大半は重複計上の産物でした。

#144

未決着バーのドラッグ

barrierに届かなかったバーも、本番ではTIME_EXITなどで決済されます。これをhorizon終端リターンからコスト込みで評価すると、期待値は負になりました。評価対象から外していたno_hitバーが、実運用ではコストを払う存在だったのです。

#145

feature_rich_v1の顛末

特徴量を62から482へ増やしました。チャート構造、orderflow slope、market phaseなどを試しました。しかし広く効いたわけではなく、alpha_momentum_coreだけが一部baselineを上回りました。特徴量を増やせば勝ち筋が出る、という単純な話ではありませんでした。

#146

特徴量不足と情報源不足は違う

482特徴量は、独立した482個の情報ではありません。多くは同じOHLCVと公開flowの変換です。情報源の天井を超えるには、変換ではなく新しい情報層が必要です。この理解が、オプションOI/gammaの収集基盤や、Alloraのような未実装候補の監査検討へつながりました。

#147

レジーム混在は本当にあった

同じCVDやADXでも、trend_down、range、high_vol_rangeで意味が変わります。修正済み評価器で分解すると、rangeやhigh_vol_rangeは明確に負でした。レジーム情報は、勝ち筋発見より先に、負ける局面を遮断する用途で効きました。

#148

alpha_momentum_coreは最後のBTCUSD M5仮説だった

2026年を除外し、selection 2023-2024、holdout 2025、reference 2026に分けて検証しました。結果、primary仮説は不合格。2026だけ良く見えていたことも確認されました。循環検証を避けたことで、偽陽性を止められました。

#149

grossはあるがcostに食われる

trend_alignedでは、コスト前のgrossが4年連続でおおむね+20〜23 pipsありました。しかし往復コスト24.2 pipsにほぼ食われ、netはゼロ近辺。これは「信号がない」ではなく、「信号がコストを超えない」という結論です。

#150

BTCUSD M5探索を閉じた理由

OHLCV+kline flow、長期学習、特徴量拡張、レジーム限定、episode評価。ここまでやって、netで通る仮説はありませんでした。だから同じ情報源で483本目の特徴量を探すのではなく、新しい情報層へ進む判断をしました。

シリーズB

開発哲学

#151

良い失敗の条件

良い失敗とは、次に何をやらないかが明確になる失敗です。D-1 crypto momentumはfailでしたが、gross/cost、decile崩壊、momentum crash、検定力不足が分かりました。これは価値のある失敗です。

#152

事前登録の意味

結果を見てから閾値や分割を変えると、どんな仮説も復活できます。だから事前登録でselection、holdout、OOS、ゲート、gray条件を凍結しました。自由度を減らすことが、研究を前に進めます。

#153

OOSを燃やさない

未使用データは資産です。死んだ仮説を何度もOOSで見直すと、次の本命候補の確証データがなくなります。評価に使うデータと、将来の確証に残すデータを分ける規律が必要です。

#154

モデルより計器

120日で一番重要だった成果は、強いモデルではなく、壊れた数字を殺せる計器でした。barrier条件付き評価、i.i.d. bootstrap、時刻ズレ、feature bleed。これらを止められるようになって、初めて研究できます。

#155

勝ち筋を探す前に相手を書く

次期アルファ探索では、「誰が、なぜ、自分に負けるのか」を一文で書けない仮説を原則棄却しました。汎用MLでなんとなく当てる、はもうやらない。相手の一文がない仮説は、探索の沼になりやすいからです。

#156

コストスクリーンを最初に置く

どれだけ綺麗な信号でも、コストを超えなければ戦略になりません。だから次の探索では、手法より先にコスト構造を見ます。BTCUSD M5でgross≈costを見た後は、これは必須の順序です。

#157

AIエージェントに任せて痛い目を見たこと

AIエージェントは実装を速くしますが、嘘の成功も速く作ります。テストが薄い、評価器が壊れている、前提がズレている。だから、AIに任せるほど、事前登録・テスト・監査ログが必要になります。

#158

レビュー文化が救ったもの

何度も外部意見で計画を修正しました。Purgeのoff-by-one、episode bootstrap、2026 reference格下げ、Deribitブロックの誤認。レビューで面倒な指摘を潰したことで、実弾事故を減らせました。

#159

Deribitを諦めた話

BTCオプションdealer positioningを見ようとして、Deribit直接APIを前提にしました。しかし日本居住者へのサービス停止が分かり、OKX/Binance proxyへピボットしました。データ入手性も仮説の一部です。

#160

新情報層へ進む理由

OHLCVと公開kline flowの変換を増やしても、情報天井を超えにくい。次に測るべきは、オプションOI/gammaなど、これまで使っていない情報層です。Allora集約予測は未実装の検討候補として、時刻契約と増分情報を監査してから扱います。

シリーズC

技術的な学び

#161

manifestは地味だが強い

どの入力を、いつ、どの変換で、何行作ったか。これを残すだけで、後から検証できる範囲が大きく変わります。データ生成のmanifestは、機械学習トレードの防犯カメラです。

#162

parity監査の価値

学習時のOHLCV/CVDと、本番でMT5から計算した値が一致していない問題がありました。モデルは学習時と違う世界を見ていた。parity監査なしでは、これはなかなか見つかりません。

#163

SHAPの限界

SHAPはモデルが何を見たかを教えてくれます。しかし、入力データやラベルや評価器が壊れていれば、SHAPは壊れた世界の説明をしているだけです。説明可能性は、正しいデータ契約の上にしか立ちません。

#164

actionable ratioは重要

AUCが上がっても、運用閾値を超えるシグナルがほぼゼロなら使えません。長期学習でH6/H3が慎重になりすぎた時、actionable ratioが問題を示していました。

#165

閾値はモデル性能ではない

閾値0.60を超えたら入る、という固定閾値は分かりやすい。しかしスコア分布が年ごとに動けば、同じ0.60の意味が変わります。閾値選定はselectionで凍結し、holdoutで1回だけ見る必要があります。

#166

tail依存は疑う

上位1%だけが良いモデルは、魅力的に見えます。しかしデータ分布が少し動くと崩れます。p95まで緩めても期待値が正かを見るのは、tail依存を殺すためです。

#167

レジーム特徴量を足すだけでは足りない

MarketPhaseを入れれば解決、とはなりませんでした。同じ価格系列から作った特徴量は、新しい情報を増やすわけではありません。効く場合もありますが、情報源の天井は超えにくい。

#168

filter-onlyという考え方

すべての部品が利益を生む必要はありません。rangeで負けることが安定して分かるなら、それは遮断filterとして価値があります。ただし、遮断後に正の戦略になるかは別問題です。

#169

撤退基準を書く理由

仮説が全滅した時にどうするかを、結果を見る前に書いておく。これをしないと、失敗後に新しい理由をつけて探索を続けてしまいます。撤退基準は、研究のブレーキです。

#170

モデル保存場所にも規律が必要

models/に何でも置くと、将来どれが本番候補か分からなくなります。ゲートとOOSを通ったものだけを置く規約を作り、旧モデルはarchiveへ退避しました。

シリーズD

読者向けの実践教訓

#171

機械学習トレードを始めるなら

最初に作るべきものは高性能モデルではありません。データ取得、時刻正規化、parity監査、backtest/live一致確認、コスト計算です。ここが壊れると、モデルは全部嘘を学びます。

#172

バックテストで勝ったら最初に疑うこと

コストは入っているか。時刻ズレはないか。ラベルリークはないか。重複horizonを独立扱いしていないか。未決着トレードを除外していないか。まずここです。

#173

特徴量を増やす前に問うこと

それは新しい情報源か、それとも同じ価格系列の別変換か。後者なら、情報量の上限はあまり変わらない可能性があります。特徴量数ではなく、情報源を見ます。

#174

AIで勝てない時の典型パターン

モデルが弱いのではなく、ラベルが実売買とズレている。評価器が条件付きになっている。コストを軽視している。時刻がズレている。このどれかが多いです。

#175

自動売買でログに残すべきもの

モデル確率、entry_context、止めた理由、通した理由、構造証拠、上位足鮮度、exit_reason、実損益、データ時刻。後から説明できない判断は改善できません。

#176

勝率より期待値

勝率が高くても、負けが大きければ意味がありません。AUCが高くても、コスト後期待値が負なら意味がありません。評価軸をトレードの現実に寄せる必要があります。

#177

短期予測の難しさ

短期ほどシグナルは多いですが、コストとノイズに弱い。H3のような15分先予測では、古いデータがノイズになりやすい。短期モデルほど、記憶の賞味期限が短いです。

#178

長期予測の難しさ

長期ほどコスト比は改善しますが、ラベルの不確実性とレジーム混在が増えます。長い時間軸も簡単ではありません。敵の種類が変わるだけです。

#179

単純EAと機械学習EAの違い

単純EAはルールを固定します。機械学習EAは、ルール候補の確率と文脈を学習します。ただし、最終判断には構造・リスク・コストのガードが必要です。

#180

120日の最終教訓

AIは勝ちパターンを自動で見つけてくれる魔法ではありません。むしろ、間違ったデータ・間違った評価・間違ったコスト前提を、もっともらしい数字に変える装置にもなります。