Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1116

 
Roman:

В справке говорится, что должно возвращаться значение таймфрейма, а не идентификатор преобразованный с помощью EnumToString()
Переменная _Period возвращает int.
ENUM_TIMEFRAMES  Period() тоже подразумевает, что возвращается int.

Подразумеваете только вы. На самом же деле Period() возвращает значение перечисления ENUM_TIMEFRAMES.

Если распечатаете величины констант этого перечисления, то увидите уже знакомые вам цифры.

И так было всегда. С момента рождения MQL5.

И в справке чётко написано что именно возвращается:

Значение может быть одним из значений перечисления ENUM_TIMEFRAMES.

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Подразумеваете только вы. На самом же деле Period() возвращает значение перечисления ENUM_TIMEFRAMES.

Если распечатаете величины констант этого перечисления, то увидите уже знакомые вам цифры.

И так было всегда. С момента рождения MQL5.

И в справке чётко написано что именно возвращается:

А перечисление ENUM какой по вашему тип возвращает ?  ))
И в справке чётко говориться
Возвращает значение таймфрейма текущего графика.

Принтаните у себя

Print(PERIOD_M30);
Print(PERIOD_H1);
 
Roman:

А перечисление ENUM какой по вашему тип возвращает ?  ))
И в справке чётко говориться
Возвращает значение таймфрейма текущего графика.

Принтаните у себя

Что вы мне хотите доказать?

Я прекрасно разбираюсь в том, что распечатывается, и какие данные, когда и где возвращаются.

Вам нужно количество минут текущего периода?

получите их так:

PeriodSeconds(Period())/60;

или так:

PeriodSeconds(PERIOD_CURRENT)/60;

или так:

PeriodSeconds()/60;
 
Artyom Trishkin:

Что вы мне хотите доказать?

Вам не чего, я не вам писал о проблеме, а разработчикам.
Принтаните еще на М30, и на H1 и посмотрите разницу.

Print(_Period);
 
Roman:

Вам не чего, я не вам писал о проблеме, а разработчикам.
Принтаните еще на М30, и на H1 и посмотрите разницу.

Это не проблема. И никогда ей не была.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Artyom Trishkin, 2020.04.09 22:11

Что вы мне хотите доказать?

Я прекрасно разбираюсь в том, что распечатывается, и какие данные, когда и где возвращаются.

Вам нужно количество минут текущего периода?

получите их так:

PeriodSeconds(Period())/60;

или так:

PeriodSeconds(PERIOD_CURRENT)/60;

или так:

PeriodSeconds()/60;

 
Roman:

Вам не чего, я не вам писал о проблеме, а разработчикам.
Принтаните еще на М30, и на H1 и посмотрите разницу.

Вы от MQL4 никак не можете отойти?

Сделайте на MQL4 так:

PeriodSeconds(Period())/60;

или так:

PeriodSeconds(PERIOD_CURRENT)/60;

или так:

PeriodSeconds()/60;

и распечатайте получаемые значения.

 
Artyom Trishkin:

Вы от MQL4 никак не можете отойти?

Сделайте на MQL4 так:

или так:

или так:

и распечатайте получаемые значения.

mql4 не пользовался )) и не привыкал. 
Да с какой стати нужно делить ещё на 60 ???
Где об этом сказано в справке?
Это уже ваши костыли, которые обходят баг.
А теперь проверьте свой костыль, на всех таймфреймах

Print(_Period / 60);
 
Roman:

mql4 не пользовался )) и не привыкал. 
Да с какой стати нужно делить ещё на 60 ???
Где об этом сказано в справке?
Это уже ваши костыли, которые обходят баг.

facepalm ...
 
Roman:

Переменная _Period и функция Period() до M30 включительно, выводит значение в минутах.
Если период M1 то 1
Если период M2 то 2
...
Если период M30 то 30

Логично, что часовой период будет 60
двухчасовой 120
трёхчасовой 180
и т.д.

Но начиная с H1 выводит не те значения.

если программа выводит "не те значения", нужно смотреть, что там программа "думает", но думать то она может только в двоичном формате

проверил, так и получилось:

void OnStart()
{

   ENUM_TIMEFRAMES allperiod[] = {PERIOD_CURRENT, PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2,
                                  PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1
                                 };
   for(int i = 0; i < ArraySize(allperiod); i++)
      Print(UintToBinary((uint)allperiod[i]));

}
//+------------------------------------------------------------------+
string UintToBinary(uint n)
{
   string r = "";
   if(n == 0) return("0");
   while(n != 0)
   {
      r = (n % 2 == 0 ? "0" : "1") + r;
      n /= 2;
   }
   return(r);
}
//+------------------------------------------------------------------

2020.04.10 00:38:57.118 tst (EURUSD,H1) 0

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 101

2020.04.10 00:38:57.118 tst (EURUSD,H1) 110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1111

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000011

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000011000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1000000000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100000000000001


 
Artyom Trishkin:
facepalm ...

Действительно рукалицо...

Принт на разных таймфреймах.

Print(_Period);
2020.04.09 23:39:49.963 VP (EPM20,M1)   1
2020.04.09 23:39:53.135 VP (EPM20,M3)   3
2020.04.09 23:39:53.758 VP (EPM20,M5)   5
2020.04.09 23:39:54.377 VP (EPM20,M10)  10
2020.04.09 23:39:55.094 VP (EPM20,M15)  15
2020.04.09 23:39:55.679 VP (EPM20,M30)  30
2020.04.09 23:39:56.384 VP (EPM20,H1)   16385  //Почему не 60 ?
2020.04.09 23:39:57.071 VP (EPM20,H4)   16388  //Почему не 240 ?
2020.04.09 23:39:57.641 VP (EPM20,D1)   16408  //Почему не 1440 ?
2020.04.09 23:39:58.181 VP (EPM20,W1)   32769  и т.д.
2020.04.09 23:39:58.768 VP (EPM20,MN1)  49153