у вас такой сложный языка, надо сообразить, что такое начало таймфрейма?
первый бар в истории, текущий бар минутного графика?
у вас такой сложный языка, надо сообразить, что такое начало таймфрейма?
первый бар в истории, текущий бар минутного графика?
просто: образование нового бара установленного на графике таймфрейма
или закрытие предыдущего бара
или когда последний бар закрыт(сформирован)
последний-значит самый свежий
бар с индексом 1
https://www.mql5.com/ru/articles/159
возможно это поможет, лично я решаю проблему тем или иным способом в зависимости от того, что мне нужно от нового бара или любого другого, обычно бары характеризуются, ценами и обьемами
https://www.mql5.com/ru/articles/81
эта статья не относится к данной теме, но там очень понятно и удобно расписано как вызывать бывшие функции iClose,iOpen,iVolume и т.д.
- 2010.10.04
- Konstantin Gruzdev
- www.mql5.com
просто: образование нового бара установленного на графике таймфрейма
или закрытие предыдущего бара
или когда последний бар закрыт(сформирован)
последний-значит самый свежий
бар с индексом 1
int prev_timestamp = 0; void OnTick() { MqlTick last_tick; //--- if(SymbolInfoTick(Symbol(),last_tick)) { int current_timestamp = last_tick.time / PeriodSeconds(Period()); if (current_timestamp != prev_timestamp) { Print("Новый бар на текущем таймфрейме! Время: " + TimeToString(last_tick.time)); YourMegaHandler(); prev_timestamp = current_timestamp; } else Print("Этот бар мы уже обрабатывали..."); } else Print("SymbolInfoTick() failed, error = ",GetLastError()); }Должно работать как швейцарские часы на любом таймфрейме
Должно работать как швейцарские часы на любом таймфрейме
Спасибо.попробую..
Чего только не приходится изобретать мз за головотяпства разработчиков..
Неужели сложно было пустить необходимую инфу в тиках.неужели не ясно что необходимо пользователям?
Ну и тупизм..
Должно работать как швейцарские часы на любом таймфрейме
Какой то мазохизм... на каждом тике насиловать процессор делением многоразрядного целого числа на период в секундах..
Ладно если это мой процессор а ежели это-VPS ? А процессору ещё надо и алгоритм считать а не только эту байду,которая и так присутствует в терминале ибо в нём и формируются свечи... Кто же смог такое "изобрести" ?
Можно конечно почитать диссертацию на эту тему:
Обработчик события "новый бар"
https://www.mql5.com/ru/articles/159
но почему нельзя было оставить метод применённый в МТ4 а не валить на скриптописателя новые проблемы?
- 2010.10.04
- Konstantin Gruzdev
- www.mql5.com
Написал так:
datetime ntm=TimeCurrent(); MqlDateTime stm; TimeToStruct(ntm,stm); string mmin = stm.min; Comment ( "\n" ," Min = ", mmin, " DB3 = ", DBi[3] );
так вроде полегче будет процессору..хотя-всё равно через жопу..
Какой то мазохизм... на каждом тике насиловать процессор делением многоразрядного целого числа на период в секундах..
В нынешних процессорах это не является мазохизмом. Всего один такт.
Но если у Вас не 64, а 32-битная система, то сначала время приведите к инту, а потом делите (будет всего 2 такта процессора). 32-битный инт пригоден для хранения времени до 2037 года
- www.mql5.com
В нынешних процессорах это не является мазохизмом. Всего один такт.
Но если у Вас не 64, а 32-битная система, то сначала время приведите к инту, а потом делите (будет всего 2 такта процессора). 32-битный инт пригоден для хранения времени до 2037 года
И где же вы такие волшебные процессоры обнаружили ? Может ссылочку дадите?
Пока нашёл только
http://forum.vingrad.ru/topic-88856.html
Операция деления реализуется через многократное вычитание делителя В из делимого А. Это достигается сложением чисел в обратном и дополнительном кодах.
- forum.vingrad.ru
...Кстати определить наличие ордера тоже было просто: order = OrdersTotal();
А в MQL5 это решаемо?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Может кто то знает как найти начало таймфрейма (например минутного) чтобы не гонять всю программу по каждому тику?
В MQL4 всё было просто Tic=Volume[0]; и всего то делов..
Кстати определить наличие ордера тоже было просто: order = OrdersTotal();
А в MQL5 это решаемо?