IndicatorRelease

이 함수는 지표 핸들을 제거하고 다른 사용자가 사용하지 않을 경우 지표의 계산 블록을 해제합니다.

bool  IndicatorRelease(
   int       indicator_handle     // 지표 핸들
   );

반환 값

성공하면 true를 반환하고, 그렇지 않으면 false를 반환합니다.

참고

이 함수를 사용하면 더 이상 필요하지 않은 지표 핸들을 제거하여 메모리를 절약할 수 있습니다. 핸들이 즉시 제거되고 계산 블록이 잠시 후에 삭제됩니다(더 이상 호출되지 않는 경우).

전략 테스터에서 작업할 경우, the IndicatorRelease() 함수가 실행되지 않습니다.

예:

//+------------------------------------------------------------------+
//|                                        Test_IndicatorRelease.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                             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;
//+------------------------------------------------------------------+
//| Expert 초기화 함수                                   |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Expert 틱 함수                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 글로벌 변수 값이 없는 경우
   if(!GlobalVariableCheck("MA_value"))
     {
      //--- 마지막 두 막대의 지표 값을 구함
      if(MA_handle!=INVALID_HANDLE)
        {
         //--- 지표 값에 대한 동적 배열
         double values[];
         if(CopyBuffer(MA_handle,0,0,2,values)==2 && values[0]!=EMPTY_VALUE)
           {
            //--- 마지막 막대에서 글로벌 변수 값으로 기억
            if(GlobalVariableSet("MA_value",values[0]))
              {
               //--- 지표의 핸들을 비움
               if(!IndicatorRelease(MA_handle))
                  Print("IndicatorRelease() 실패. Error ",GetLastError());
               else MA_handle=INVALID_HANDLE;
              }
            else
               Print("GlobalVariableSet 실패. Error ",GetLastError());
           }
        }
     }
//---
  }