【開発の裏側⑤】コンパイルしたのに、チャートのインジケーターが古いままの理由

【開発の裏側⑤】コンパイルしたのに、チャートのインジケーターが古いままの理由

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

インジケーターを自作していると、ソースを直してコンパイルしたのに、チャートの表示が変わらないことがあります。
直し方が悪かったのかと何度も見直して、結局コードは正しかった。そんな経験をした方もいると思います。

今回は、その原因を実機で確かめた話です。



私は、MetaEditorの画面を開かずに、コマンドラインからコンパイルすることが多いです。
metaeditor.exe に /compile を付けて呼ぶと、ex4やex5のファイルが新しく書き換わります。

ところが、動いているMT4やMT5は、これに気づきません。
チャートに乗っているインジケーターは古いまま動き続けます。ターミナルのウィンドウを前に出しても同じでした。エキスパートのログにも、何も残りません。



MetaEditorの画面でF7を押したときだけは違います。

このときはMetaEditorがターミナルに知らせて、チャートのインジケーターが読み直されます。
ログには、uninit reason 2 が出ます。再コンパイルで外された、という意味の番号です。

つまり、ファイルが新しくなったことと、チャートで新しいコードが動いていることは別なんです。
コマンドラインでコンパイルしたあとは、F7を押すか、チャートからインジケーターを外して入れ直す必要があります。



もう1つ、コマンドラインのコンパイルには気をつけることがあります。

終了コードを信じないことです。
成功しても1を返すことがあるので、私はログのファイルを読んで、何件のエラーと何件の警告が出たかの行で判定しています。



この件以来、配置したあとには必ず2つ確かめています。

1つは、配置先のソースの版の数字です。版を上げずに配置すると、新しいものが動いているのか、古いものなのか、版で見分けられません。
実際、新しい版を作りながら、配置していたのは1つ前の版だったことがありました。

もう1つは、チャートで読み直したかどうか。
コンパイルが通ったことと、正しく動いていることは違う。当たり前のようで、ここで実際につまずいています。



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


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