インジケーターとEAでは、グローバル変数の挙動が違うことご存じでしょうか?
毎回忘れて頭を悩ますので、記録がてら投稿しようと思いまして。
ここで言うグローバル変数というのはMT4に設定する変数ではなく、全ブロックをスコープとするプログラム内部の変数のことです。OnInitやOnTickの外で宣言している変数のことですね。
時間足や入力パラメーターを変更すると、OnDeInit→OnInitの一連の処理(再初期化)が実行されます。
EAでグローバル変数を宣言した場合、この再初期化が実行されても値はリセットされません。値は保持されたままになります。
他方、インジケーターの場合、再初期化が実行されると値は保持されずリセットされてしまいます。
なぜこんな仕様なのか疑問なのですが、MT4はおろかMT5でも同じなので、運営は問題視していないようですね。
なのでEAのコードをそのままインジケーターに(逆もしかり)移植しようとすると、予期せぬ不具合に遭遇するかもしれません。
グローバル変数はEAでは保持されるが、インジケーターでは保持されない仕様、いい加減覚えておきたいなぁ。