AIが書いたEAが動かない一番の原因|MT4とMT5の違いを、コードが読めなくても見抜く方法

生成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希望」と書いてコメントください。

https://lin.ee/9yDXJ19

お問い合わせ

公式LINE:https://lin.ee/9yDXJ19
メール:ea-designer-kuu@hashibito-llc.com

免責事項

本記事は情報提供および技術解説を目的としたものであり、投資勧誘を目的としたものではありません。本記事で紹介するコードは学習用のサンプルであり、収益を保証するものではありません。バックテストの結果は将来の成果を保証しません。FX・CFD取引には元本を割り込むリスクがあります。取引の最終判断はご自身の責任で行ってください。

EA Designer Kuu

EAデザイナー空(くう)

EAデザイナー空(くう)と申します。 裁量トレード歴20年。 EA歴17年です。 現在はEA開発販売をメインにインジケーター開発販売や裁量トレード教室なども手掛けております。 EAは国内外のブローカーで使用することができます。 ブローカーやペア通貨を変更するたびに最適化が必要です。

コメント

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

最近取引している口座はこちら
私が使用しているお勧めVPS
私が使っている海外口座はここ↓
ブログをメールで無料購読

メールアドレスを記入して無料購読すれば、更新をメールで受信できます。

最新情報はLINEで
友だち追加
国内口座のEAはこちら
最近の記事
Contact us
おすすめ記事1
海外口座でダントツ出金が早い!
海外FXの老舗
PAGE TOP