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

AIに1回頼むだけでFXの自動売買EAが作れる — コピペで動く完全コード付き

読了 約13分

「EAって難しそう」と思っていませんか?

「EAって難しそう」「プログラミングできないし…」

そう思ってこのページを開いたあなたに、いいニュースがあります。

今からお見せするプロンプトを、ChatGPTかClaudeにコピペするだけで、FXの自動売買EA(エキスパートアドバイザー)が完成します。

  • 所要時間: 5分
  • プログラミング知識: 不要
  • 必要なもの: ChatGPTかClaudeのアカウント(無料でOK)

嘘だと思いますか? まず完成品をお見せします。


これが今日作るEAです

このEAの売買ロジック:

  • 20期間の移動平均線(SMA)と50期間の移動平均線(SMA)のクロス
  • RSI(14期間)が30以下で買い、70以上で売りのフィルター
  • ストップロス: 100pips / テイクプロフィット: 200pips

移動平均線のゴールデンクロス・デッドクロスという王道のトレンドフォロー戦略に、RSIによる「売られすぎ・買われすぎ」フィルターを組み合わせたEAです。

シンプルですが、EA開発の基本がすべて詰まっています。これをAIが1回のプロンプトで全部書きます。


AIに渡すプロンプト

以下のプロンプトをChatGPTまたはClaudeにそのまま貼り付けてください。

あなたは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の期間)
- RSI_BuyLevel = 30(RSI買いレベル)
- RSI_SellLevel = 70(RSI売りレベル)
- StopLoss = 100(ストップロス、pips)
- TakeProfit = 200(テイクプロフィット、pips)
- LotSize = 0.1(ロットサイズ)
- MagicNumber = 12345(マジックナンバー)

## 技術要件
- 1つの通貨ペアにつき同時に1ポジションまで
- マジックナンバーで自身のポジションを識別すること
- クロスの判定は前回足と現在足の比較で行うこと
- すべてのエラーハンドリングを含めること
- 日本語のコメントをコード内に入れること

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

AIの出力は毎回少し異なります。 エラーが出た場合は、エラーメッセージをそのままAIに貼り付けて「このエラーを修正してください」と頼めばOKです。


AIが生成したコード

実際にClaudeに上のプロンプトを渡して出てきたコードがこちらです。

//+------------------------------------------------------------------+
//| SimpleMA_RSI_EA.mq4                                               |
//| AIが生成した移動平均線+RSIの自動売買EA                              |
//| https://ai-ea-lab.com                                             |
//+------------------------------------------------------------------+
#property copyright "AI EA Lab"
#property link      "https://ai-ea-lab.com"
#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);

   // --- クロス判定 ---
   // ゴールデンクロス: 前回は短期MAが長期MAの下 → 今回は上
   bool goldenCross = (fastMA_previous <= slowMA_previous) && (fastMA_current > slowMA_current);
   // デッドクロス: 前回は短期MAが長期MAの上 → 今回は下
   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に頼んで作ってみる」のがおすすめです。

⬇️ .mq4ファイルをダウンロード


5分でEAを動かす手順

ステップ1: .mq4ファイルをMT4に配置

  1. 上のボタンからファイルをダウンロード(または、AIが出力したコードをテキストエディタに貼り付けて SimpleMA_RSI_EA.mq4 として保存)
  2. MT4を開き、「ファイル」→「データフォルダを開く」
  3. MQL4Experts フォルダに .mq4 ファイルを入れる

ステップ2: MetaEditorでコンパイル

  1. MT4の 「ツール」→「MetaQuotes言語エディタ」 を開く
  2. ファイルを開いて 「コンパイル」 ボタンを押す
  3. 「0 error(s)」 と出ればOK

コンパイルエラーが出た場合は、エラーメッセージをそのままAIに貼り付けて修正を頼めば解決できます。

ステップ3: チャートにセット

  1. MT4のナビゲーターから 「エキスパートアドバイザ」 を展開
  2. SimpleMA_RSI_EA をチャートにドラッグ&ドロップ
  3. 「自動売買を許可する」 にチェック → OK

ステップ4: 動作確認

  • チャート右上に ニコちゃんマーク 😊 が出ればOK
  • ストラテジーテスターでバックテストもできます

⚠️ まずはデモ口座で試してください。 いきなりリアル口座で動かすのは絶対にNGです。

MT4をまだ持ってない方は、各FX会社のデモ口座を使えば無料で試せます。デモ口座はメールアドレスだけで開設できるので、まずは気軽に触ってみてください。


コードの解説(気になる人だけ読めばOK)

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

外部パラメータ

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

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

売買ロジック

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

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

ポジション管理

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

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


次のステップ

動きましたか? おめでとうございます。あなたは今「AIでEAを作れる人」になりました。

今回のEAの売買ロジックは「移動平均線のクロス + RSIフィルター」というシンプルなものです。

でも考えてみてください。この「移動平均線のクロス」の部分を、あなたが普段使ってるインジケーターに差し替えたらどうなるでしょう?

あなただけのオリジナルEAが作れます。

おすすめの次の記事

「まだどんなインジを使うか決めてない」という方は、TradingViewでいろんなインジケーターを試してみてください。無料でも十分な数のインジケーターが使えます。


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

共有:

関連記事

#EA #MT4 #ChatGPT #Claude #自動売買 #初心者 #MQL4
目次を表示