IndicatorRelease

如果不使用,函数删除指标缓冲区并释放指标计算空间。

bool  IndicatorRelease(
   int       indicator_handle     // 指标处理
   );

返回值

如果成功返回真值,否则返回错误值。

注释

如果不再需要,函数允许删除指标缓冲区来节省内存。处理立即删除,计算块会在一定时间内删除(如果不再调用)。

当在策略测试中工作时,不会执行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;
//+------------------------------------------------------------------+
//| EA初始化函数                                                      |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| EA订单号函数                                                      |
//+------------------------------------------------------------------+
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)
           {
            //--- 记住倒数第二柱的全局变量值
            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());
           }
        }
     }
//---
  }