Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1307

 
Igor Makanu:

... а потом через месяц будешь пытаться понять чтобы это значило )))

если писать такой уж код, то хотя бы в int приведите 

так хоть понять можно, что автор получит на выходе

...хотя извращение еще то ))))

Зачем в int переводить? Ведь в mql5, начиная с Н1 значение перечисления не равно количеству минут. И на мой взгляд наоборот внесёт сплошные непонятки.

 
Alexey Viktorov:

Зачем в int переводить? Ведь в mql5, начиная с Н1 значение перечисления не равно количеству минут. И на мой взгляд наоборот внесёт сплошные непонятки.

потому что enum это именованные 4-х байтные константы = int

а не количество минут

 
Vladimir Karputov:

Вопрос 1: ЗАЧЕМ создавать своё перечисление, если есть стандартное ENUM_TIMEFRAMES

Ответ))   Нарисовав графический объект на 30м графике в имени объекта есть подстрока М30 говорящая о том где этот объект создан, и при записи данных объекта в массив double, с помощью разбивки имени на подстроки, сравниваю 0индекс массива с разбитым именем,  путем перебора  с  массивом 

//____________________string Массив таймфреймов______________________________
   NameFrame_Trend_Line[1]="M1";
   NameFrame_Trend_Line[2]="M5";
   NameFrame_Trend_Line[3]="M15";
   NameFrame_Trend_Line[4]="M30";
   NameFrame_Trend_Line[5]="H1";
   NameFrame_Trend_Line[6]="H4";
   NameFrame_Trend_Line[7]="Daily";
   NameFrame_Trend_Line[8]="Weekly";
   NameFrame_Trend_Line[9]="Monthly"; 

Выяснив индекс равной строки в массиве 

NameFrame_Trend_Line

ассоциирую индекс с массивом int 

//___________________int Массив таймфреймов__________________________________________
   TimeFrame[1]=1;
   TimeFrame[2]=5;
   TimeFrame[3]=15;
   TimeFrame[4]=30;
   TimeFrame[5]=60;
   TimeFrame[6]=240;
   TimeFrame[7]=1440;
   TimeFrame[8]=10080;
   TimeFrame[9]=43200;

полученnое значение пишу в массив double, хранящего характеристики граф. объектов.   Далее для отслеживания пробоя, закрепления, и теста линии использую метод, в который нужно из записанного double массива передавать параметр таймфрейма, так как линии созданы на разных таймфреймах, расчет пробоя, закрепления, теста, должен рассчитываться согласно тайму на котором эти объекты созданы, вне зависимости от того какой период стоит на графике в данный момент.   Планировал ассоциировать значение массива 

TimeFrame

записанного в массив характеристик граф. объектов, вытаскивать по индексу из массива

   enum frame1 // перечисление именованных констант
     {
      PERIOD_M1,
      PERIOD_M5,
      PERIOD_M15,
      PERIOD_M30,
      PERIOD_H1,
      PERIOD_H4,
      PERIOD_D1,
      PERIOD_W1,
      PERIOD_MN1
     };
и передавать в метод расчёта пробоя, закрепления и теста. 
 
Igor Makanu:

потому что enum это именованные 4-х байтные константы = int

а не количество минут

И что? А в перечислении ENUM_TIMEFRAMES они имеют что-то другое? Или есть опасение нехватки памяти? Я не умею так заморачиваться…


ps; Ах как медленно я набираю текст…)))) Пока я набирал одну строку Kira27 набрал вон сколько……… И что-то я подозреваю, это будет использоваться в mql4.

 
Всем откликнувшимся Огромное спасибо!!!   Буду пробовать ваши варианты!
 
Alexey Viktorov:

Если сделаете такое перечисление

то можно будет попробовать написать так

Вы как всегда предложили лучший способ решения моей задачи!

 
Alexey Viktorov:

Зачем в int переводить? Ведь в mql5, начиная с Н1 значение перечисления не равно количеству минут. И на мой взгляд наоборот внесёт сплошные непонятки.

Ваш способ кажется тоже работоспособен!  Спасибо!!!

 
Alexey Viktorov:

И что? А в перечислении ENUM_TIMEFRAMES они имеют что-то другое? Или есть опасение нехватки памяти? Я не умею так заморачиваться…


ps; Ах как медленно я набираю текст…)))) Пока я набирал одну строку Kira27 набрал вон сколько……… И что-то я подозреваю, это будет использоваться в mql4.

В MQL5  )))

 
Вот скрипт для пробы, пашет)))
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   enum frame1 // перечисление именованных констант
     {
      m1  = (int)PERIOD_M1,
      m5  = (int)PERIOD_M5,
      m15 = (int)PERIOD_M15,
      m30 = (int)PERIOD_M30,
      h1  = (int)PERIOD_H1,
      h4  = (int)PERIOD_H4,
      d1  = (int)PERIOD_D1,
      W1  = (int)PERIOD_W1,
      MN1 = (int)PERIOD_MN1
     };
   double T = iHigh(NULL,(ENUM_TIMEFRAMES) d1,0);

   Alert("Frame= ", (ENUM_TIMEFRAMES)  d1," iHigh= ",T);

  }

результат такой      Хотя интовое значения дня в минутах 1440.  Но работает, хай верно указывает.

 
Alexey Viktorov:

И что? А в перечислении ENUM_TIMEFRAMES они имеют что-то другое? Или есть опасение нехватки памяти? Я не умею так заморачиваться…


ps; Ах как медленно я набираю текст…)))) Пока я набирал одну строку Kira27 набрал вон сколько……… И что-то я подозреваю, это будет использоваться в mql4.

Ваш способ даёт тот же результат)))  

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   enum frame1 // перечисление именованных констант
     {
      m1  = PERIOD_M1,
      m5  = PERIOD_M5,
      m15 = PERIOD_M15,
      m30 = PERIOD_M30,
      h1  = PERIOD_H1,
      h4  = PERIOD_H4,
      d1  = PERIOD_D1,
      W1  = PERIOD_W1,
      MN1 = PERIOD_MN1
     };
 
   double T = iHigh(NULL,(ENUM_TIMEFRAMES) d1,0);
   
   Alert("Frame= ", (ENUM_TIMEFRAMES)  d1," iHigh= ",T);
  }