パラメーターや時間足を変更してもグローバル変数は初期化されない
パラメーターや時間足を変更すると、その都度、OnDeinit関数とOnInit関数がこの順で再実行されます。
この時、グローバル変数はどうなるかと言いますと、特に影響を受けません。データは保持されたままです。
初期化されるような気がしますが、それは気のせいです。初期化されません。
逆に言えば、パラメーターや時間足を変更した際に特定のグローバル変数を初期化したいなら、明示的に初期化の処理を記述しなければなりません。
記述場所はOnDeinit関数の方が良いでしょう。パラメーターや時間足を変更した時だけ初期化するといった制御が可能ですので。
例えば、こんなコードを書くことで、パラメーターや時間足を変更した時だけ、特定のグローバル変数を初期化できます。
int gVariable = 0; // グローバル変数 //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { // 時間足を変えるか、パラメーターを変えた場合 if(reason == REASON_CHARTCHANGE || reason == REASON_PARAMETERS){ gVariable = 0; // 初期化 }else{ // 上記の理由以外では何もしない } }
こんな考慮が必要なケースはあまりないかもしれませんが、誰かの役に立てば幸いです。