ParameterGetRange

Recebe os dados na faixa de valores e o passo de alteração para uma variável de entrada ao otimizar um Expert Advisor no Testador de Estratégia. Existem 2 variantes da função.

1. Recebimento de dados do parâmetro de entrada para o tipo integer

bool  ParameterGetRange(
   const string  name,          // nome do parâmetro (variável de entrada)
   bool&         enable,        // parâmetro de otimização habilitado
   long&         value,         // o valor do parâmetro
   long&         start,         // valor inicial
   long&         step,          // alterar passo
   long&         stop           // valor final
   );

2. Recebendo dados para o parâmetro de entrada tipo real

bool  ParameterGetRange(
   const string  name,          // nome do parâmetro (variável de entrada)
   bool&         enable,        // parâmetro de otimização habilitado
   double&       value,         // valor do parâmetro
   double&       start,         // valor inicial
   double&       step,          // alterar passo
   double&       stop           // valor final
   );

Parâmetros

name

[in] variável de entrada ID. Essas variáveis são parâmetros externos de uma aplicação. Seus valores podem ser especificados quando do lançamento num gráfico ou durante um único teste.

enable

[out]  Sinaliza que este parâmetro pode ser usado para enumerar os valores durante a otimização no Testador de Estratégia.

value

[out]  Valor do parâmetro.

start

[out]  Valor do parâmetro inicial durante a otimização.

step

[out]  Parâmetro altera o passo ao enumerar os seus valores.

stop

[out]  Valor do parâmetro final durante a otimização.

Valor de retorno

Retorna true se bem sucedido, caso contrário false. Para obter informações sobre o erro, utilize a função GetLastError().

Observação

A função pode ser chamado apenas pelos manipuladores OnTesterInit(), OnTesterPass() e OnTesterDeinit(). Foi introduzida para receber os valores dos parâmetros de entrada do Expert Advisor e faixas de variação durante a otimização no Testador de Estratégia.

Quando chamado em OnTesterInit(), os dados obtidos podem ser usados para redefinir as regras de enumeração de qualquer variável de entrada usando ParameterSetRange(). Portanto, novo Start, Stop e valores do Step podem ser definidos no parâmetro de entrada e podem até mesmo serem completamente excluídos a partir da otimização, independentemente das configurações do Testador de Estratégia. Isto permite-lhe gerenciar a área dos parâmetros de entrada durante a otimização, excluindo alguns parâmetros a partir da otimização de acordo com os valores dos parâmetros fundamentais do Expert Advisor.

Exemplo:

#property description "Expert Advisor para a demonstração da função ParameterGetRange()."
#property description "Deve ser lançado no modo de otimização do Testador de Estratégia"
//--- parâmetros de entrada
input int                 Input1=1;
input double              Input2=2.0;
input bool                Input3=false;
input ENUM_DAY_OF_WEEK    Input4=SUNDAY;
 
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Expert Advisor é projetado para operação somente no Testador de Estratégia
   if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
     {
      MessageBox("Deve ser lançado no modo de otimização do Testador de Estratégia!");
      //--- finalizar a operação do Expert Advisor com antecedência e remover do gráfico
      return(INIT_FAILED);
     }
//--- completada com sucesso a inicialização
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função TesterInit                                                |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- exemplo de parâmetros de entrada tipo long
   string name="Input1";
   bool enable;
   long par1,par1_start,par1_step,par1_stop;
   ParameterGetRange(name,enable,par1,par1_start,par1_step,par1_stop);
   Print("Primeiro parâmetro");
   PrintFormat("%s=%d  habilitado=%s  a partir de %d para %d com passo=%d",
               name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- exemplo de parâmetros de entrada tipo double
   name="Input2";
   double par2,par2_start,par2_step,par2_stop;
   ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
   Print("Segundo parâmetro");
   PrintFormat("%s=%G  habilitado=%s  a partir de %G para %G com passo=%G",
               name,par2,(string)enable,par2_start,par2_stop,par2_step);
 
//--- exemplo de parâmetros de entrada tipo bool
   name="Input3";
   long par3,par3_start,par3_step,par3_stop;
   ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
   Print("Terceiro parâmetro");
   PrintFormat("%s=%s  habilitado=%s  a partir de %s para %s",
               name,(string)par3,(string)enable,
               (string)par3_start,(string)par3_stop);
//--- exemplo de parâmetros de entrada tipo enumerador
   name="Input4";
   long par4,par4_start,par4_step,par4_stop;
   ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
   Print("Quarto parâmetro");
   PrintFormat("%s=%s  habilitado=%s  a partir de %s para %s",
               name,EnumToString((ENUM_DAY_OF_WEEK)par4),(string)enable,
               EnumToString((ENUM_DAY_OF_WEEK)par4_start),
               EnumToString((ENUM_DAY_OF_WEEK)par4_stop));
  }
//+------------------------------------------------------------------+
//| Função TesterDeinit                                              |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- esta mensagem será mostrada após a otimização ser concluída
   Print(__FUNCTION__," Otimização concluída");
  }