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

 
Roman:

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

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

Потому, что предопределённая переменная _Period выводит значение, которое:

В переменной _Period хранится значение таймфрейма текущего графика.

А этот таймфрейм определяется значением константы из перечисления ENUM_TIMEFRAMES, соответствующей периоду графика.

Ладно, разбирайтесь:

//+------------------------------------------------------------------+
//|                                         TestTimeframe_Period.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                             https://mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://mql5.com/ru/users/artmedia70"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print
     (
      "Значение предопределённой переменной _Period на графике ",TimeframeDescription(Period())," = ",(string)(int)_Period,"\n",
      "Значение константы перечисления ENUM_TIMEFRAMES ",EnumToString(Period())," = ",(string)(int)Period(),"\n",
      "Период графика, соответствующий константе перечисления ENUM_TIMEFRAMES ",EnumToString(Period()),", со значением ",(string)(int)Period()," = ",TimeframeDescription(Period())
     );
  }
//+------------------------------------------------------------------+
//| Возвращает описание таймфрейма                                   |
//+------------------------------------------------------------------+
string TimeframeDescription(const ENUM_TIMEFRAMES timeframe)
  {
   return StringSubstr(EnumToString((timeframe>PERIOD_CURRENT ? timeframe : (ENUM_TIMEFRAMES)Period())),7);
  }
//+------------------------------------------------------------------+
Документация по MQL5: Предопределенные переменные / _Period
Документация по MQL5: Предопределенные переменные / _Period
  • www.mql5.com
Предопределенные переменные / _Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

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

Баг? Т.е., наличие таймфреймов М1, М2, М3, М4, М5, М6, а потом сразу М10 - это тоже по-вашему баг?

Почему не просите разработчиков устранить баги отсутствия периодов

М7, М8, М9, М11, М13, М14, М16, М17, М18, М19, М21, М22, М23, М24, М25, М26, М27, М28, М29, М31 - М59, Н1_М1, Н1_М2, Н1_М3, --- , ---, ---, СТО_ТЫЩ_ЛЕТ ?

Почему багом вдруг стало внутреннее представление констант перечислений?

Вас не напрягает отсутствие трёхсотрублёвых купюр?

 
Artyom Trishkin:

Баг? Т.е., наличие таймфреймов М1, М2, М3, М4, М5, М6, а потом сразу М10 - это тоже по-вашему баг?

Почему не просите разработчиков устранить баги отсутствия периодов

М7, М8, М9, М11, М13, М14, М16, М17, М18, М19, М21, М22, М23, М24, М25, М26, М27, М28, М29, М31 - М59, Н1_М1, Н1_М2, Н1_М3, --- , ---, ---, СТО_ТЫЩ_ЛЕТ ?

Почему багом вдруг стало внутреннее представление констант перечислений?

Вас не напрягает отсутствие трёхсотрублёвых купюр?

Скажите мне пожалуйста, значение 16385 соответствует значению периода графика H1 ?
И все остальные значения периодов, выше H1.
Вам Игорь в двоичном формате даже распринтовал, а следующим идёт мой пост, где то же самое только в другом формате.

Вы совсем в другую степь полезли, не приплетайте того, о чём не было речи.
Меня напрягает то, что модератор замыливает баги, своими костылями!
А не способствует их устранению.

Вот вам ещё один баг.

Print(PeriodSeconds(PERIOD_MN1)*1000);

И тоже самое на MN графике.

Print(PeriodSeconds(PERIOD_CURRENT)*1000);
 
Roman:

Скажите мне пожалуйста, значение 16385 соответствует значению периода графика H1 ?
И все остальные значения периодов, выше H1.

Вы совсем в другую степь полезли, не приплетайте того, о чём не было речи.
Меня напрягает, то что модератор замыливает баги, своими костылями!
А не способствует их устранению.
Вот вам ещё один баг.

У вас нет времени на изучение справки?

Всё, что вам не понятно - всё это баги, которые разработчики по-вашему должны исправить?

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

Print((string)(uint)PeriodSeconds(PERIOD_MN1)*1000)

Зачем переполняете int ?

Так распечатайте себе:

Print
  (
   "(int)PeriodSeconds(PERIOD_MN1) = ",(int)PeriodSeconds(PERIOD_MN1),
   ", (ulong)PeriodSeconds(PERIOD_MN1)*1000 = ",(ulong)PeriodSeconds(PERIOD_MN1)*1000,
   ", INT_MAX = ",INT_MAX
  );

и подправьте, пожалуйста баг в собственном мышлении.

А уж если вам нужны милисекунды, то представляйте их типом ulong.

 
Artyom Trishkin:

У вас нет времени на изучение справки?

Всё, что вам не понятно - всё это баги, которые разработчики по-вашему должны исправить?

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

Зачем переполняете int ?

Так распечатайте себе:

и подправьте, пожалуйста баг в собственном мышлении.

С переполнением, да, погорячился, не учёл этот момент. Тут спасибо.
Но ваш пример не компилируется.

А так принтует нормально, вот и гадай когда нужен стринг а когда нет ))

Print((uint)PeriodSeconds(PERIOD_MN1)*1000);


А по по поводу переменной _Period, там точно что то не то выше H1.

 
Roman:

Скажите мне пожалуйста, значение 16385 соответствует значению периода графика H1 ?
И все остальные значения периодов, выше H1.
Вам Игорь в двоичном формате даже распринтовал, а следующим идёт мой пост, где то же самое только в другом формате.

Вы совсем в другую степь полезли, не приплетайте того, о чём не было речи.
Меня напрягает то, что модератор замыливает баги, своими костылями!
А не способствует их устранению.

Вот вам ещё один баг.

И тоже самое на MN графике.

1. Да, соответствует значению константы.

2. И все остальные - соответствуют значению константы.

Попробуйте распечатать

Print("SYMBOL_BID=",SYMBOL_BID); 

Как думаете, вам будет выведена текущая цена Bid, или что-то другое?

А почему тогда вы ожидаете от 

Print("PERIOD_H1=",PERIOD_H1);

что вам будет выведено что-то типа Н1 или 60 ?

И Игорь не мне распринтовал, а показал вам внутреннее представление значений констант перечисления ENUM_TIMEFRAMES в двоичном формате.

Вы утверждали, что показанные вами значения констант перечисления являются багом, а моё вам объяснение - костылями. Это не так - это просто ваше незнание простых азов.

За сим откланяюсь - изучайте азы и, пожалуйста, не нужно своё незнание облачать в баги и костыли от разработчиков - нехорошо это - набрасывать пустое. Да и слова вы выбираете какие-то "тугие", при этом забывая, что оказывается это вы чего-то не знаете.

Разберётесь, а наброс ваш так и останется для других таких же "знающих". Вредительство какое-то...

 
Roman:

С переполнением, да, погорячился, не учёл этот момент. Тут спасибо.
Но ваш пример не компилируется.

А так принтует нормально, вот и гадай когда нужен стринг а когда нет ))


А по по поводу переменной _Period, там точно что то не то выше H1.

Т.е., что значит "не компилируется"? Скопировал с форума в скрипт и скомпилировал:


И переменная _Period возвращает значение константы перечисления ENUM_TIMEFRAMES текущего графика как int. Т.е., не количество минут, не количество секунд, а именно значение константы из ENUM_TIMEFRAMES, соответствующей текущему графику.

 
Roman:

А так принтует нормально, вот и гадай когда нужен стринг а когда нет ))

А гадать не нужно. Нужно думать и понимать что, и для чего делается. Когда нужно что-то писать, а когда не обязательно.

 
Artyom Trishkin:

А почему тогда вы ожидаете от 

что вам будет выведено что-то типа Н1 или 60 ?

Потому что минутные таймфреймы которые ниже H1, возвращают корректные значения.
Как и описано в справке, возвращают значение таймфрейма, а не от балды константы.

Print("PERIOD_M1=",PERIOD_M1);
Print("PERIOD_M5=",PERIOD_M5);
Print("PERIOD_M30=",PERIOD_M30);
Print("PERIOD_H1=",PERIOD_H1);
2020.04.10 03:19:50.600 VP (EPM20,H4)   PERIOD_M1=1
2020.04.10 03:19:50.600 VP (EPM20,H4)   PERIOD_M5=5
2020.04.10 03:19:50.600 VP (EPM20,H4)   PERIOD_M30=30
2020.04.10 03:19:50.600 VP (EPM20,H4)   PERIOD_H1=16385

По этому логично ожидать этого и от старших таймфреймов, продолжая последовательность в минутах.
PERIOD_H1=60

и т.д.

 
Roman:

Потому что минутные таймфреймы которые ниже H1, возвращают корректные значения.
Как и описано в справке, возвращают значение таймфрейма, а не от балды константы.

По этому логично ожидать этого и от старших таймфреймов, продолжая последовательность в минутах.
PERIOD_H1=60

и т.д.

... продолжая продолжать злые песни сочинять, коммунизма ожидать, тренчать-бренчать и *** собирать...

Логично не использовать значения констант в ожидании возврата ожидаемых "логичных" величин.

Ещё раз (в последний) напомню о константе SYMBOL_BID. "Логично" же ожидать от неё значение текущей цены Bid вместо почему-то 1, да? Или всё же нет?

Всё. Я устал от ликбеза, да и не брался за обучение вроде бы как.

Причина обращения: