iCustom & enum

 

Добрый день.

Столкнулся с проблемой, не знаю как решить:


Есть пара индикаторов в которых в настройках используются всплывающее окно с выбором вариантов https://c.mql4.com/i/docs/ru/enumasinput.png

Как прописать iCustom с выбранным элементом?


Пытался напрямую писать значение, допустим пятницы

iCustom(Symbol(),Period(),"test",5,0);

Индикатор применялся с дефолтными значениями

 
Vasili Taucci:
Добрый день.
Столкнулся с проблемой, не знаю как решить:
Есть пара индикаторов в которых в настройках используются всплывающее окно с выбором вариантов https://c.mql4.com/i/docs/ru/enumasinput.png
Как прописать iCustom с выбранным элементом?
Пытался напрямую писать значение, допустим пятницы
iCustom(Symbol(),Period(),"test",5,0);
Индикатор применялся с дефолтными значениями

enum позволяет использовать любые цифровые значения, например:

enum intervals  // перечисление именованных констант 
   { 
    month=1,     // интервал в один месяц 
    two_months,  // два месяца 
    quarter,     // три месяца - квартал 
    halfyear=6,  // полугодие 
    year=12,     // год - 12 месяцев 
   };

Возможно, например, автор применил значения 101, 102, 103, ...
Попробуйте написать скрипт, вызывающий индикатор в цикле с параметром в широком диапазоне

 
enum enTimeFrames
{
   tf_cu  = PERIOD_CURRENT, // Current time frame
   tf_m1  = PERIOD_M1,      // 1 minute
   tf_m5  = PERIOD_M5,      // 5 minutes
   tf_m15 = PERIOD_M15,     // 15 minutes
   tf_m30 = PERIOD_M30,     // 30 minutes
   tf_h1  = PERIOD_H1,      // 1 hour
   tf_h4  = PERIOD_H4,      // 4 hours
   tf_d1  = PERIOD_D1,      // Daily
   tf_w1  = PERIOD_W1,      // Weekly
   tf_mn1 = PERIOD_MN1,     // Monthly
   tf_n1  = -1,             // First higher time frame
   tf_n2  = -2,             // Second higher time frame
   tf_n3  = -3              // Third higher time frame
};

extern enTimeFrames    TimeFrame = tf_cu;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   printf(TimeFrame);
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+


В советнике: 


double hhh = 0;
   for(int i = 0; i <= 500; i++){
      hhh = iCustom(Symbol(),Period(),"test",i,0);
   }

выводит 0 (один раз)

Если вместо i ввести 1,5 или 15 - так же выводит 0


Это я пытаюсь для проверки создать пример.

 
Vasili Taucci:


В советнике: 


выводит 0 (один раз)

Если вместо i ввести 1,5 или 15 - так же выводит 0


Это я пытаюсь для проверки создать пример.

Вам описание энума известно или нет? Если надо найти то перебором. посмотрите руками добавив индюк на чарт значение индикатора на 1-м баре при разных выборах энум-меню , и пропишите в коде вывод сравнения если близко

double ValueSavedFromChart[5]={сюда пишите что увидели };
double hhh = 0;
   for(int i = -1000 ; i <= 1000; i++){
      hhh = iCustom(Symbol(),Period(),"test",i,1);
        if(hhh!=0.0)
        for(int j = 0; j < 5; j++)
        if(MathAbs(hhh-ValueSavedFromChart[j])<0.01)
                Print(j," case . enum value = ",i);
        ;
   }
 

iCustom(Symbol(),Period(),"test",5,0);

По описанию функции iCustom 5-индекс линии индикатора, 0-индекс бара
т.е. параметры индикатора нужно вставить перед двумя последними параметрами функции

p.s. Разработчикам MQL: в остальных языках программирования переменное кол-во параметров используется в конце списка обязательных параметров

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );
 
Malik Arykov:

iCustom(Symbol(),Period(),"test",5,0);

По описанию функции iCustom 5-индекс линии индикатора, 0-индекс бара
т.е. параметры индикатора нужно вставить перед двумя последними параметрами функции

p.s. Разработчикам MQL: в остальных языках программирования переменное кол-во параметров используется в конце списка обязательных параметров

Вот она, моя глупая ошибка. Надо отдыха больше давать мозгу.


Огромное спасибо всем!

 
Значения перечисления можно получить, сохранив шаблон с индикатором.