Download MetaTrader 5

IndicatorRelease

A função remove um handle de indicador e libera o bloco de cálculo do indicador, se ele não for usado por ninguém mais.

bool  IndicatorRelease(
   int       indicator_handle,     // handle do indicador
   );

Valor de retorno

Retorna true no caso de sucesso, caso contrário retorna false.

Observação

A função permite remover um handle de indicador, se ele não mais for necessário, deste modo, economizando memória . O handle é removido imediatamente, o bloco de cálculo é excluído em algum momento (se ele não for chamado por ninguém mais).

Durante o funcionamento do testador de estratégias, a função IndicatorRelease() não é executada.

Exemplo:

//+------------------------------------------------------------------+
//|                                        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"
//--- parâmetros de entrada
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;
//--- armazenará o handle de indicador
int MA_handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- cria um handle de indicador
   MA_handle=iMA(Symbol(),0,MA_Period,MA_shift,MA_smooth,PRICE_CLOSE);
//--- exclui variável global
   if(GlobalVariableCheck("MA_value"))
      GlobalVariableDel("MA_value");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função tick (ponto) de um Expert                                 |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- se o valor da variável global não existir
   if(!GlobalVariableCheck("MA_value"))
     {
      //--- obtém o valor do indicador nas últimas duas barras
      if(MA_handle!=INVALID_HANDLE)
        {
         //--- array dinâmico para valores do indicador
         double values[];
         if(CopyBuffer(MA_handle,0,0,2,values)==2 && values[0]!=EMPTY_VALUE)
           {
            //--- lembra na variável global o valor da penúltima barra
            if(GlobalVariableSet("MA_value",values[0]))
              {
               //--- libera o handle do indicador
               if(!IndicatorRelease(MA_handle))
                  Print("IndicatorRelease() falhou. Error ",GetLastError());
               else MA_handle=INVALID_HANDLE;
              }
            else
               Print("GlobalVariableSet falhou. Error ",GetLastError());
           }
        }
     }
//---
  }