ParameterGetRange

Получает для input-переменной информацию о диапазоне значений и шаге изменения при оптимизации эксперта в тестере стратегий.  Существует 2 варианта функции.

1. Получение информации для input-параметра целого типа

bool  ParameterGetRange(
   const string  name,          // имя параметра (input-переменной)
   bool&         enable,        // разрешена оптимизация параметра
   long&         value,         // значение параметра
   long&         start,         // начальное значение
   long&         step,          // шаг изменения
   long&         stop           // конечное значение
   );

2. Получение информации для input-параметра вещественного типа

bool  ParameterGetRange(
   const string  name,          // имя параметра (input-переменной)
   bool&         enable,        // разрешена оптимизация параметра
   double&       value,         // значение параметра
   double&       start,         // начальное значение
   double&       step,          // шаг изменения
   double&       stop           // конечное значение
   );

Параметры

name

[in]  Идентификатор input-переменной. Такие переменные являются внешними параметрами программы, значения которых можно задавать при запуске на графике или при одиночном тестировании.

enable

[out]  Признак того, что данный параметр можно использовать для перебора значений в процессе оптимизации в тестере стратегий.

value

[out]  Значение параметра.

start

[out]  Начальное значение параметра при оптимизации.

step

[out]  Шаг изменения параметра при переборе его значений.

stop

[out]  Конечное значение параметра при оптимизации.

Возвращаемое значение

Возвращает true в случае успешного выполнения, иначе false. Для получения информации об ошибке используйте функцию GetLastError().

Примечание

Функция может вызываться  только из обработчиков OnTesterInit(), OnTesterPass() и OnTesterDeinit(). Предназначена для получения значения и диапазона изменения входных параметров эксперта в процессе оптимизации в тестере стратегий.

При вызове в OnTesterInit() полученную информацию можно использовать для переопределения правила перебора любой input-переменной  с помощью функции ParameterSetRange(). Таким образом можно задавать новые значения Start, Stop, Step и даже полностью исключать данный параметр из оптимизации несмотря на настройки в тестере стратегий. Это позволяет создавать собственные сценарии для управления пространством входных параметров при оптимизации, то есть исключать из оптимизации одни параметры в зависимости от значений ключевых параметров эксперта.

Пример:

#property description "Эксперт для демонстрации функции ParameterGetRange()."
#property description "Необходимо запускать в тестере стратегий в режиме оптимизации"
//--- input parameters
input int                 Input1=1;
input double              Input2=2.0;
input bool                Input3=false;
input ENUM_DAY_OF_WEEK    Input4=SUNDAY;
 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- эксперт предназначен только для работы в тестере стратегий
   if(!MQL5InfoInteger(MQL5_OPTIMIZATION))
     {
      MessageBox("Необходимо запускать в тестере стратегий в режиме оптимизации!");
      //--- завершаем работу эксперта досрочно и снимаем с графика
      return(INIT_FAILED);
     }
//--- успешное завершение инициализации
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//--- пример для input-параметра типа 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("Первый параметр");
   PrintFormat("%s=%d  enable=%s  from %d to %d with step=%d",
               name,par1,(string)enable,par1_start,par1_stop,par1_step);
//--- пример для input-параметра типа double
   name="Input2";
   double par2,par2_start,par2_step,par2_stop;
   ParameterGetRange(name,enable,par2,par2_start,par2_step,par2_stop);
   Print("Второй параметр");
   PrintFormat("%s=%G  enable=%s  from %G to %G with step=%G",
               name,par2,(string)enable,par2_start,par2_stop,par2_step);
 
//--- пример для input-параметра типа bool
   name="Input3";
   long par3,par3_start,par3_step,par3_stop;
   ParameterGetRange(name,enable,par3,par3_start,par3_step,par3_stop);
   Print("Третий параметр");
   PrintFormat("%s=%s  enable=%s  from %s to %s",
               name,(string)par3,(string)enable,
               (string)par3_start,(string)par3_stop);
//--- пример для input-параметра типа перечисление
   name="Input4";
   long par4,par4_start,par4_step,par4_stop;
   ParameterGetRange(name,enable,par4,par4_start,par4_step,par4_stop);
   Print("Четвертый параметр");
   PrintFormat("%s=%s  enable=%s  from %s to %s",
               name,EnumToString((ENUM_DAY_OF_WEEK)par4),(string)enable,
               EnumToString((ENUM_DAY_OF_WEEK)par4_start),
               EnumToString((ENUM_DAY_OF_WEEK)par4_stop));
  }
//+------------------------------------------------------------------+
//| TesterDeinit function                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//--- это сообщение выйдет по окончании оптимизации
   Print(__FUNCTION__," Optimization completed");
  }