【FX自動売買開発ログ #8】実装してみたら、渡している情報が足りないことに気づいた話
前回のおさらい
前回、単純な閾値フィルターの代わりに、AIに相場環境(レンジ/トレンド)を総合判定させる新しい理論モジュール theory_regime.py を作ることに決めました。統合方法は案B、regime_filterがレンジ相場(neutral)と判定した場合は他の理論の判定に関わらずエントリーを見送る「拒否権」方式です。
今回は、この設計を実際にコードに落とし込んでいく回です。
渡している情報が、そもそも足りなかった
実装を始めてすぐに気づいたのが、既存のbuild_market_summary(AIに渡す市場データの要約を作る関数)が、そもそも今回の判定に必要な情報を持っていないという問題でした。
これまでbuild_market_summaryが渡していたのは、SMA(短期・長期)、EMA、RSI、MACD、MACDシグナル、ATRといった指標の「最新値1点」だけです。しかし今回の理論が判定材料として必要としているのは、
- ADX(トレンド強度)の値そのもの ─ これまで一度も渡していなかった
- ADX・ATRの「直近の推移」(拡大しているのか縮小しているのか)
- 価格が主要な移動平均からどれだけ乖離しているか
という、単一の最新値だけでは表現できない情報です。そこで、build_market_summaryにinclude_trend_contextというオプション引数を追加し、theory_regimeを呼ぶときだけこの拡張情報を受け取れるようにする、という対応にしました。既存のダウ理論・プライスアクションのプロンプトのトークン消費は増やさないための工夫です。この修正はコードの変更のみで、API呼び出しは発生しません。

実際にどんなテキストが送られるのか、確認してみる
コードを直したら、実際にAIへ送られるプロンプトの中身を見ずに次に進むのは避けたかったので、サンプルを生成して確認してもらいました。
system_promptは、前回見せてもらった草案からの変更はなし。そのまま採用しています。
market_summary(実際に送られるテキスト)のサンプルはこんな内容でした。
直近20本のOHLCV(日時・始値・高値・安値・終値)の羅列に続けて、
トレンド環境の判定材料: ADX(最新)=24.69 ADX推移: 直近5本平均=20.29 / その前15本平均=15.68 → 上昇(トレンド強まる) ATR(最新)=0.1980 ATR推移: 直近5本平均=0.1972 / その前15本平均=0.2180 → 縮小(値動き膠着) 価格のSMA50からの乖離率: -0.262%
という形で、ADXが上昇傾向(トレンドが強まっている)なのにATRは縮小(値動き自体は膠着している)という、一見矛盾するようにも読める情報がそのまま渡っていることが分かります。これをAIがどう解釈するかは、実際に判定させてみないと分かりませんが、少なくとも「渡している情報の中身」を自分の目で確認できたのは収穫でした。

ちなみに、既存の「最新の指標値:」という行が中身が空のまま出力されているという細かい不具合(dow_theory/price_actionと同じ原因で、渡されるデータフレームに指標が事前計算されていないため)にも気づきましたが、実害はほぼないため今回はそのまま残すことにしています。こういう「見つけたけど今は直さない」判断も、都度記録しておかないと後で忘れてしまいそうです。
実行前に、また見積もりを
STEP3のときと同じく、実際にAPIを呼ぶ前にまず回数を見積もってもらいました。範囲はこれまでのカレンダー表示・ADXフィルター検証と同じ(fold2+3+4、min_agree=2、confidence≥50、1時間足、claude-sonnet-5)です。
| 項目 | 値 |
|---|---|
| 対象トリガー日数(fold2〜4) | 210 |
| 新規API呼び出し回数(regime_filterのみ) | 210回 |
| 概算コスト | 約$0.6〜0.8程度 |

ダウ理論・プライスアクションは既にキャッシュ済みのため、今回新しく判定が必要なのはregime_filterの210回分だけです。これまでの「STEP1のディレクトリ迷子」や「40回の見積もり」のときに比べると、キャッシュの仕組みが効いている実感がだいぶ強くなってきました。過去に作った設計が後から効いてくる感覚は、地味に嬉しいポイントです。
次回予告
見積もりを確認した上で、次回は実際にregime_filterの判定を実行し、拒否権方式(案B)を組み込んだ場合に成績がどう変わるかを確認します。特に、ADX<20フィルターのときと同じ「除外されるトレード数が少なすぎて意味がない」という結果になっていないか、が注目ポイントです。
※本シリーズは個人の技術検証・学習を目的とした開発記録であり、特定の投資手法や金融商品を推奨するものではありません。自動売買には元本割れのリスクがあり、掲載する内容を参考にした取引の結果について一切の責任を負いかねます。投資判断はご自身の責任で行ってください。

