どうも、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の変換のご依頼は、こちらで受けています。
最後までお読みいただき、ありがとうございました。