生成AIにMT5のEAを作らせると、多くの人が同じ場所で最初につまずきます。コンパイルボタンを押すと赤いエラーがずらりと並び、何を直せばいいのか分からなくなる。
原因のほとんどは、たった一つです。AIが出したコードに、MT4の書き方が混ざっていること。
この記事では、プログラムが読めない人でも「これはMT4の書き方だ」と見抜けるようになるチェックリストと、AIに投げるだけで直る修正文をまとめます。
結論:MT4とMT5は、別の言語だと思ったほうがいい
名前が似ているので拡張版だと思われがちですが、MQL4とMQL5は互換性がありません。関数の名前が同じでも、引数の数も戻り値の意味も違います。
そして厄介なことに、ネット上にはMT4時代のコードが大量に残っています。生成AIはそれも学習しているので、MT5用と指定しても、MT4の書き方が紛れ込むことがあります。
AIが間違えているのではなく、そもそも見分けがつきにくい構造になっている。だから人間側がチェックの型を持つ必要があります。
もっとも多い事故:iMA の書き方
移動平均を取得する iMA は、MT4とMT5で戻り値の意味そのものが変わりました。
| MT4(MQL4) | MT5(MQL5) | |
|---|---|---|
| 引数の数 | 7個 | 6個 |
| 戻り値 | 移動平均の値(double) | ハンドル(int) |
| 値の取り出し | そのまま使える | CopyBuffer で配列に写す |
| 呼ぶ場所 | 毎回呼んでよい | OnInit で1回だけ作る |
MT4の感覚で書かれたコードは、こうなります。MT5ではコンパイルが通りません。
// これはMT4の書き方。MT5ではエラーになる
double fastMA = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
if(fastMA > slowMA) { ... }
MT5では、こう書きます。
// MT5の書き方
int hFast = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE); // ハンドルを作る
double fast[];
ArraySetAsSeries(fast, true);
CopyBuffer(hFast, 0, 0, 3, fast); // ハンドルから値を写す
double value = fast[1]; // ここで初めて数値になる
「ハンドル」とは何か
ハンドルを、番号札だと考えると分かりやすいです。
MT4は、移動平均が欲しいたびに窓口へ行って「今の値をください」と聞く方式でした。MT5は、最初に一度だけ窓口で番号札を受け取っておき、以降はその番号を見せて中身を受け取る方式です。
番号札そのものは移動平均の値ではありません。だから iMA の戻り値をそのまま比較しようとすると、意味をなさないのです。
遠回りに見えますが、指標を何十個も扱うEAでは、この方式のほうが圧倒的に軽くなります。毎回計算し直さずに済むからです。
コードが読めなくても分かる、MT4混入チェックリスト
以下のどれかが見つかったら、そのコードにはMT4が混ざっています。意味は分からなくていいので、文字列として探してください。
1. int start() がある
MT5に start() はありません。MT5は OnInit() OnTick() OnDeinit() の3つです。init() deinit() も同じくMT4の名残です。
2. iMA( の閉じカッコ直前に、数字がもう1つある
カンマで区切られた最後が PRICE_CLOSE, 1) のように数字で終わっていたら、その最後の数字がMT4専用の引数です。MT5は PRICE_CLOSE) で終わります。
3. OrderSend( の後ろに引数が延々と並ぶ
MT4の OrderSend は11個の引数を並べる関数でした。MT5は OrderSend(request, result) の2個だけです。カッコの中が長い行を見たら疑ってください。
4. trade.Buy を使っているのに #include がない
trade.Buy() のような書き方は #include <Trade\Trade.mqh> があって初めて使えます。冒頭にこの1行がなければ、必ずエラーになります。
5. Point や Bars を裸で使っている
MT5では _Point Bars(_Symbol,_Period) のように書き方が変わりました。アンダースコアの有無が目印です。
このEAも記事も、AIと一緒に作っています。私はプログラマーではありません。MT5のEAもインジケーターも、Claude(AI)と対話しながら作っています。コードが書けなくても、作りたいものを言葉にできれば形になります。同じように「作る側」に回ってみたい方は、こちらから試せます。
https://claude.ai/referral/sWCPCcvVWQ
※紹介リンクです。
直すためのプロンプト(コピーして使えます)
エラーが出たら、まずエラーメッセージをそのまま貼ってください。内容が読めなくても構いません。そのうえで、次の一文を添えます。
コンパイルすると以下のエラーが出ました。
(ここにエラーメッセージをそのまま貼る)
MT4の書き方が混ざっていませんか?
MT5専用のMQL5として、次の方針で書き直してください。
・指標はOnInit()でハンドルを作り、OnTick()ではCopyBufferで値を取り出す
・エントリーとクローズはCTrade(#include <Trade\Trade.mqh>)を使う
・start() init() deinit() は使わず、OnInit() OnTick() OnDeinit() にする
・MT4専用の関数や引数は一切使わない
この「MT4の書き方が混ざっていませんか?」という一言が効きます。AIにどこを疑うべきかを指定しているので、当てずっぽうの修正になりにくいのです。
それでも直らないときの3手
- コード全文をもう一度貼って、最初から書き直させる。部分修正を重ねると、直した箇所と古い箇所が混在して壊れていきます。長くなってきたら作り直したほうが早いです。
- 機能を1つに減らす。移動平均だけ、と絞れば通ります。通ってから足していきます。
- MetaEditorの「ナビゲータ」から公式サンプルを開いて、それをAIに読ませる。MT5の正しい書き方の実例を渡すのが、言葉で説明するより確実です。
大事なのは、直せること
AIが一発で完璧なコードを出すことはあまりありません。ですが、エラーを貼って直させるループを2〜3回まわせば、たいてい動くところまで行きます。
プログラムが書けることと、EAが作れることは、もう別の話になりました。必要なのは、どこを疑えばいいかを知っていることです。
ただし、動くEAができることと、勝てるEAができることは、まったくの別問題です。ここを混同すると危険です。
作ったEAをどう疑うか——バックテストがきれいに見えてしまう罠については、別の記事で扱います。
実際に作っている様子を見たい方へ
この記事は「なぜ動かないのか」の解説に絞りました。実際に何を打ち込み、どこで詰まり、どう直したのか、その過程をそのまま書いた記事をnoteに公開しています。プロンプト全文と完成コードも載せています。
プログラムが書けない私が、AIと30分で「移動平均線だけのEA」を作った全記録(note)
使用ブローカー
MT5を使うには口座が必要です。私が使っているのはExnessです。口座開設はこちらから。
https://one.exnessonelink.com/a/frbss95cj4
EAの無料配布について
完成品のEAを使ってみたい方は、公式ラインで「GP希望」と書いてコメントください。
お問い合わせ
公式LINE:https://lin.ee/9yDXJ19
メール:ea-designer-kuu@hashibito-llc.com
免責事項
本記事は情報提供および技術解説を目的としたものであり、投資勧誘を目的としたものではありません。本記事で紹介するコードは学習用のサンプルであり、収益を保証するものではありません。バックテストの結果は将来の成果を保証しません。FX・CFD取引には元本を割り込むリスクがあります。取引の最終判断はご自身の責任で行ってください。
EA Designer Kuu

コメント