【MQL4】ChatGPTでFX自動売買(EA)は作れる?自作コードの修正点とバックテスト手順を徹底解説

ChatGPTでFX自動売買EAを自作しMQL4エラーを修正する手順のアイキャッチ画像

【保存版】ChatGPTでFX自動売買(EA)は自作できる?初心者がハマる罠とエラー修正術をプロが完全解説

0. この記事のまとめ(忙しい方向け)

  • ChatGPTを使えば、EAの「設計図」は数秒で作れる。
  • ただし、そのままでは「エラーで動かない」「注文が止まらない」バグが必ず含まれる。
  • 本記事では、初心者が絶対につまずく「名前の重複」や「無限注文」の直し方を徹底解説。
  • 記事後半に、そのままコピーして使える「完全修正済みコード」を掲載!

1. 導入:AIでEA開発はどこまで可能なのか?

こんにちは!「はかせのFX自動売買研究所」のはかせです。
「Google検索の時代は終わる」とまで言わしめた生成AI、ChatGPT。このAI의 驚異的な言語能力は、日常会話だけでなく「プログラミング開発」の世界でも革命を起こしています。

そこで今回は、多くのトレーダーが気になっている以下の疑問に、エンジニア視点で答えていきます。
「ChatGPTを使って、FXの自動売買(EA)は自作できるのか?」

結論から言うと、「作れます。ただし、人間の手による修正(と少しの知識)が必須」です。
この記事では、ChatGPTに実際にコードを書かせ、発生したエラーを修正し、まともに動くEAに仕上げるまでの全工程を完全解説します。

  • ChatGPTを使ってEAを作ってみたい
  • プログラミング(MQL4)の勉強を始めたい
  • AIが書くコードの実力を知りたい

そんな方にピッタリの内容になっていますので、ぜひ最後までご覧ください。


2. そもそもどんな「動き」をするコードを作るのか?

今回、ChatGPTに作ってもらったのは、FXの王道手法「移動平均線(MA)のクロス」を利用したEAです。

移動平均線クロス戦略の仕組み

  • 買いの合図(ゴールデンクロス): 短期の線が、長期の線を「下から上」へ突き抜けた瞬間。「上昇トレンド開始」と見て買います。
  • 売りの合図(デッドクロス): 短期の線が、長期の線を「上から下」へ突き抜けた瞬間。「下落トレンド開始」と見て売ります。
  • 自動決済: 決めた利益が出たら「利確」、損が出たら「損切り」を自動で行います。

3. 【閲覧注意】ChatGPTが最初に出した「NGコード」

まずは、ChatGPTが最初に出力した、そのままでは絶対に動かない・使ってはいけないコードです。これをMetaEditor(MT4の編集ソフト)に貼り付けるとどうなるか、見てみましょう。

// 【NG例】ChatGPTが最初に出力した、バグだらけのコード
extern int FastMA = 50;  
extern int SlowMA = 200; 
extern double Lots = 0.1; 
extern int TakeProfit = 50; // ← ミス1:50pipsのつもりが5pipsになる
extern int StopLoss = 20;   // ← ミス2:20pipsのつもりが2pipsになる

int ticket = 0; 

int start(){
    double FastMAValue = iMA(NULL, 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 0);
    double SlowMAValue = iMA(NULL, 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 0);
        
    // ミス3:二重注文を防止する機能がなく、注文を「連打」してしまう
    if(FastMAValue > SlowMAValue && ticket == 0) {
        ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Bid-StopLoss*Point, Bid+TakeProfit*Point, "Buy", 0, 0, Green);
    }
    
    // ミス4:変数の作り方を間違えていて、ここでビルドエラーが出る
    if(OrderType() == OP_BUY) {
        bool closeOrder = OrderClose(ticket, Lots, Bid, 3, Green); 
    } else if(OrderType() == OP_SELL) {
        bool closeOrder = OrderClose(ticket, Lots, Ask, 3, Red); // ←ここでエラー!
    }
    return(0);
}

4. プロが教える「5つの致命的なバグ」と解決策

初心者の方が必ずつまずくポイントを、世界一わかりやすく解説します。

① ビルドエラー:変数の重複(名前の重複)

MetaEditorで 「variable already defined」 というエラーが出ます。

  • 原因: プログラミングでは、データを保存する場所を「引き出し(変数)」として作ります。ChatGPTは、bool(新しく引き出しを作るぞ!という命令)を何度も使い、「全く同じ名前の引き出しを2つ作れ!」という命令を出してしまったのです。
  • 直し方: 最初に1回だけ引き出しを用意し、2回目以降は「その引き出しを使い回す」ように、「bool」を消して名前だけを使います。

② 動作バグ:悪夢の「無限エントリー」

バックテストをすると、チャートが注文の矢印で埋め尽くされるバグです。

  • 原因: 「クロスした瞬間」ではなく「クロスしている間」はずっと注文しろ!という命令になっているため、価格が1ミリ動くたびに、「ボタンを連打」するように注文を出し続けてしまいます。
  • 直し方: 「すでに注文を1つ持っているなら、もう買わないよ」という見守り役のコードを追加します。

③ 「名札(マジックナンバー)」の欠如

  • 原因: ロボットに 「自分の注文には名札(番号)をつけなさい」 と教えていない状態です。
  • 直し方: これがないと、スマホでの手動トレードまでロボットが勝手に決済してしまいます。コードに 「EA専用の番号(MagicNumber)」 を指定します。

④ 「Point(ポイント)」の単位ミス

  • 原因: AIは 「50=50pips」 だと思い込みますが、実際は 5pips と判断されます。
  • 直し方: 意図した通りに動かすため、設定数値を 「10倍(500)」 に修正する必要があります。

⑤ 安全確認(OrderSelect)の不足

  • 原因: 注文が成功したかを確認せずに次の処理に進む 「お祈りトレード」 状態のコードです。
  • 直し方: 注文の情報を取得できたかを 「必ず確認してから次へ進む」 という慎重なコードに書き換えます。

5. 【初心者向け】徹底比較:どこをどう直したのか?

  • 名前の重複
    [Before] 同じ名前を2回作ってエラーが出る
    [After] 最初に1つだけ用意し、それを使い回すようにした
  • 注文の連打
    [Before] 1秒間に何十回も注文ボタンを押してしまう
    [After] 「今はもう持ってるから、次まで待とう」と判断力をつけた
  • 単位ミス
    [Before] 50 と設定(実は 5pips
    [After] 500 と設定(これで50pips)

6. 初心者向け:EAをMT4に導入する3ステップ

  1. MetaEditorを開く: MT4の上部にある「黄色い本のアイコン」をクリック。
  2. 新規作成: 「新規作成」から「エキスパートアドバイザ」を選択。
  3. 貼り付けとビルド: 最初から入っている文字を全部消して、下記の「完成版コード」を貼り付け。上部の 「コンパイル」 ボタンを押す。

※下の枠に「0 errors, 0 warnings」と出れば成功です!


7. 【完全完成版】コピペOK!修正済みソースコード

すべてのエラーを解消し、誰でも使えるように調整した「完全版」です。

//+------------------------------------------------------------------+
//|                                     ChatGPT_Optimized_EA.mq4     |
//|                                  はかせのFX自動売買研究所         |
//+------------------------------------------------------------------+
#property strict

//--- 設定画面で変更できる項目
input int    FastMA      = 50;    // 短期移動平均線(50日)
input int    SlowMA      = 200;   // 長期移動平均線(200日)
input double Lots        = 0.1;   // 取引量(ロット)
input int    TakeProfit  = 500;   // 利益確定幅 (500=50pips)
input int    StopLoss    = 200;   // 損切り幅 (200=20pips)
input int    MagicNumber = 12345; // このEA専用の管理番号(名札)

int ticket = 0; 

int OnInit() { return(INIT_SUCCEEDED); }

void OnTick()
{
    // 1. 移動平均線の計算
    double FastMAValue = iMA(NULL, 0, FastMA, 0, MODE_EMA, PRICE_CLOSE, 0);
    double SlowMAValue = iMA(NULL, 0, SlowMA, 0, MODE_EMA, PRICE_CLOSE, 0);
    
    // 2. 「引き出し(変数)」を準備
    bool hasPosition = false; 

    // 3. すでに注文を持っていないかチェック(無限連打防止!)
    for(int i = OrdersTotal() - 1; i >= 0; i--) {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            // 同じ番号(名札)の注文があるか確認
            if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) {
                hasPosition = true; // すでに持っているので新しくは買わない
                break;
            }
        }
    }

    // 4. 新規注文を出す判定
    if(!hasPosition) {
        if(FastMAValue > SlowMAValue) { // ゴールデンクロス(買い)
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 
                               Bid - StopLoss * Point, 
                               Bid + TakeProfit * Point, "EA_Buy", MagicNumber, 0, clrGreen);
        }
        else if(FastMAValue < SlowMAValue) { // デッドクロス(売り)
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 
                               Ask + StopLoss * Point, 
                               Ask - TakeProfit * Point, "EA_Sell", MagicNumber, 0, clrRed);
        }
    }
}

8. まとめ:AIを「最高の助手」にするために

ChatGPTはEA開発の「時間を短縮してくれる魔法の杖」ですが、最後はあなたの手による 「仕上げ」 が必要です。

  • AIのコードは必ず「修正が必要」だと疑う
  • 今回解説した「名前の重複」や「無限注文」は特に出やすいバグだと知っておく
  • 必ずデモ口座(バックテスト)で動きを確認してから使う

このステップを繰り返せば、プログラミング未経験のあなたでも、自分だけの最強EAを作り上げることができます。AIを賢く使いこなし、自由なトレードライフを手に入れましょう!


さらに動画で詳しく学びたい方はこちら
(YouTubeリンク:現在準備中)

関連記事

コメント

  1. この記事へのコメントはありません。

目次