FX歴12年、システムトレーダーのRYOです。
最近、「ChatGPTでEA(自動売買プログラム)が作れる」という話をよく聞きます。自分のところにも「AIに作らせたEAって、結局勝てるんですか?」という質問が増えてきました。
なので、やってみることにしました。ChatGPTに、ゴールド(XAUUSD)の自動売買EAを実際に作らせてみる。そして、それを自分が第三者の立場で、忖度なしにバックテスト検証する——という企画です。今日はその第1弾、導入編です。
最初に一つだけ、ハッキリさせておきます。自分は別に、自分でも12年分のロジックを詰め込んだゴールドEA「Arsene(アルセーヌ)」を作っています。ただし、これは完全に自作で、AIに考えさせたものではありません。 今回の主役はそれとは別物で、「AIに作らせたらどうなるか」という実験です。自作とAI製を混同しないよう、ここは先に区別しておきます。
そして結論ありきにはしません。AIが作ったEAが勝てるなら「勝てた」と書くし、ダメならダメと書く。それだけです。
まず「作れるか」と「勝てるか」は別の話
先に総論を一つ。「AIでEAは作れるのか?」という問いには、もう答えが出ています。作れます。 こういう条件で買って、こう決済して、とお願いすれば、それらしいコードが返ってきます。入口のハードルは確実に下がりました。
でも、「作れる」と「勝てる」はまったく別の話です。今回の企画は、まさにこの境界線を、実物で確かめにいくものだと思ってください。
ステップ1:AIに「戦略そのもの」を考えさせる
今回こだわったのは、AIに丸投げでコードを書かせるのではなく、「戦略そのもの」を自由に設計させたことです。
というのも、最初にChatGPTへ「MQL(MT4の言語)でEAのコードを書いて」と丸投げしたら、正直あまりうまくいきませんでした(これは後述します)。なので方針を変えて、AIには「あなたが本気で勝てると思う戦略を、自由に設計してください」とだけ頼みました。銘柄も時間足も手法も、AIが一番優位性があると思うものを選んでいい、という条件です。
「AIは、自由にしていいと言われたら何を選ぶのか」——これ自体が見どころだと思っています。
返ってきたのが、こういう戦略でした(中身の思想だけ共有します)。
- 銘柄・時間足:ゴールド(XAUUSD)の短い足
- 方向性:トレンドフィルタ+押し目買い。長期の移動平均(EMA200)で相場の向きを判定し、その方向に「一度売られすぎてから戻ってきたタイミング」をRSIで拾って入る
- 決済:利確・損切りを固定幅で置き、一定時間を超えたら時間で撤退
- 資金管理:1トレードあたりのリスクを口座の一定割合に固定し、同時保有は1ポジまで、スプレッドが広いときは見送る
率直な感想を言うと、「教科書的で、わりとマトモ」でした。EMA200で大きな流れを見て、RSIの押し目で入る——これはトレンドフォロー+押し目買いの王道で、悪い発想ではありません。資金管理に「1ポジまで」「スプレッド見送り」まで入れてきたのは、むしろ感心しました。
ただ、裏を返せば「どこかで見たことのある、ありがちな組み合わせ」でもあります。優位性が本当にあるのかは、ここから検証しないと分かりません。AIの主張(なぜ勝てるか)と、実際の検証結果のギャップ——ここが第二の見どころです。
ステップ2:AIにコードを丸投げしたら、動かなかった
ここで一つ、AI実験あるあるを正直に書いておきます。
戦略が決まったので、最初はChatGPTにそのまま「これをMQL4のEAコードにして」と頼みました。コード自体は、それっぽいものが返ってきます。コンパイル(プログラムを動く形にする工程)も、何度か直せば通りました。
問題はその先でした。バックテストを回そうとしたら、一件も取引が成立しない。
MT4のログを見ると、全部の注文が 「Error 130(Invalid Stops)」 で弾かれていました。これは「損切り・利確の置き場所が、ルール違反(現在価格に近すぎる等)ですよ」というエラーです。AIが書いたEAは、そもそもバックテストのスタートラインにすら立てなかったわけです。
ステップ3:原因を解剖したら「ゴールドの桁数の罠」だった
ここからは自分の仕事です。なぜ弾かれるのか、コードを解剖しました。
原因は、ゴールド特有の「桁数(価格の小数の細かさ)」の取り違えでした。
ドル円のような通貨ペアと、ゴールドでは、「1pip(値動きの最小単位の数え方)」が価格上どれくらいの幅になるかが違います。AIが書いたコードは、このpips(値幅の単位)を実際の価格差に変換する計算で、ゴールドのある桁数パターンを取りこぼしていました。
その結果どうなったか。本来「損切り20pips」とすべき距離が、実際には10分の1の幅で計算されていたんです。距離が狭すぎて、スプレッド(買値と売値の差)の内側に損切り・利確が入り込んでしまう。だから注文がルール違反で全部弾かれていた——これがError 130の正体でした。
面白いのは、AIは「桁数によって計算を変えなきゃいけない」という発想自体は持っていたことです。コードにもその分岐は書いてあった。でも、肝心のゴールドのケースだけ取りこぼしていた。 惜しい。でも、実戦ではこの「惜しい」が致命的になります。
「AIにEAを丸投げしたら動かない」とよく言われますが、その理由の一例が、まさにこれです。AIはあなたが使う環境(どのブローカーの、どの銘柄で、桁数がいくつか)を知りません。一般論としては正しいコードを書けても、現場の固有事情でつまずく。そこを埋めるのは、結局まだ人間の仕事です。
ステップ4:ロジックは一切いじらず、「動く部分」だけ直した
ここが今回の検証で一番こだわったところです。
このError 130を直す際、AIが考えた戦略の中身(エントリーや決済の判断条件)には、一切手を入れていません。 直したのは、「pipsを価格に正しく変換する計算」と「損切り・利確をブローカーに正しく通す手順」という、実行まわりの配管部分だけです。変更した箇所はコード内に全部マーク(コメント)を残してあります。
なぜここまで厳密にするかというと、「AIの戦略そのものが勝てるのか」をフェアに評価したいからです。配管を直すついでに自分好みにロジックを改造してしまったら、「AIのEAを検証した」とは言えなくなる。それでは企画として嘘になります。だから、戦略は1行も変えずに、回せる状態にだけ持っていきました。
ちなみに、この修正で損切りの距離が正しく(広く)なった分、リスク計算の仕組み上、1回あたりの取引量は自動的に小さく調整されます。「1トレードのリスクは口座の一定割合まで」という資金管理の意図は、修正後もそのまま正しく働くようになっています。ここも壊していません。
現在地:「作れた」。でも「勝てるか」はこれから
というわけで、今の状況を正直に書きます。
- AIにゴールドEAの戦略を考えさせることは、できた。(教科書的だが、筋は悪くない)
- コードを丸投げしただけでは、動かなかった。(ゴールドの桁数の罠でError 130)
- 配管だけ直して、ようやくバックテストを回せる状態になった。(ロジックは不変)
- で、肝心の「勝てるのか」は——これから、忖度なしで検証します。
ここで成績を書けたらキレイなんですが、まだバックテストは本番前です。だから現時点では、勝った負けたの数字は一切出しません。出せない数字を、それっぽく書くつもりもありません(むしろ、AIは「出せない数字」も平気で作文してくる、というのも今回の裏テーマの一つです。これも検証で確かめます)。
次回(第2弾)で、このAI製ゴールドEAを実際にバックテストにかけて、
- AIが「勝てる」と主張したロジックは、データ上ほんとうに優位性があったのか
- どんな相場で機能して、どんな相場で崩れたのか
- 最大ドローダウン(資産が一番落ち込んだ幅)はどれくらいだったのか
を、良いも悪いも全部出します。結論ありきにはしません。 ダメならダメと書きます。それが、12年やってきた自分のやり方なので。
数字を盛らず、勝ちも負けも正直に。続報を待っていてください。
注記(必ずお読みください)
- 本記事は、AI(ChatGPT)に作らせたEAを第三者として検証する実験の記録です。特定のEA・手法・通貨の売買を推奨するものではなく、投資助言を目的としたものではありません。
- 本記事の時点で、当該EAのバックテストは未完了です。成績・優位性に関する数値は確定しておらず、本記事では一切断定していません。 検証結果は別記事で、検証条件(期間・スプレッド・データ品質等)とセットで公開します。
- FX・自動売買にはリスクが伴い、元本割れ(損失)の可能性があります。投資は自己責任で、余裕資金の範囲で行ってください。
- AIが生成したコード・戦略には、本記事で触れた「ゴールドの桁数の取り違え」のように、そのままでは動作しない・想定外の挙動をする箇所が含まれることがあります。利用は各自の責任と検証のうえで行ってください。



コメント