OnInit/OnDeinit関数とグローバル変数の関係

パラメーターや時間足を変更してもグローバル変数は初期化されない

パラメーターや時間足を変更すると、その都度、OnDeinit関数とOnInit関数がこの順で再実行されます。

この時、グローバル変数はどうなるかと言いますと、特に影響を受けません。データは保持されたままです。

初期化されるような気がしますが、それは気のせいです。初期化されません。

逆に言えば、パラメーターや時間足を変更した際に特定のグローバル変数を初期化したいなら、明示的に初期化の処理を記述しなければなりません。

記述場所はOnDeinit関数の方が良いでしょう。パラメーターや時間足を変更した時だけ初期化するといった制御が可能ですので。

例えば、こんなコードを書くことで、パラメーターや時間足を変更した時だけ、特定のグローバル変数を初期化できます。

int gVariable = 0; // グローバル変数

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  // 時間足を変えるか、パラメーターを変えた場合
  if(reason == REASON_CHARTCHANGE || reason == REASON_PARAMETERS){
    gVariable = 0; // 初期化
  }else{
    // 上記の理由以外では何もしない
  }
}

こんな考慮が必要なケースはあまりないかもしれませんが、誰かの役に立てば幸いです。

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG