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

 
-Aleks-:
Мы получим секунды, которые требуется округлить - проблема в округлении.

дык

datetime Day00=86400*(time[n]/86400);//начало дня
и есть округление до начала дня. 86400=24*60*60
 
-Aleks-:

Да не могу я въехать, как это использовать.

Вот второе значение требуется "MqlDateTime&  dt_struct      // структура для принятия значений ", а как этим MqlDateTime пользоваться - не понимаю.

Есть время. У времени есть такие параметры как: год, месяц, день, часы, минуты, секунды и т.д. Вызвав функцию TimeToStruct() Вы раскладываете время на эти составляющие. Далее, например, можно обнулить часы, минуты и секунды - получите начало дня.

MqlDateTime - это тип данных, такой же, как int, bool и т.д. Просто это составной тип, т.е. чтобы получить доступ к его полям (часам, минутам, секундам...) нужно использовать точку. Например: dt_struct.hour - значение часов. Про структуры подробнее https://www.mql5.com/ru/docs/basis/types/classes.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Что означает этот комментарий к ордеру в журнале      skipped as it changes nothing

 
Aleksey Lebedev:

дык

и есть округление до начала дня. 86400=24*60*60
По Вашей формуле мы получим количество дней между текущем баром и отдаленным, но эти дни условны т.е. это может быть 9 часов текущего дня и 1 час позапрошлого дня , тогда разница в секундах составит 122400 , что равняется 1,42 дня - при округлении будет 1 день, а нужно что б было 2.
 
Alexey Kozitsyn:

Есть время. У времени есть такие параметры как: год, месяц, день, часы, минуты, секунды и т.д. Вызвав функцию TimeToStruct() Вы раскладываете время на эти составляющие. Далее, например, можно обнулить часы, минуты и секунды - получите начало дня.

MqlDateTime - это тип данных, такой же, как int, bool и т.д. Просто это составной тип, т.е. чтобы получить доступ к его полям (часам, минутам, секундам...) нужно использовать точку. Например: dt_struct.hour - значение часов. Про структуры подробнее https://www.mql5.com/ru/docs/basis/types/classes.

А как, я извиняюсь, произвести это обнуление?
 
-Aleks-:
По Вашей формуле мы получим количество дней между текущем баром и отдаленным, но эти дни условны т.е. это может быть 9 часов текущего дня и 1 час позапрошлого дня , тогда разница в секундах составит 122400 , что равняется 1,42 дня - при округлении будет 1 день, а нужно что б было 2.

день потеряли, 23ч+24ч+9ч=2 дня 8ч... Эта формула нафих не надо, если требуецо:

Мне необходимо произвести расчет на каждом графике текущего ТФ. Для расчета требуется знать дату верхнего ТФ (дни). Выше я приложил код - смысл в том, что б знать на каждом баре максимальную цену верхнего ТФ на момент открытия бара на текущем ТФ.

Повторюсь:
datetime Day00=86400*(time[n]/86400);//начало дня для time[n]



А ви таки говорите - структуры.. :)

 
Aleksey Lebedev:

день потеряли, 23ч+24ч+9ч=2 дня 8ч... Эта формула нафих не надо, если требуецо:

Повторюсь:



А ви таки говорите - структуры.. :)

Почему у Вас 23 часа - я ж написал 1 час , впрочем суть не меняется

24(позавчера - в час вчера)+24(вчера - в час сегодня)+8 ( после часа сегодня - минус час)=56/24=2,33 т.е. получилось два дня согласны?

 
-Aleks-:

Почему у Вас 23 часа - я ж написал 1 час , впрочем суть не меняется

24(позавчера - в час вчера)+24(вчера - в час сегодня)+8 ( после часа сегодня - минус час)=56/24=2,33 т.е. получилось два дня согласны?

23ч до начала вчерашнего дня+

24ч вчерашний+

9ч сегодня=

2дня 8ч=2,(33)дня

Правильно всё-таки как-то так:

int DayN=time[0]/86400-time[163]/86400;

Неважно, это не нужно)
 
Aleksey Lebedev:

23ч до начала вчерашнего дня+

24ч вчерашний+

9ч сегодня=

2дня 8ч=2,(33)дня

Правильно всё-таки как-то так:

Неважно, это не нужно)

А теперь представим, что не 9 часов сего дня, а 19

 24(позавчера - в час вчера)+24(вчера - в час сегодня)+18 ( после часа сегодня - минус час)=66/24=2,75 т.е. получилось три дня согласны?

Как бы диапазон не изменился дневной, а расчет в течении дня даёт то 2, то 3 дня - в этом беда.

Вариант

 int DayN=time[0]/86400-time[163]/86400;

так же не годится, если мы представим что текущий бар 1 час, а расчетный - 23 часа, в этом случае будет результатом вычисления ноль, а должен быть 1.
 
-Aleks-:
Вариант так же не годится, если мы представим что текущий бар 1 час, а расчетный - 23 часа, в этом случае будет результатом вычисления ноль, а должен быть 1.

Будет 1, оба времени сначала округляются до целого дня, после вычитаются.

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