Установка входных параметров индикатора через советник - как реализовать?

 

Я взял для примера индикатор опубликованный в этой статье: https://www.mql5.com/ru/docs/indicators/isar

Я хочу что бы в значение

input double               step=0.02;


Задавалось во входных параметрах советника который использует этот индикатор

Я это делаю так:

input double isar = 0.0005;
//...
indicator_isar = iCustom(asymbol.Name(),Period(),"algotrade_isar",isar);

Но индикатор инициируется все равно с параметрами 0.02 которые указаны по умолчанию. Если верить документации: https://www.mql5.com/ru/docs/indicators/icustom то iCustom после трех аргументов принимает переменное кол-во параметров, и передает их в индикатор.

Да я немного поменял последовательность параметров в индикаторе выше.

//--- входные параметры
input double               step=0.02;                    // шаг - коэффициент ускорения при подтягивании стопов
input double               maximum=0.2;                  // максимальное значение шага
input string               symbol=" ";                   // символ 
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // таймфрейм
input Creation             type=Call_iSAR;               // тип функции 

Creation идет последним а не первым. Собственно не понимаю почему переданный шаг не применяется к индикатору в чем может быть проблема?

Документация по MQL5: Технические индикаторы / iSAR
Документация по MQL5: Технические индикаторы / iSAR
  • www.mql5.com
iSAR - Технические индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
0x41:

Creation идет последним а не первым. Собственно не понимаю почему переданный шаг не применяется к индикатору в чем может быть проблема?

Последовательность параметров в iCustom должна быть такая же как в индикаторе.  


 
Ну дак я его и перенес в конец, что бы он был по умолчанию
 
0x41 #:
Ну дак я его и перенес в конец, что бы он был по умолчанию

В советнике iCustom пересчитывает индикатор по своим параметрам, а сам индикатор отображается по своим параметрам. Чтобы в тестере с визуализацией видеть индикатор с параметрами советника, надо подготовить шаблон с установленным индикатором под именем tester или с тем-же именем как и советник.

 

А можно поподробнее (или ссылку почитать? )

А если у меня два индикатора, тогда как быть?

 
0x41:

Я взял для примера индикатор опубликованный в этой статье: https://www.mql5.com/ru/docs/indicators/isar

Я хочу что бы в значение


Задавалось во входных параметрах советника который использует этот индикатор

Я это делаю так:

Но индикатор инициируется все равно с параметрами 0.02 которые указаны по умолчанию. Если верить документации: https://www.mql5.com/ru/docs/indicators/icustom то iCustom после трех аргументов принимает переменное кол-во параметров, и передает их в индикатор.

Да я немного поменял последовательность параметров в индикаторе выше.

Creation идет последним а не первым. Собственно не понимаю почему переданный шаг не применяется к индикатору в чем может быть проблема?

Хотите задавать параметры индикатора отличные от тех, что идут по умолчанию и при этом чтобы Ваши параметры (а не те что идут по умолчанию) отображались в Тестере стратегий - пишите свой индикатор у которого во входные параметры вынесены настройки. Например: 

RSI LiDo Color  имеет во входных параметрах настройки уровней и в тестере он эти уровни отображает. Допустим я задам ему 73 и 26

и они отобразятся в тестере:

RSI LiDo Color
RSI LiDo Color
  • www.mql5.com
Индикатор iRS (Relative Strength Index, RSI) в виде цветных точке
 
Vladimir Karputov #:

Хотите задавать параметры индикатора отличные от тех, что идут по умолчанию и при этом чтобы Ваши параметры (а не те что идут по умолчанию) отображались в Тестере стратегий - пишите свой индикатор у которого во входные параметры вынесены настройки. Например: 

RSI LiDo Color  имеет во входных параметрах настройки уровней и в тестере он эти уровни отображает. Допустим я задам ему 73 и 26

и они отобразятся в тестере:

Блин я так это и сделал, вот как вы этот индикатор вызываете у себя в советнике можно пример?

Потому что я делаю то же самое и там все равно значения по умолчанию.

 
Кажись разобрался но это не точно
 
У вас 5 входных параметров, поэтому их все 5 и надо перечислить в функции iCustom, а не один.
 
input double               step=0.02;                    // шаг - коэффициент ускорения при подтягивании стопов
input double               maximum=0.2;                  // максимальное значение шага
//...
indicator_isar = iCustom(asymbol.Name(),Period(),"algotrade_isar",step,maximum);

/////////

а вот так, тоже не работает?

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

или вот так! 

//--- входные параметры
input string               symbol=" ";                   // символ 
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // таймфрейм
input double               step=0.02;                    // шаг - коэффициент ускорения при подтягивании стопов
input double               maximum=0.2;                  // максимальное значение шага
input Creation             type=Call_iSAR;               // тип функции
//...
indicator_isar = iCustom(symbol,period,"algotrade_isar",step,maximum,type);
input string               symbol="EURUSD";              // символ
 

проверил вот так - всё отлично работает!

//+------------------------------------------------------------------+
//|                                               isar_algotrade.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Перечисление способов создания хэндла                            |
//+------------------------------------------------------------------+
enum Creation
  {
   Call_iSAR,              // использовать iSAR
   Call_IndicatorCreate    // использовать IndicatorCreate
  };
//--- входные параметры
input string               symbol="EURUSD";              // символ
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // таймфрейм
input double               step=0.02;                    // шаг - коэффициент ускорения при подтягивании стопов
input double               maximum=0.2;                  // максимальное значение шага
input Creation             type=Call_iSAR;               // тип функции
//---
int      indicator_isar;                  // variable for storing the handle of the iRSI indicator
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iRSI
   indicator_isar = iCustom(symbol,period,"algotrade_isar",step,maximum,type);
//--- if the handle is not created
   if(indicator_isar==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code
      PrintFormat("Failed to create handle of the iRSI indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

индикатор из примера документации 

Файлы: