MQL5のコンパイルエラーを10個再現して直す|メッセージと原因がずれる例

MQL5のコンパイルエラーは、英語のメッセージと番号で表示されます。慣れないうちは、メッセージの意味と、本当の原因が結びつかないことがよくあります。この記事では、よくある誤りを1つずつ入れた10個の小さなファイルを、実際にMetaEditorでコンパイルし、表示された本物のメッセージと直し方をまとめます。

(確認:MetaEditor(Titan FX版MT5に付属)で、2026年10月17日にコンパイル。メッセージは、ログファイルにそのまま出た文字列です。行と列の番号は、各ファイルの中での位置です)

結果の一覧

# 入れた誤り 表示されたメッセージ 種類
1 行末のセミコロンを忘れた undeclared identifier 'a'(256)と 'Print' - some operator expected(152) エラー2件
2 宣言していない変数を使った undeclared identifier 'total'(256) エラー
3 doubleの計算結果をintに入れた possible loss of data due to type conversion from 'double' to 'int'(43) 警告
4 値を返す関数でreturnを書き忘れた '}' - not all control paths return a value(117) エラー
5 MathMaxに引数を1つしか渡さなかった wrong parameters count(199)が11回 エラー11件
6 閉じかっこ } が1つ足りない unexpected end of program(161)と unbalanced parentheses(133) エラー2件
7 stringに数値を直接入れた implicit conversion from 'int' to 'string'(94) 警告
8 ifの中で == ではなく = と書いた expression not boolean(39) 警告
9 OrderSelectの戻り値を使わなかった return value of 'OrderSelect' should be checked(83) 警告
10 constの値を書き換えた 'LIMIT' - constant cannot be modified(189) エラー

メッセージと原因がずれる3つの例

例1:セミコロン忘れが「宣言されていない」と出る

void OnStart()
  {
   int a = 1
   Print(a);
  }

3行目のセミコロンがありません。ところが、エラーは4行目に「undeclared identifier 'a'」と「'Print' - some operator expected」で出ました。セミコロンがないため、3行目と4行目が1つの文として読まれ、変数aの宣言が成り立たなかったと考えられます(筆者の理解)。エラーの行に原因がない時は、1つ上の行の終わりを見るのが近道です。

例2:引数の数の誤りが11回出る

double v = MathMax(1.0);

MathMaxは2つの値を比べる関数です。引数が1つしかないため、「wrong parameters count」が同じ位置で11回出ました。MathMaxには型の違う複数の版(オーバーロード)があり、そのそれぞれと合わなかったためと考えられます(筆者の理解)。同じ位置に同じエラーが並んだら、原因は1か所です。

例3:閉じかっこ忘れが「1行目」に出る

forの中括弧を閉じ忘れると、「unexpected end of program」が(1,1)の位置に、「unbalanced parentheses」が関数の開始位置に出ました。ファイルの最後まで読んでも括弧が閉じなかった、という意味です。エディタで括弧の対応を確かめるのが早道です。

警告も0にする理由

3・7・8・9は警告で、コンパイル自体は通ります(Result: 0 errors, 1 warnings)。しかし、たとえば8の「if(a = 1)」は、比べているつもりで代入しているので、条件はいつも成り立ちます。9のように戻り値を確かめないと、注文やポジションの選択に失敗しても気づけません。当サイトでは、エラーも警告も0(0 errors, 0 warnings)を完了の条件にしています。

直し方

# 直し方
1 3行目の末尾に ; を付ける
2 使う前に int total = 0; のように宣言する
3 int pips = (int)MathRound(price * 10000); のように、変換を明示する
4 関数の最後に return(y); を書く
5 MathMax(1.0, 2.0) のように、2つ渡す
6 forの閉じ括弧 } を足す
7 string s = IntegerToString(10); のように変換する
8 if(a == 1) にする
9 if(!OrderSelect(ticket)) { ... } のように結果を確かめる
10 constを外すか、別の変数に入れて使う

上の10か所をすべて直したファイルを1つにまとめてコンパイルし、0 errors, 0 warnings になることを確認しました(2026年10月17日)。

エラーの見方の基本はMQL5のコンパイルエラーの見方、学ぶ順番はMQL5を学ぶ順番と、独学とスクールの分かれ目にあります。

まとめ

  • 10個の誤りを実際にコンパイルすると、エラー6種・警告4種のメッセージが出た
  • セミコロン忘れは「undeclared identifier」、引数の誤りは同じエラーが11回、括弧忘れは(1,1)に出るなど、メッセージと原因がずれる例がある
  • 警告も0にする。代入と比較の取り違えや、戻り値の見落としは、警告でしか分からない

本記事はプログラミングの説明であり、特定の売買を勧めるものではありません。