EA(自動売買プログラム)を作ったあとに、
「エントリーが多すぎる」「決済が早い」「もう少し条件を絞りたい」──
そんな悩みが出てくることがあります。
そこで使えるのが、ChatGPTによる既存EAの改良です。
本記事は「ChatGPT×EA自動売買」連載シリーズの STEP3 です。
EAをゼロから作るのではなく、STEP2で作ったEAや手持ちのEAを前提に、
ロジック・フィルター・決済条件をChatGPTで修正・調整する方法を解説します。
- 既存EAをChatGPTで修正・改良する流れ
- フィルター追加・決済条件変更の具体例
- コンパイルエラーが出たときの直し方
- ChatGPTに伝えるべき修正指示のコツ
※ ChatGPT×EA自動売買の全体像や学習ステップの整理については、 STEP1:入門ガイド(総まとめ)で詳しく解説しています。
それでは、ChatGPTで既存EAをどう改良できるのか、実例を見ながら確認していきましょう。
ChatGPTでEAを改良できる理由

ChatGPTは「ゼロから作る」よりも、
👉 既存EAを改良するほうが圧倒的に得意です。
※ 私も“作る”より、改良で使うことがほとんどです
ChatGPTはMQL4やMQL5のコード構造を理解しているため、
既存のソースコードを貼り付けて「こう修正したい」と伝えると、
修正版のEAコードを提示してくれます。
例:
「このEAにRSIフィルターを追加して、買いエントリーはRSI30以下のときだけにしてください」
「決済条件をEMAクロスに変更して」
「損切りをATR×2にして」
このように自然な言葉で指示するだけで、
複雑なロジックもChatGPTが追加コードを自動生成してくれます。
ここからは、STEP2で作ったEAや、すでに手元にあるEAコードを改良する前提で進めます。
まだEAコードがない場合は、先にSTEP2でChatGPTを使ったEA生成の流れを確認してください。
実際にEAを改良してみよう
それでは、実際の例を見てみましょう。
まず、以下のようなRSIで買いエントリーするシンプルなEAがあるとします。
※ コードを全部理解する必要はありません。
ここでは「RSIで買うEAに、移動平均線フィルターを追加する」という流れだけ確認できればOKです。
void OnTick() {
double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0);
if (rsi < 30 && OrdersTotal() == 0) {
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy", 0, 0, clrNONE);
}
}
ここに「移動平均線フィルターを追加したい」とChatGPTに伝えます。
(例)
以下のコードに移動平均線フィルターを追加したい。
void OnTick() {
double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0);
if (rsi < 30 && OrdersTotal() == 0) {
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, “Buy”, 0, 0, clrNONE);
}
}
結果は、次のようなコードを生成してくれます👇
void OnTick() {
double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0);
double ma = iMA(NULL, PERIOD_H1, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
if (rsi < 30 && Ask > ma && OrdersTotal() == 0) {
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy with MA filter", 0, 0, clrNONE);
}
}
このように「条件を追加」や「ロジックを変更」など、
既存EAの部分改良ならChatGPTの得意分野です。
💡 決済条件もChatGPTで簡単に調整できる!
エントリーだけでなく、「どの条件で利確・損切りするか」もChatGPTで自在に変更可能です。
例えば、上記EAに「移動平均線クロスで決済」したい場合は、以下のように指示します👇
「このEAに、短期MAが長期MAを下抜けたら全決済する処理を追加してください」
ChatGPTは次のようなコードを出力します。
void OnTick() {
double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0);
double ma = iMA(NULL, PERIOD_H1, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
if (rsi < 30 && Ask > ma && OrdersTotal() == 0) {
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy with MA filter", 0, 0, clrNONE);
}
CheckCloseCondition();
}
void CheckCloseCondition() {
double shortMA = iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
double longMA = iMA(NULL, PERIOD_H1, 50, 0, MODE_SMA, PRICE_CLOSE, 0);
if (shortMA < longMA) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
if (OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY) {
OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrNONE);
}
}
}
}
このように「エントリー」「フィルター」「決済条件」の3点セットで調整できるのが、ChatGPTを使ったEA改良の強みです。
特に決済ロジックの最適化(例:EMAクロス、ATR利確、トレイリングストップ)は、収益性を大きく左右します。
🔸 ChatGPTで「連敗ストップ」ロジックを追加する
EAの改良では、勝率を上げるよりも“負けを減らす”制御のほうが効果的なことがあります。
たとえば「連敗したらその日はエントリーしない」というルールを追加するだけで、
無駄なドローダウンを抑えられます。
👉 詳しい実装例はこちらで解説しています:
▶ 【ChatGPT学習用】連敗したらその日はエントリーしなくする処理を作る方法(MQL4)
このような“条件制御”のロジックは、ChatGPTに自然言語で依頼することで簡単に生成できます。
よくあるChatGPTの間違いと修正ポイント
ChatGPTが出力するMQL4コードには、以下のような“よくある間違い”が含まれることがあります。
実際にありがちな例と、修正方法をセットで紹介します。
ここからは少し技術的な内容になりますが、最初から全部覚える必要はありません。
初心者の方は、まずコンパイルエラーが出たら、エラー文をそのままChatGPTに貼って直してもらう、という使い方でOKです。
| よくあるエラー内容 | ChatGPTの誤出力例 | 修正版コード | 解説 |
|---|---|---|---|
| ① PositionSelectを使っている | if(PositionSelect(Symbol())) { ... } | if(OrdersTotal() > 0) { ... } | 「PositionSelect」はMQL5の関数。MQL4では「OrdersTotal()」または「OrderSelect()」で代用します。 |
| ② CopyBufferを使っている | CopyBuffer(handle, 0, 0, 3, rsiBuffer); | double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0); | CopyBufferはMQL5構文。MQL4ではiRSI()やiMA()などで直接値を取得します。 |
| ③ インジケータ関数の引数不足 | double rsi = iRSI(NULL, 14, PRICE_CLOSE); | double rsi = iRSI(NULL, PERIOD_H1, 14, PRICE_CLOSE, 0); | MQL4では時間足とシフトを明示しないとエラーになります。 |
| ④ Pointの扱いが誤っている | double sl = Bid - 50 * Point;(5桁口座でずれる) | double sl = NormalizeDouble(Bid - 50 * Point, _Digits); | 小数点桁数が異なる口座ではNormalizeDouble()で補正が必要。 |
| ⑤ OrderSendの引数順ミス | OrderSend(Symbol(), OP_BUY, Ask, 0.1, 3, 0, 0, "test", 0, clrNONE); | OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "test", 0, 0, clrNONE); | ロット数と価格の順番が逆。ChatGPTはたまに引数順を間違えます。 |
🧩 ヒント:
ChatGPTが生成したEAをMT4に貼り付けた際、「コンパイルエラー」や「’function’ – function not defined」が出た場合は、

そのエラーメッセージをChatGPTに貼って「このエラーを直してください」と伝えると、正しい修正版を返してくれます。
ChatGPTへの効果的な指示例
ChatGPTに指示を出すときの“言い方”次第で、出力の精度が大きく変わります。
以下のように目的を明確に伝えるのがコツです👇
| 目的 | プロンプト例 | ChatGPTの出力結果イメージ |
|---|---|---|
| 条件追加 | 「このEAにRSIとEMAのダブルフィルターを追加してください」 | → RSIとEMAの両方の条件を満たす時のみエントリーするように修正 |
| エントリー調整 | 「エントリー回数を減らすためにボリンジャーバンドを条件に加えて」 | → バンド下限でのみ買い、上限でのみ売りの条件を追加 |
| 決済変更 | 「現在の利確条件を移動平均クロスに変更して」 | → 決済部分がMAのクロス判定に書き換えられる |
| ナンピン追加 | 「ナンピン機能を追加して、同方向に3回までポジションを持つように」 | → ロット増加+最大3ポジ制限のナンピン処理を追加 |
| 損切り調整 | 「ATRを使って動的なストップロスを設定してください」 | → ATR×2のストップロスを自動計算して反映 |
| 決済条件変更 | 「利確をEMAクロスで、損切りをATR×2にしてください」 | → 決済ロジックにEMAクロスとATR計算を追加 |
| トレイリングストップ | 「エントリー後に10pipsごとにストップロスを追従する機能を追加して」 | → トレイリングロジックをOrderModifyで実装 |
💡 同じ質問でも、ChatGPTはバージョンや前回の文脈によって違うコードを出すことがあります。
1回で完璧を狙うよりも、2~3回試してベストなバージョンを比較しましょう。
ChatGPTでEA改良を進めるポイント
ChatGPTでEAをうまく改良するには、「部分修正 → テスト → 再修正」の小さな反復が最重要です。
以下のような流れで進めると効率的です👇
- 小さく修正する(例:「RSI条件を追加」だけ)
- MT4でコンパイル → エラーが出たらChatGPTに修正依頼
- バックテストで挙動を確認
- ロジックのズレをChatGPTに説明して再修正依頼
これを繰り返すことで、自分の戦略に近いEAへ少しずつ調整していくことができます。
⚙️ ChatGPTは「完全なEAを作るツール」ではなく、
あなたの頭の中のロジックを形にする“AIアシスタント”と考えるのが最も効果的です。
EAは、コードを作って終わりではありません。
ロジック調整、リスク管理、バックテスト、フォワード確認を重ねることで、実運用に近づけていくことが重要です。
当サイトでは、AUDCAD専用EA AC RUSH を実運用しており、
フォワード成績や月別収益、リスク管理の考え方も公開しています。
※ AC RUSHは完成EAの実運用例です。ChatGPTで生成したコードをそのまま使っているものではなく、検証と調整を重ねた事例として紹介しています。
まとめ:ChatGPTは既存EA改良の心強い補助ツール
ChatGPTを使えば、EAのロジック調整や条件追加が圧倒的にスピーディーになります。
ただし、MQL4の基礎知識があるほど効率的に使えるため、
「AIで楽するために少し学ぶ」という姿勢が最強の組み合わせです。
そして次のステップでは、改良したEAをバックテストで検証します。
ロジックの強弱や最適化パラメータを分析し、「使えるEA」に仕上げていきましょう。
🧩 ChatGPTでEAを改良したら、次は「検証」
EAを改良しただけでは、まだ“完成”ではありません。
次はMT4でのバックテスト(過去検証)を通して、ロジックの再現性やパフォーマンスを確認しましょう。
👉 【STEP4:ChatGPTでEAをバックテストする方法】では、
MT4でのバックテスト手順や最適化のコツ、ヒストリカルデータの扱い方を詳しく紹介しています。
💡 ChatGPTでのEA改良が難しいと感じた方へ
既存EAの修正内容をうまく整理できない場合や、ChatGPTでは再現しにくい処理がある場合は、
EA作成代行で仕様整理や実装を依頼する方法もあります。
▶ EA作成代行サービスを見る







コメント