🤖 AIでEAを作る基礎 #ChatGPT #Claude #EA #MQL4 #自動売買 #初心者

AIで自分だけの最強EAをつくろう

(更新: 2026年1月5日) 読了 約16分

「自動売買に興味はあるけど、プログラミングができない」——そんな方にとって、今がEA開発を始める最高のタイミングです。

筆者は2024年からEAの作成にAIを利用してきました(元々プログラミングの知識はありません)。当時は「作りたいのにどうしても解消できないエラー」に何度も阻まれていたのですが、2025年後半あたりから状況が一変。作りたいEAが一気に形になるようになりました。

AIの進化の速さを肌で感じるうちに、「この先、いろんな仕事がAIに置き換わっていくんだろうな」と意識するようになりました。

ですが、ご安心ください。仕事がなくなっても、マーケットはなくなりません。株もFXも、AIと同じ土俵で戦える数少ないフィールドです。

今のうちに、最強の自動売買システムを作っておきましょう。

ChatGPT・Claude・Geminiといった最新AIに「こういう条件で売買したい」と日本語で伝えるだけで、MT4で動くEAのコードが手に入ります。もはやMQL4の文法を暗記する必要はありません。

この記事では、AIを使ったEA自作の全体像と、今日から始めるためのステップをご紹介します。

EA(エキスパートアドバイザー)とは

MT4/MT5上で動く自動売買プログラムのことです。チャートにアタッチしておけば、設定した売買条件に従って24時間自動でトレードしてくれます。

従来のEA開発には以下の知識が必要でした。

  • MQL4/MQL5の文法
  • MT4の組み込み関数の使い方
  • コンパイルエラーのデバッグ

AIを使えば、これらをすべてAI側に任せられます。私たちがやることは「どんな条件で売買したいか」を言葉にすることだけです。

必要なものは3つ

必要なもの備考
AIツールChatGPT Plus・Claude Pro・Geminiなど。無料枠でも始められます
MT4 / MT5国内FX業者で口座を開設すれば無料で入手できます
TradingViewインジケーターの動きを確認するのに便利です。無料プランでOK

TradingViewに関しては、もともとトレードの経験がある(勝ちパターンを持っている)なら、必要ないかもしれませんが、私としては欠かせないツールだと思っています。

TradingViewは世界中のトレーダーが利用しているチャート分析プラットフォームです。最大の魅力は、コミュニティが公開している10万以上のインジケーターにアクセスできること。RSIやMACDといった定番はもちろん、機械学習ベースの分析やカスタムシグナルなど、個人では到底作れないような高度なインジケーターも無料で試せます。気になったインジケーターの売買条件をそのままAIに渡せば、EAの土台になります。

EAにおいて最も重要なのは売買条件の設定です。特定の価格の動きをベースに売買条件を決めるのですが、インジケーターというのは着目したい価格の動きを可視化したものなので、それを応用すればそのまま売買条件にできるというわけです。

初めてEAを作る場合は、簡単なインジケーターを使用したものを作ってみるとイメージしやすいと思います。

やることはこれだけ

1. 売買条件を日本語で書く

普段トレードしている方なら、自分のエントリー根拠をそのまま言葉にするだけです。

良い例:

RSI(14期間)が30以下になったら買い、70以上で決済。ストップロスは20pips。ロットは0.1固定。

悪い例:

RSIで良い感じにエントリーしたい

できるだけ具体的に、数値を含めて書くのがコツです。曖昧な指示だとAIが勝手に補完してしまい、意図しない動作になりやすくなります。

言語化のコツは「インジケーターの売買条件をEAに落とし込む考え方」にまとめています。

2. AIに渡す

条件が決まったら、AIにそのまま渡します。

MT4用のEAをMQL4で書いてください。

通貨ペア:USDJPY
時間足:1時間足

エントリー条件(買い):
- RSI(14)が30以下になったとき

決済条件:
- RSI(14)が70以上になったとき

リスク管理:
- ストップロス:20pips
- ロットサイズ:0.1固定
- 同時に持つポジションは1つまで

これをChatGPTやClaudeに貼り付けるだけで、MT4で動くコードが返ってきます。通貨ペア・時間足・リスク管理を書いておくのがポイントです。

3. バックテストで確認する

生成されたコードをMT4のMetaEditorに貼り付けてコンパイルし、ストラテジーテスターで過去データの成績を確認します。プロフィットファクターが1.0以上なら、ひとまず期待値はプラスです。

たったこれだけです。 コードは1行も自分で書いていません。

実際にAIが生成したコードを見てみよう

「本当にそれだけで動くの?」と思う方もいると思います。

もう少し本格的なプロンプト——移動平均線のクロス+RSIフィルターの条件でAIに渡してみた例をお見せします。

あなたはMQL4のエキスパートプログラマーです。
以下の仕様に従って、MT4で動作するEAをMQL4で作成してください。

## EA名
SimpleMA_RSI_EA

## 売買条件

### 買いエントリー(すべて満たした場合)
- 20期間SMAが50期間SMAを上抜け(ゴールデンクロス)
- RSI(14期間)が30以下

### 売りエントリー(すべて満たした場合)
- 20期間SMAが50期間SMAを下抜け(デッドクロス)
- RSI(14期間)が70以上

### 決済条件
- ストップロス: 100pips
- テイクプロフィット: 200pips
- 反対シグナルが出たら既存ポジションを決済して新規エントリー

## パラメータ(外部変数にして最適化可能にする)
- FastMA_Period = 20
- SlowMA_Period = 50
- RSI_Period = 14
- RSI_BuyLevel = 30
- RSI_SellLevel = 70
- StopLoss = 100(pips)
- TakeProfit = 200(pips)
- LotSize = 0.1
- MagicNumber = 12345

## 技術要件
- 同時に1ポジションまで
- マジックナンバーでポジション識別
- クロスの判定は前回足と現在足の比較
- 日本語コメント付き

完全なコードを出力してください。

これをClaudeに渡して出力されたコードがこちらです。

//+------------------------------------------------------------------+
//| SimpleMA_RSI_EA.mq4                                               |
//| AIが生成した移動平均線+RSIの自動売買EA                              |
//+------------------------------------------------------------------+
#property copyright "AI EA Lab"
#property version   "1.00"
#property strict

//--- 外部パラメータ(MT4の設定画面から変更可能)
extern int    FastMA_Period  = 20;       // 短期移動平均の期間
extern int    SlowMA_Period  = 50;       // 長期移動平均の期間
extern int    RSI_Period     = 14;       // RSIの期間
extern int    RSI_BuyLevel   = 30;       // RSI買いレベル
extern int    RSI_SellLevel  = 70;       // RSI売りレベル
extern int    StopLoss       = 100;      // ストップロス(pips)
extern int    TakeProfit     = 200;      // テイクプロフィット(pips)
extern double LotSize        = 0.1;      // ロットサイズ
extern int    MagicNumber    = 12345;    // マジックナンバー

//+------------------------------------------------------------------+
//| EA初期化時に呼ばれる関数                                           |
//+------------------------------------------------------------------+
int OnInit()
{
   Print("SimpleMA_RSI_EA が起動しました");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| EA削除時に呼ばれる関数                                             |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Print("SimpleMA_RSI_EA を停止しました");
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれるメイン関数                                     |
//+------------------------------------------------------------------+
void OnTick()
{
   // --- 移動平均線の値を取得 ---
   double fastMA_current  = iMA(NULL, 0, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
   double fastMA_previous = iMA(NULL, 0, FastMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);
   double slowMA_current  = iMA(NULL, 0, SlowMA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
   double slowMA_previous = iMA(NULL, 0, SlowMA_Period, 0, MODE_SMA, PRICE_CLOSE, 1);

   // --- RSIの値を取得 ---
   double rsi = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 0);

   // --- クロス判定 ---
   bool goldenCross = (fastMA_previous <= slowMA_previous) && (fastMA_current > slowMA_current);
   bool deadCross   = (fastMA_previous >= slowMA_previous) && (fastMA_current < slowMA_current);

   // --- 買いシグナル ---
   if(goldenCross && rsi < RSI_BuyLevel)
   {
      ClosePositions(OP_SELL);
      if(!HasPosition(OP_BUY))
      {
         double sl = Ask - StopLoss * Point * 10;
         double tp = Ask + TakeProfit * Point * 10;
         int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp,
                                "MA+RSI Buy", MagicNumber, 0, clrBlue);
         if(ticket < 0)
            Print("買い注文エラー: ", GetLastError());
         else
            Print("買いエントリー: チケット#", ticket);
      }
   }

   // --- 売りシグナル ---
   if(deadCross && rsi > RSI_SellLevel)
   {
      ClosePositions(OP_BUY);
      if(!HasPosition(OP_SELL))
      {
         double sl = Bid + StopLoss * Point * 10;
         double tp = Bid - TakeProfit * Point * 10;
         int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp,
                                "MA+RSI Sell", MagicNumber, 0, clrRed);
         if(ticket < 0)
            Print("売り注文エラー: ", GetLastError());
         else
            Print("売りエントリー: チケット#", ticket);
      }
   }
}

//+------------------------------------------------------------------+
//| 指定タイプのポジションを持っているか確認                             |
//+------------------------------------------------------------------+
bool HasPosition(int type)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == type)
            return true;
      }
   }
   return false;
}

//+------------------------------------------------------------------+
//| 指定タイプのポジションを全決済                                      |
//+------------------------------------------------------------------+
void ClosePositions(int type)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == type)
         {
            double closePrice = (type == OP_BUY) ? Bid : Ask;
            bool result = OrderClose(OrderTicket(), OrderLots(), closePrice, 3, clrYellow);
            if(!result)
               Print("決済エラー: ", GetLastError());
         }
      }
   }
}

AIの出力は毎回少し異なりますが、プロンプトが同じなら同等のEAが生成されます。ぜひご自身でもAIに頼んで作ってみてください。

コードの中身(気になる方だけどうぞ)

「中身を理解しなくても動く」のがAI時代のEA開発ですが、ざっくり知っておくと応用が利きます。

外部パラメータ

extern int    FastMA_Period  = 20;       // 短期移動平均の期間
extern int    SlowMA_Period  = 50;       // 長期移動平均の期間

extern を付けた変数は、MT4の設定画面から数値を変更できます。ストラテジーテスターで最適化する際にも、これらのパラメータを自動で変えながらテストできます。

売買ロジック

bool goldenCross = (fastMA_previous <= slowMA_previous) && (fastMA_current > slowMA_current);

「前の足では短期MAが長期MAの下にいた」かつ「今の足では上にいる」= ゴールデンクロス。これにRSIフィルターを組み合わせて、買いシグナルとしています。

マジックナンバー

if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == type)

マジックナンバーで自分のEAが出した注文だけを識別します。複数のEAを同時に動かしても混同しません。

AIにうまく伝えるコツ

プロンプトの書き方で、出力の質は大きく変わります。意識するのは以下のポイントです。

  • 通貨ペアと時間足を明示する
  • エントリー条件と決済条件を分けて書く
  • パラメータ化したい値を指定する(ロット数、損切り幅など)
  • 「MQL4で」「MT4のEAとして」とはっきり伝える

特に「MQL4で」の一言があるかないかで、出力の正確さがかなり変わります。

うまくいかないときの対処法

コンパイルエラーが出る → エラーメッセージをそのままAIに貼り付けて「このエラーを修正してください」と伝えましょう。大抵は1回のやりとりで解決します。

バックテストの成績が悪い → 条件を変えて何度でも試せます。パラメータの微調整も「RSIの期間を14から21に変えてください」とAIに頼むだけでOKです。

バックテストとリアルの成績が乖離する → スプレッドやスリッページの影響が考えられます。「スプレッド2pips・スリッページ1pipsを考慮して修正してください」と指示してみてください。

エラー対応のプロンプト集は「MQL4エラー対応プロンプト集」にまとめています。

どのAIを使うべきか

AI向いている用途
ChatGPT(GPT-4o)MQL4コードの初回生成。出力が安定していて、最もユーザーが多いです
Claude(Sonnet / Opus)長いコードの修正やリファクタリングが得意。コンテキスト理解が深いです
Gemini無料枠が広いので、まず試してみたい方におすすめです

1つに絞る必要はありません。ChatGPTで雛形を作り、Claudeで仕上げるといった使い分けが実戦的です。

AI別の詳しい比較は「Claude Code vs ChatGPT:EA開発に使えるのはどっち?」をご覧ください。

ここまでの流れで自力実装は十分可能ですが、実際には「生成コードのエラー修正」「細かな仕様の詰め」「MT4/MT5への反映作業」に時間を取られやすいです。
本サイトで全体像と判断軸を押さえつつ、作業効率を上げる部分は専用プロンプトを道具として使うのが、最短ルートになりやすいです。

まとめ:小さく作って、回していこう

最新AIの登場で、EA開発のハードルは劇的に下がりました。「プログラミングができないから」という理由でEAを諦める時代は終わっています。

やることはシンプルです。

  1. 売買条件を日本語で書く
  2. AIにコードを生成させる
  3. バックテストで検証する
  4. 改善して再テスト

完璧なEAを最初から作る必要はありません。シンプルな条件1つから始めて、このサイクルを回していくことが、自分だけの「最強EA」への最短ルートです。

今回のサンプルEAも、移動平均線の部分をご自身が普段使っているインジケーターに差し替えるだけで、オリジナルEAになります。

もしくは、AIにいろいろなデータを与えれば、独自の戦略を考えてくれるかもしれません。

可能性は無限大です。

ステップアップガイド

「実際にやってみたい」という方は、以下の順番で進めるとスムーズです。

ステップ記事学べること
Step 0この記事EA開発の全体像を知る
Step 1【初級編】ボリバン+移動平均線でEAを作ってみよう自分で条件を考えてAIに伝える
Step 2【中級編】説明できないインジでもEA化できるPine ScriptをAIに丸投げして複雑なインジをEA化

Step 1で「自分の言葉で伝えればEAが作れる」を体験し、Step 2で「コードを渡すだけで何でもEA化できる」ことを知る——この流れで、EA開発の基本スキルが身につきます。

さらに効率よく、高精度なEAを完成させたい方へ

複数のインジケータを組み合わせた時のロジックの構築方法を含めた、AIによるEA作成の精度を高める専用プロンプトをダウンロードできます。

随時アップデートも行なっています。最速で始めたい方はこちらからプロンプトを受け取ってください。

⚠️ 免責事項: 本記事で紹介するEAは教育目的で作成されたサンプルです。実際の取引で利益を保証するものではありません。EAの運用は必ずデモ口座で十分にテストした上で、自己責任で行ってください。FX取引にはリスクが伴います。

次のステップ

まずデモで動作確認 → OKなら本番運用、が安全です。

デモ口座でEAを回す手順
共有:

関連記事

if (signal && riskOk) { executeEA(); }

for (const tf of [M5, M15, H1]) {

  score += checkTrend(tf);

}

return score >= threshold;

🤖 AIでEAを作る基礎

【完全初心者向け】TradingViewの使い方入門 ― まずは裁量トレードを体験しよう

トレード未経験者向けにTradingViewの基本操作を画像付きで解説。チャートの見方、移動平均線の設定、ペーパートレードのやり方まで、ゼロから始める手順をまとめました。

#TradingView #初心者 #移動平均線

if (signal && riskOk) { executeEA(); }

for (const tf of [M5, M15, H1]) {

  score += checkTrend(tf);

}

return score >= threshold;

🤖 AIでEAを作る基礎

裁量手法をAIに伝えるための「言語化シート」— 穴埋めでプロンプト完成

裁量トレードの経験をAIが理解できる条件文に変換するための穴埋めシートを提供。シートを埋めるだけでMT4のEAを作るプロンプトが完成します。

#言語化 #プロンプト #裁量手法

if (signal && riskOk) { executeEA(); }

for (const tf of [M5, M15, H1]) {

  score += checkTrend(tf);

}

return score >= threshold;

🤖 AIでEAを作る基礎

MQL4エラーをAIで直すデバッグプロンプト集【コピペ用テンプレ付き】

AIが生成したMQL4コードのエラーをパターン別に分類し、AIに修正させるためのプロンプトテンプレートをまとめました。コンパイルエラーから動作不良まで対応。

#MQL4 #エラー #デバッグ
#ChatGPT #Claude #EA #MQL4 #自動売買 #初心者
目次を表示