ブログタイトルを「FX自動売買システム開発部」から「autoFX」に変更しました!

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内に記憶されるグローバル変数を削除する時など、何かをお掃除する時にお世話になることが殆どです。

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

MQL4プログラミングの最新記事8件

>完全放ったらかしEA 「AutoEndlessCatchRange」

完全放ったらかしEA 「AutoEndlessCatchRange」

「本業が忙しい!」「でも資産運用したい!」そんなあなたに最適なEAです。兼業トレーダーの方はチャートを毎日みて分析してトレードする時間はなかなか確保できないものです。トレードは本EAに任せて、本業やプライベートの時間をもっと増やしませんか?元々は自分自身のために開発したEAですので、手抜き無しのガチものです。

CTR IMG