AIでFX自動売買を作っています。
そして今日も、かなり苦戦しました。
ただ、今回は単なる「うまくいかなかった」という話ではありません。
原因を見つけて、コードを修正して、テストも全部通った。
ところが最後の最後に、今度は「修正版を実行するところ」で詰まりました。
……AI自動売買を作っているのか、
自分自身のトラブル対応能力を鍛えているのか、分からなくなってきました。
今日のFX_AI開発で起きたこと
今回の大きなテーマは、MT5の「取引履歴」です。
FX_AIでは、過去の取引履歴を使って、
- 日次損失
- 累計取引数
- 勝率
- 日別pips
- 決済履歴
などを計算しています。
ところが、どうも最近の決済が正しく取得できていない。
最初は「MT5の履歴がおかしいのか?」と思いました。
しかし、調べてみると……。
犯人は「3時間のズレ」だった
原因は、MT5の取引履歴を検索するときの時刻の扱いでした。
MT5側のサーバー時刻と、Python側で使っている現在時刻の扱いが一致しておらず、検索範囲が約3時間ズレていました。
つまり、FX_AIは直近の取引を見に行っているつもりなのに、
「その取引、まだ存在してませんよ」
という状態になっていたわけです。
いや、存在しているんです。
ちゃんと負けてます。
なのに、システムが「知りません」と言っていた。
これはなかなか悲しい。
実際には2回、ちゃんと負けていた
今回確認できたのが、この2つです。
| 取引 | 戦略 | 結果 |
|---|---|---|
| 1件目 | H1リジェクションBUY | SL・−52円 |
| 2件目 | M5ヒゲスキャルBUY | SL・−51円 |
つまり、FX_AIは普通に負けていた。
ただし、その負けを履歴集計システムが正しく拾えていなかったわけです。
トレードで負けるのも嫌ですが、
「負けたことすらシステムが把握していない」
というのは、もっと嫌です。
そして修正
そこで、AI開発を手伝ってもらっているClaudeに、FX_AIの履歴検索部分を調査してもらいました。
今回の修正では、単純に「3時間足せばいい」という雑な対応にはせず、MT5のサーバー時刻を基準に履歴検索できるように変更しました。
また、履歴の検索だけでなく、
- 日次損失
- 累計成績
- 日別pips
- 決済履歴
- 決済時刻表示
についても時刻処理を修正しました。
テスト結果は、意外と優秀だった
ここは今回ちょっと嬉しかったところです。
修正後のテストでは、
- 直近3時間以内の決済履歴 → 正常取得
- 3時間より前の履歴 → 正常取得
- 既存テスト8本 → すべて合格
- Pythonのcompile → 合格
- 1,080ステップの回帰テスト → 不一致0件
- 実際のMT5履歴 → 正常取得
という結果になりました。
日次損失も、
113円 → 216円
に修正されました。
……まあ、増えました。
システムが正しくなった結果、負け額が増えるという、なんとも微妙な成功体験です。
累計成績も変わった
履歴のズレを修正したことで、累計成績も変わりました。
修正前:
199回・勝率47.24%
修正後:
202回・勝率47.03%
もちろん、成績が悪化したわけではありません。
今まで正しく集計されていなかった取引が追加されたということです。
数字を見ると、ちょっと心が痛いですが(笑)、これはむしろ重要な修正です。
ところが……最後にまた問題発生
ここまで来れば、
「よし、修正完了!」
となるところです。
ところが。
修正したコードを実際に動かしていませんでした。
正確には、FX_AIのメインプログラム自体は修正版になっています。
しかし、その時点で動いていたFX_AIは修正前のコードで起動されたプロセスでした。
つまり……
コードは直った。
テストも全部通った。
でも、動いているFX_AIは古いまま。
という、非常に人間らしい状態になりました。
そして再起動でまた詰まる
そこでClaudeに再起動を依頼。
ところが、今度は再起動用スクリプトのプロセス判定に問題が発生。
旧FX_AIを安全に停止できないため、Claudeは途中で処理を中断しました。
ここはむしろ安全側に倒れたので、良かったと思っています。
変な状態で強制終了して、ポジションやMT5に余計な影響を出すよりは、止まる方がいい。
ただ……。
「AI自動売買を再起動するだけなのに、なぜこんなに大げさなんだ?」
という疑問は残りました(笑)。
今日、解決できたこと
- MT5取引履歴の3時間ズレの原因を特定
- 履歴検索の時刻処理を修正
- 日次損失の集計を修正
- 累計成績の集計を修正
- 日別pips集計を修正
- 決済時刻表示を修正
- 実際のMT5履歴で修正を確認
- 既存テスト8本をクリア
- 1,080ステップの回帰テストで不一致0件
まだ解決できていないこと
- 修正版FX_AIへの正式な切り替え
- 再起動後の実稼働確認
- ニュースを検知したときのWAIT制御
- 急激な相場変動時の安全対策のさらなる強化
つまり、
「コードは直った。でも実際の運用への切り替えがまだ」
というところです。
そして、もう一つ気になっている問題
今回の開発で、もう一つかなり重要な問題が見えてきました。
それが「ニュース」です。
FX_AIには経済指標によるリスク判定があります。
ただし、突然出てくるニュース記事そのものを見て、
「これは相場を動かす可能性が高いニュースだから新規注文を止めよう」
という仕組みは、まだありません。
実際に今回、日米の財務当局者による円安をめぐる会談関連のニュースが出て、ドル円が大きく動く場面がありました。
こうした予定されていなかったニュースへの対応は、今後の大きな課題です。
次は「ニュースを読ませる」
そこで次の候補として考えているのが、Google Newsなどの無料RSSです。
イメージとしては、
ニュースRSS
↓
Pythonで取得
↓
重複・不要ニュースを整理
↓
Difyで重要度を判定
↓
FX_AIへ安全情報として渡す
↓
必要なら新規エントリーをWAIT
という流れです。
ここで重要なのは、ニュースAIに「BUYかSELLか」を決めさせないこと。
あくまで、
「危険なニュースが出ているから、今は新規エントリーを控えよう」
という安全装置として使う方向です。
今の一番の悩み
正直に言うと、今の悩みは「AIが賢くない」ことではありません。
むしろ逆です。
AIに判断させる前の、人間側の仕組みが複雑になってきた。
時刻。
MT5。
Python。
Dify。
Docker。
n8n。
ニュース。
RSS。
そしてWindows。
……もうFXというより、ちょっとしたIT企業ごっこです。
しかも一人でやっています。
たまに思います。
「俺はFXで勝ちたいのか、それともシステム管理者になりたいのか?」
それでも、少しずつ前に進んでいる
とはいえ、今回のトラブルは無駄ではありませんでした。
実際に動かしてみたからこそ、
- 履歴時刻のズレ
- ニュース対応の弱点
- 再起動手順の問題
- システム全体の複雑化
が見えてきました。
バックテストだけやっていたら、おそらく気づけなかった問題です。
今後の展開
今後は、いきなり新しい機能を大量に追加するのではなく、順番に進めます。
- 修正版FX_AIを正式に再起動
- 実稼働で履歴処理が正常か確認
- 数日間、安定稼働を観察
- Google News RSSをログ取得だけで導入
- ニュースの重要度判定を検証
- 必要なニュースだけWAIT制御につなげる
まずは「動いているものを壊さない」。
これを最優先にします。
今日の結論
今日のFX_AIは、華々しい利益を出したわけではありません。
むしろ、
3時間ズレを発見。
コード修正。
テスト全部合格。
でも実行しているコードは古い。
再起動しようとして再起動スクリプトで詰まる。
……という一日でした。
AI自動売買というと、AIがチャートを見て華麗に利益を出すイメージがあります。
現実はそんなに華麗ではありません。
むしろ、
「3時間ズレてるぞ!」
「修正版を動かせ!」
「再起動できないぞ!」
と、PCの前で一人で騒いでいます。
でも、これも含めて実証実験。
うまくいかないところも含めて、全部記録していきます。
果たしてこのFX_AIは、本当に「使える自動売買システム」になれるのか。
まだ分かりません。
だから面白い。
次回も、失敗したら正直に書きます。

