AI EA スクール
0記事中 0記事 読了
カリキュラム 付録 付録 付録B プロンプト集
B

付録B プロンプト集

読み終わるまでの目安 約10分

この記事でできるようになること

  • EAの作成・修正・改善・トラブル対応で使うプロンプトを、コピーしてすぐ使える
  • 【 】の部分だけ書き換えれば、自分の仕様に合ったプロンプトになる
  • 実際の口座で注文が通るように、安全装置をまとめて指示できる
  • プロンプトを書くときのコツを確認できる

使い方

以下のプロンプトは、そのままChatGPTに貼り付けて使える形にしてあります。【 】の部分だけをご自身の仕様や状況に書き換えてください。それ以外の文章は変えなくて大丈夫です。

本スクールではChatGPTを使いますが、他のAIでも同じプロンプトで代用できます。

各プロンプトがどの章で使うものかも書いておきます。

番号 使う場面 関連する章
1 EAを新しく作る 第3章・第4章
2 コンパイルエラーを直す 4-3
3 バックテスト結果から改善する 6-1
4 機能を追加する 6-2
5 コードの内容を説明してもらう 3-4
6 チャートに乗せたのに動かない 7-1
7 出来上がったEAを点検する 3-4・4-3の前

1. EAを新規作成するプロンプト(基本形)

あなたはMQL4のプロのプログラマーです。
MetaTrader 4(MT4)で動くEA(エキスパートアドバイザ)を作成してください。

【環境】
- プラットフォーム: MT4
- 言語: MQL4(MQL5の文法は使わないでください)

【仕様】
1. 通貨ペア・時間足: 【USDJPY・1時間足】
2. 買いエントリー条件: 【短期移動平均線(20)が長期移動平均線(50)を下から上に抜けたとき】
3. 売りエントリー条件: 【短期移動平均線(20)が長期移動平均線(50)を上から下に抜けたとき】
4. 決済条件: 【利確 50pips、損切り 30pips。反対のクロスが出たら成行で決済】
5. ロット数: 【0.1ロット固定】
6. 同時ポジション数: 【1つまで】
7. 取引時間帯: 【制限なし】
8. マジックナンバー: 【12345】

【出力の条件】
■ 基本
- MQL4で書いてください。MQL5の文法(CTradeクラス、MqlTradeRequestなど)を混ぜないでください
  → MT4はMQL4しか動きません。混ざるとコンパイルが通りません
- コードは省略せず、1ファイルの完全な形で出力してください
  → 「// 以下同様」で省かれた部分は、初心者には補えません
- 後から変えたい数値(移動平均の期間、利確・損切り幅、ロット数、スリッページ、マジックナンバー)は input 変数にしてください
  → MT4の設定画面から書き換えられるようになります
- 売買の判定は確定した足(1本前と2本前)で行ってください
  → 形成中の足で判定すると、一瞬だけ条件を満たしてすぐ戻る「だまし」で無駄な注文が増えます

■ 業者ごとの違いへの対応
- Digits を見て1pipの価格幅を求めてください。Digits が 3 または 5 なら 1pip = Point * 10、それ以外は 1pip = Point とします
  → 5桁表示の業者では Point が1pipの10分の1です。この処理がないと「損切り30pips」が3pipsになってしまいます
- スリッページは input で pips 単位で受け取り、内部でポイント単位に換算して OrderSend に渡してください
  → 理由は上と同じです。pipsのままポイント欄に入れると、許容できる幅が10分の1になります
- ロット数は MarketInfo(Symbol(), MODE_MINLOT) / MODE_MAXLOT / MODE_LOTSTEP を見て、その口座で使える値に丸めてください
  → 最小・最大・刻み幅から外れたロットは error 131(ロット数が不正)で拒否されます
- 損切り・利確は MarketInfo(Symbol(), MODE_STOPLEVEL) と MarketInfo(Symbol(), MODE_FREEZELEVEL) を確認し、
  指定した幅がこの最小距離より近い場合は、最小距離まで押し広げてください
  → 業者が決めた最小距離より近い損切り・利確は error 130 で拒否されます

■ 発注前のチェック
- 発注前に IsTradeAllowed()、IsConnected()、IsTradeContextBusy() を確認し、
  ひとつでも不可なら発注せず、理由をログに出して見送ってください
  → 自動売買OFF、回線切断、他のEAが処理中のときに、無駄な失敗を繰り返さないためです
- 発注の直前に RefreshRates() を呼んで、価格を取り直してから OrderSend してください
  → 古い価格のまま注文すると error 129(価格が正しくない)や error 138(リクオート)になります
- AccountFreeMarginCheck(Symbol(), 売買種別, ロット) で証拠金が足りるか確認し、
  足りなければ発注せずログを出してください
  → 証拠金不足は error 134 になります
- スプレッドが広すぎるときは新規注文しないフィルターを入れ、しきい値(pips)を input にしてください
  → 指標発表の直後などはスプレッドが大きく開き、不利な価格で約定しやすくなります

■ 注文が失敗したときの処理
- 注文が失敗したら GetLastError() でエラー番号を取り、
  やり直す価値のあるエラー(4, 6, 128, 129, 135, 136, 137, 138, 146)のときだけ、
  少し待って(0.5〜1秒)最大3回まで再試行してください。それ以外のエラーは繰り返さず中止してください
  → 一時的な混雑や価格変動は、やり直せば通ります。設定ミスが原因のエラーは何度出しても通りません
- 損切り・利確つきの注文が error 130 で失敗したときは、いったん損切り・利確なしで発注し、
  約定後に OrderModify で損切り・利確を付け直してください
  → 注文と同時の損切り・利確の設定を受け付けない業者があるためです
- 決済(OrderClose)も同じ考え方で、失敗したら再試行してください

■ 起動直後の安全策
- OnInit で「最後に判定した足の時刻」を、現在の足の時刻(Time[0])で初期化してください
  → これがないと、EAをチャートに乗せた瞬間に、過去に出ていたシグナルでいきなり発注してしまいます
- 計算に必要な本数の足が揃うまで(例: Bars が移動平均の期間+数本に満たない間)は、売買判定をしないでください
  → 足が足りないと指標の計算結果が0になり、誤った売買判定になります
- input の値が明らかにおかしい場合(期間が0以下など)は、OnInit で警告を出して停止してください

■ 注文の管理とログ
- 自分のEAが出した注文だけを、マジックナンバーと通貨ペアの両方で見分けてください
  → 手動の注文や他のEAの注文を、誤って決済しないためです
- 注文の成功・失敗の両方を Print() でログに出してください。失敗時はエラー番号と、その意味の日本語も出してください
  → MT4の「エキスパート」タブを見るだけで、動かない原因が分かるようになります
- コードの後に、各部分が何をしているかを初心者向けに日本語で簡単に説明してください

【出力の条件】が長いのには理由があります。ここを短くすると、コンパイルは通るのに、実際の口座では注文が通らないEAが出来上がります。3桁・5桁の業者による表示の違い、業者ごとの最小ロットや最小の損切り幅、一時的な混雑による注文の失敗といった「MT4が実際に返してくるエラー」への備えを、ここでまとめて指示しています。詳しい理由は3-3の記事で解説しています。

EAごとに書き換えるのは【仕様】の8行と、input変数にしたい項目名だけです。【出力の条件】は毎回そのままコピーして使ってください。

2. コンパイルエラーを直してもらうプロンプト

先ほどのEAをMetaEditorでコンパイルしたところ、以下のエラーが出ました。
MQL4のまま(MQL5の文法は使わずに)修正して、
修正した完全なコードを、省略せずに1ファイルで出力してください。

【エラー内容】
(MetaEditor下部の「エラー」タブの内容をそのまま貼り付け)
例: 'OrderSend' - wrong parameters count  MyEA.mq4  45  12

【お願い】
- エラーの原因を、初心者にも分かる日本語で先に1〜2行で説明してください
- 直したのはどこかを箇条書きで示してください
- 売買ロジックと、先にお伝えした【出力の条件】の安全装置は変えないでください

3. バックテスト結果をもとに改善してもらうプロンプト

作成したEAをバックテストしました。結果は以下の通りです。

【テスト条件】
- 通貨ペア: 【USDJPY】 時間足: 【H1】
- 期間: 【2023/01/01〜2025/12/31】
- モデル: 全ティック  スプレッド: 【20】

【結果】
- 純利益: 【-12,000円】
- プロフィットファクター: 【0.85】
- 最大ドローダウン: 【28%】
- 総取引数: 【210】
- 勝率: 【38%】
- 平均利益 / 平均損失: 【4,500円 / 3,200円】

この結果を踏まえて、
1. 何が原因で成績が悪いと考えられるか
2. 改善案を3つ、効果が高そうな順に
を教えてください。

改善は一度に1つだけ試したいので、まず最も効果が高そうな1つを反映した
完全なコードを、省略せずに1ファイルで出力してください。

【お願い】
- 先にお伝えした【出力の条件】の安全装置(1pipの計算、最小距離の確認、ロットの丸め、
  証拠金の確認、再試行など)は、そのまま残してください
- 変えたのはどこかを箇条書きで示してください
- スプレッドや約定のずれで結果が変わる点にも触れてください

4. 機能追加のプロンプト(例: 時間帯フィルター)

現在のEAに以下の機能を追加してください。他のロジックは変更しないでください。
完全なコードを省略せずに出力してください。

【追加機能】
- 取引する時間帯を input 変数で指定できるようにする(サーバー時間、開始時と終了時)
- 指定時間外では新規エントリーしない(保有中のポジションは決済条件に従う)

5. コードの内容を説明してもらうプロンプト

以下のMQL4コードについて、プログラミング未経験者向けに、
「どの行で・何をしているか」をブロックごとに日本語で説明してください。
専門用語には一言で補足をつけてください。

(コードを貼り付け)

6. 「うまく動かない」ときのプロンプト

EAをチャートにセットして自動売買をONにしましたが、エントリーしません。
コンパイルエラーはありません。
以下の情報から、考えられる原因と確認手順を教えてください。

- MT4の「エキスパート」タブのログ: 【ここに貼り付け】
- 右上のEA名の横のマーク: 【ニコちゃん / 困り顔】
- 自動売買ボタン: 【ON】
- テスト時の通貨ペア・時間足: 【USDJPY H1】

7. 生成されたEAの安全確認プロンプト

出来上がったコードを、MetaEditorでコンパイルする前にもう一度AIに点検させるプロンプトです。1番の【出力の条件】で頼んだ安全装置が、本当にコードに入っているかを項目ごとに確認できます。指示が長いと、AIが途中の項目を落とすことがあるためです。

以下は、MT4で動かす予定のMQL4のEAのコードです。
デモ口座・実口座で発注に失敗しないかを点検してください。

コードを読んで、次のチェック項目それぞれについて
「入っている / 入っていない / 判断できない」と、その根拠になる関数名や行を、表にして示してください。

【チェック項目】
1. MQL4の文法だけで書かれているか(MQL5の書き方が混ざっていないか)
2. コードが省略されず、1ファイルで完結しているか
3. Digits を見て1pipの価格幅を求めているか(3桁/5桁の業者への対応)
4. スリッページをpipsからポイントに換算して OrderSend に渡しているか
5. MODE_MINLOT / MODE_MAXLOT / MODE_LOTSTEP でロット数を丸めているか(error 131対策)
6. MODE_STOPLEVEL と MODE_FREEZELEVEL を確認し、損切り・利確が近すぎるときに押し広げているか(error 130対策)
7. error 130 で失敗したとき、損切り・利確なしで発注してから OrderModify で付け直す処理があるか
8. AccountFreeMarginCheck で証拠金を確認しているか(error 134対策)
9. 発注前に IsTradeAllowed() / IsConnected() / IsTradeContextBusy() を確認しているか
10. 発注の直前に RefreshRates() を呼んでいるか(error 129/138対策)
11. 失敗したとき、やり直す価値のあるエラー(4, 6, 128, 129, 135, 136, 137, 138, 146)だけを
    最大3回まで再試行し、それ以外は中止しているか
12. スプレッドが広すぎるときに新規注文を見送るフィルターがあるか
13. OnInit で「最後に判定した足の時刻」を現在の足で初期化しているか(乗せた直後の誤発注を防ぐため)
14. 計算に必要な本数の足が揃うまで判定を止めているか(Bars の確認)
15. 売買の判定を確定足で行っているか
16. 後から変えたい数値が input 変数になっているか
17. 自分のEAの注文だけを、マジックナンバーと通貨ペアの両方で見分けているか
18. 注文の成功・失敗の両方をログに出しているか

そのうえで、
- 「入っていない」項目を直した完全なコードを、省略せずに1ファイルで出力してください
- 直した箇所を箇条書きで、初心者にも分かる日本語で説明してください
- 売買ロジック(エントリーと決済の条件)は変えないでください

(ここにコードを貼り付け)

点検の結果が「全部入っている」でも、それだけで安心はできません。AIの点検も見落とすことがあります。必ずデモ口座で動作を確かめてから、実口座に進んでください。

プロンプトを書くときのコツ

  • 条件は「〜のとき」で書き切る。「良さそうなときに買う」はNG
  • 数字を必ず入れる(期間、pips、ロット)
  • 「MQL4で」「MT4で」を毎回書く。書かないとMQL5のコードが混ざる
  • 「省略せずに完全なコードを」を毎回書く。書かないと「// 以下同様」で省略されることがある
  • 1回のやり取りで1つの変更だけ頼む
  • 【出力の条件】は長くても削らない。ここを削ったEAは、コンパイルが通っても実際の口座で発注に失敗しやすくなります
  • コンパイルの前に「7. 生成されたEAの安全確認プロンプト」で点検し、そのあと必ずデモ口座で確かめる

補足: プロンプトの元ファイル

このプロンプト集の元データは、プロジェクトの「03_プロンプト集/プロンプト雛形.md」にあります。雛形を更新した場合は、この記事も合わせて更新してください。