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にする。代入と比較の取り違えや、戻り値の見落としは、警告でしか分からない
本記事はプログラミングの説明であり、特定の売買を勧めるものではありません。


