Время начала новой свечи

 
Всем привет. А как можно определить время наступления новой свечи? Знаю что есть время открытия, но тут именно нужно время начала, даже если тика ещё не было, именно первую секунду, через OnTimer. Например если M5 то 20:15:01 или 16:30:01. Это по MQL4
 

в OnTick, OnTrade, OnTimer (вообще во всех без исключения OnXXX)

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

 
Murat Ishakov:
Всем привет. А как можно определить время наступления новой свечи? Знаю что есть время открытия, но тут именно нужно время начала, даже если тика ещё не было, именно первую секунду, через OnTimer. Например если M5 то 20:15:01 или 16:30:01. Это по MQL4

Нет тика, нет и свечи. Новая свеча начинает рисоваться только по появлению первого тика времени этой свечи.

Если-же вы хотите делить минуту на 3-4 части, то-есть по 15-20 секунд, то OnTimer не подходит. В этом случае надо действовать так-же как с определением новой свечи.

 
Alexey Viktorov:

Нет тика, нет и свечи. Новая свеча начинает рисоваться только по появлению первого тика времени этой свечи.

Если-же вы хотите делить минуту на 3-4 части, то-есть по 15-20 секунд, то OnTimer не подходит. В этом случае надо действовать так-же как с определением новой свечи.

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

Прибавляйте к дате последней свечи длительность текущего периода в секундах. Получится время наступления нового отрезка. Только там где есть перерывы во времени могут быть нюансы

 
Yevhenii Levchenko:

Прибавляйте к дате последней свечи длительность текущего периода в секундах. Получится время наступления нового отрезка. Только там где есть перерывы во времени могут быть нюансы

Прибавлять можно, но дата последней свечи не всегда точная. Вот думаю как её округлять
 
Murat Ishakov:
Прибавлять можно, но дата последней свечи не всегда точная. Вот думаю как её округлять

посчитать время начала дня и прибавить сколько нужно отрезков. Только календарные функции

 
Murat Ishakov:
 Вот думаю как её округлять

при инициализации (или при первом вызове)

- получите необходимое время (открытие дня? открытие бара №1 ?) 

- конвертируйте в MqlDateTime и обнулите поля  min и sec

- конвертируйте в datetime   и прибавляйте в дальнейшем необходимое количество секунд - округлять через MqlDateTime больше не нужно

 
Igor Makanu:

при инициализации (или при первом вызове)

- получите необходимое время (открытие дня? открытие бара №1 ?) 

- конвертируйте в MqlDateTime и обнулите поля  min и sec

- конвертируйте в datetime   и прибавляйте в дальнейшем необходимое количество секунд - округлять через MqlDateTime больше не нужно

Зачем правое ухо чесать левым мизинцем? Ведь проще разделить текущее время на 3600 и откинуть дробную часть. Типа так int(TimeCurrent()/PeriodSeconds(PERIOD_M1));

 

del

не хочу очередного бессмысленного холивара без примеров в коде, времени много занимает обсуждение не реализации, а просто чужого мнения

 
Igor Makanu:

прочитайте еще раз первое сообщение топика, Вы предлагаете чесать левое ухо правым мизинцем.... делать то, что будете со своим округлением если период будет кратен 5 или 15 ? - в моем способе автор должен будет просто заполнить поле   min структуры   MqlDateTime  необходимым значением (0 или 5 или 15) 

UPD: забыл =- еще ТФ может быть кратен 30 мин и в MQL5 еще куча минутных ТФ - все равно все решаемо в одной пользовательской функции при инициализации ЕА

Ну так и делите согласно нужному периоду. Я ведь написал PeriodSeconds(PERIOD_M1) , а при желании можно вставить любой. Вы-же предлагаете конвертировать в структуру, менять и конвертировать взад во время. Зачем такое двойное конвертирование если решение гораздо проще?
Причина обращения: