IndicatorRelease

この関数は、指標ハンドルを削除し、誰によっても使用されていない場合は指標の計算ブロックを解放します。

bool  IndicatorRelease(
  int      indicator_handle    // 指標ハンドル
  );

戻り値

成功の場合は true、それ以外の場合は false

注意事項

この関数は不要になった指標ハンドルを削除しメモリを節約します。ハンドルがすぐに削除され演算ブロックは(もはや呼び出されていない場合)しばらくたって削除されます。

ストラテジーテスタでの作業ではIndicatorRelease() 関数は実行されません。

例:

//+------------------------------------------------------------------+
//|                                        Test_IndicatorRelease.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                             https://www.MQL5.com |
//+------------------------------------------------------------------+
#property copyright "2010, MetaQuotes Software Corp."
#property link     "https://www.mql5.com"
#property version   "1.00"
//--- 入力パラメータ
input int               MA_Period=15;
input int               MA_shift=0;
input ENUM_MA_METHOD     MA_smooth=MODE_SMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
//--- 指標ハンドルを格納する
int MA_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| エキスパート初期化に使用される関数                                        |
//+------------------------------------------------------------------+
int OnInit()
 {
//--- 指標ハンドルを作成する
  MA_handle=iMA(Symbol(),0,MA_Period,MA_shift,MA_smooth,PRICE_CLOSE);
//--- グローバル変数を削除する
  if(GlobalVariableCheck("MA_value"))
    GlobalVariableDel("MA_value");
//---
  return(INIT_SUCCEEDED);
 }
//+------------------------------------------------------------------+
//| エキスパートティック関数                                                 |
//+------------------------------------------------------------------+
void OnTick()
 {
//--- グローバル変数の値が存在しない場合
  if(!GlobalVariableCheck("MA_value"))
    {
    //--- 最後の 2 つのバーの指標値を取得する
    if(MA_handle!=INVALID_HANDLE)
       {
        //--- 指標値の動的配列
        double values[];
        if(CopyBuffer(MA_handle,0,0,2,values)==2 && values[0]!=EMPTY_VALUE)
          {
          //--- 最後から2 番目のバーをグローバル変数の値に保存する
          if(GlobalVariableSet("MA_value",values[0]))
             {
              //--- 指標ハンドルを解放する
              if(!IndicatorRelease(MA_handle))
                Print("IndicatorRelease() failed. Error ",GetLastError());
              else MA_handle=INVALID_HANDLE;
             }
          else
              Print("GlobalVariableSet failed. Error ",GetLastError());
          }
       }
    }
//---
 }