Советники: New_Bar (условие, определяющее появление нового бара, реализованно в виде микросоветника) - страница 4
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
ровно тоже самое, что я давал здесь (вариант функции - когда используется только текущий ТФ и текущий символ), только с глобальной переменной, а не статической, и не в виде функции, а в теле OnTick.
Статическая переменная по сути тоже самое, что и глобальная, только удобнее, т.к. не "засоряет" шапку и зона видимости только в пределах функции, что безопаснее.
Использование функции в данной ситуации только лишь улучшает читаемость кода, но можно конечно же обойтись и без функции. На скорость не влияет.
Спасибо за мысли.
Доброго времени, коллеги!
Я пишу код только месяц. Но хочу поделится своим способом определения нового бара.
Как по мне это самый коротки вариант.
Подводных камней пока не встретил.
От гуру послушал бы рекомендаций.
Вариантов немалое количество и совсем необязательно всегда делать одинаково. Вот тот-же вариант
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Советники: New_Bar (условие, определяющее появление нового бара, реализованно в виде микросоветника)
Alexey Viktorov, 2022.06.29 12:04
Владимир, вот код
и вот результат работы
Конечно задержка в четверть секунды многовато, но ведь мне надо было показать, что задержка может пропустить первый тик, а задержка может произойти в самый неожиданный момент…
Вариантов немалое количество и совсем необязательно всегда делать одинаково. Вот тот-же вариант
новый бар (вроде как по определению) имеет время открытия (time в нужной кратности) отличное от предыдущего. time бара расставляет терминал и тут ему способствовать только себе вредить.
то есть если сервер отсёк изменение цены bid/ask/last или их объёма или иных прелестей стакана или сделку (то есть пофик чего, кроме операций по конкретному счёту) за кратностью периода - знать новый бар открылся, время пошло.
ВСЁ - есть торговое событие, новая отметка времени, есть открытие бара.
volume в теории может быть 0 или 1 или иное, может быть даже больше прежнего.
Bid (iClose) может не поменяться или быть 0 или EMPTY_VALUE (как и iOpen) - были подобные то-ли баги, то ли специфика настроек серверов
Время должно поменяться. В HFT где входящие слегка вразнобой, тики могут опережаться, там наверное придётся попыхтеть..Но HFT и не про MT
PS> пока не видел, но наверное в жизни встречается (отчего нет) когда время открытия двух соседних баров совпадает. вот только в таких случаях наверное стоит сравнивать volume
PS> пока не видел, но наверное в жизни встречается (отчего нет) когда время открытия двух соседних баров совпадает. вот только в таких случаях наверное стоит сравнивать volume
Для всех тф. Удобно, что переменные времени определяются в функции, а вставляются по ссылке. Переменную нужно только объявить перед вызовом функции, но не нужно присваивать ей значение. Флаг будет тру только на первом тике нового бара, потом будет ложь.
Владимир, это самое плохое решение…
Nikolai Semko #:
Да не нужно здесь сложного кода.
...
Спасибо за волшебный пинок. Действительно, я сильно усложнил то, что можно было сделать проще и, что самое главное, в моём коде пользователю нужно было самостоятельно делать то, что можно было сделать автоматически. Переделал, оставив в качестве интерфейса только функцию IsNewBar()... и еще UpdateNewBar(). Никаких дополнительных переменных или объектов объявлять и создавать не нужно. Да и от UpdateNewBar() можно отказаться, если проверка нового бара гарантированно будет выполняться только в единственном месте (но это потребует небольшой модификации кода)