【開発の裏側㊲】コマンドラインのコンパイルが、別のMTの部品を読んでいた。Includeの置き場を指定する話

【開発の裏側㊲】コマンドラインのコンパイルが、別のMTの部品を読んでいた。Includeの置き場を指定する話

記事
IT・テクノロジー
どうも、FXトレーダー兼システムエンジニアのナオトです。

開発の裏側の5回目で、コマンドラインでコンパイルしても、チャートのインジケーターは古いまま、という話を書きました。
今回は、同じコマンドラインのコンパイルで、もう1つ気づきにくかったことです。どの部品を読んでコンパイルしているか、です。



インジケーターやEAのソースは、共通の部品のファイルを読み込んで使うことがよくあります。
部品のファイルは、MTのデータフォルダの中の Include というフォルダに置きます。

私は、MT4もMT5も、検証用のものと普段使いのものを、同じパソコンに何本か入れています。
検証用のMTはポータブルの形で動かしていて、データフォルダは、それぞれのMTのフォルダの中にあります。



ある日、検証用のMT5のフォルダにあるEAを、コマンドラインでコンパイルしました。
コンパイルは通りました。

ところが、コンパイルのログを見ると、読み込んでいた Include は、検証用のMTのものではありませんでした。
Windowsのユーザーのフォルダの下にある、普段使いのMTのデータフォルダの Include を読んでいたんです。

同じ名前の部品が両方にあれば、どちらを読んでも通ってしまいます。中身が違っていても、エラーは出ません。



直し方は、コンパイルするときに /inc を付けて、Include を読む場所を指定することです。
検証用のMTの MQL5 のフォルダを指せば、その下の Include を読みます。

MT4の MetaEditor でも、同じことが起きました。こちらも /inc を付けないと、別のデータフォルダの Include を見に行きます。



これには、良い使い道もありました。

/inc は、MTのデータフォルダでなくてもかまいません。作業用のフォルダに Include を作って、要る部品だけを写して指せば、そこを読んでコンパイルします。
MTに配置する前に、エラーが0件になるまで詰められるわけです。動いているMTのフォルダには、1つもファイルを置かずに済みます。



本当に指定した場所を読んでいるかは、確かめ方があります。

MTの側には無い、新しく作った部品を使うソースでコンパイルしてみる。それで通れば、指定した場所を読んでいる証拠になります。
ログに書かれた Include の場所を読むのと、この方法の2つがあります。



コンパイルが通った、という結果だけでは、どのファイルを読んで通ったのかまでは分かりません。
MTを何本も入れている方は、一度、コンパイルのログで Include の場所を見てみてください。

インジケーターやEAの制作、MT4とMT5の変換のご依頼は、こちらで受けています。


最後までお読みいただき、ありがとうございました。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す