OnDeinit関数が呼ばれる時

OnDeinit関数はEAを削除した時だけに呼ばれるもの?

未だに凡ミスする1つにOnDeinit関数の呼び出しタイミングがあります。

OnDeinit関数はEAを削除した時に呼ばれるものだ!って、ついつい思ってしまうんですね。

でも違います。

OnDeinit関数の引数reasonに注目してください。

reasonにはOnDeinit関数が呼ばれた時の理由を識別する番号が格納されます。

ということは、OnDeinit関数が呼ばれるタイミングは複数あるということですね。

どんな時に呼ばれるか、早速見てみましょう。

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  /*
  REASON_PROGRAM      0  EAがExpertRemove関数を呼び出して操作を終了しました。
  REASON_REMOVE       1  プログラムがチャートから削除されました。
  REASON_RECOMPILE    2  プログラムが再コンパイルされました。
  REASON_CHARTCHANGE  3  通貨ペアか時間足が変更されました。
  REASON_CHARTCLOSE   4  チャートが閉じられました。
  REASON_PARAMETERS   5  パラメータがユーザ—によって変更されました。
  REASON_ACCOUNT      6  別のアカウントが有効化されるか、アカウントの設定変更によってサーバへの再接続が発生しました。
  REASON_TEMPLATE     7  新しいテンプレートが適用されました。
  REASON_INITFAILED   8  OnInit関数がゼロ以外の値を返しました。
  REASON_CLOSE        9  MT4のターミナルが閉じられた。
  */

  // 使い方の一例
  if(reason == REASON_REMOVE || reason == REASON_CHARTCLOSE){
    // 何らかの処理
  }
}

こんなにあるんですね。ちなみに、reasonの正式名は初期化解除の理由のコードと言うそうです。

まぁでも、6~8はそうそう使わないかなぁと思います。

私の場合、オブジェクトを削除する時とかMT4内に記憶されるグローバル変数を削除する時など、何かをお掃除する時にお世話になることが殆どです。

立つ鳥跡を濁さず、です。こういうことに意識が向くようになれば、初心者脱却ですね。

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

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

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

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

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

アイキャッチ

>

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

CTR IMG