Скачать MetaTrader 5

Библиотеки: IsNewBar

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Automated-Trading
Админ
101250
Automated-Trading  

IsNewBar:

Класс СIsNewBar для определения момента времени, когда происходит смена бара. Обычно для таких вещей используется не класс, а просто функция IsNewBar(). Но такая функция содержит статическую переменную, и по этой причине нельзя использовать несколько вызовов этой функции. Для многократного использования такой функции в коде эксперта гораздо удобнее будет сделать ее членом класса, что и было выполнено в данном случае с помощью библиотеки IsNewBar.mqh.

Автор: Nikolay Kositsin

Lev Ilyukov
1463
Lev Ilyukov  
Я не профи, но по моему этот код ошибочен. Переменная Recount всегда true. И следовательно каждый тик будет воспринят как новый бар. Зачем там вообще эта переменная? Зачем там вообще вызывать CopyClose? Выкладываемые коды вообще проверяются на правильную работу? Если я ошибаюсь. то прошу поправить и объяснить.
Lev Ilyukov
1463
Lev Ilyukov  
lordlev:
Я не профи, но по моему этот код ошибочен. Переменная Recount всегда true. И следовательно каждый тик будет воспринят как новый бар. Зачем там вообще эта переменная? Зачем там вообще вызывать CopyClose? Выкладываемые коды вообще проверяются на правильную работу? Если я ошибаюсь. то прошу поправить и объяснить.
Ещё раз всё перепроверил и нашёл ошибку. В самом прикреплённом файле отсутствует присвоение Recount значения false, а в коде примера всё верно.
Nikolay Kositsin
304908
Nikolay Kositsin  
lordlev:
Ещё раз всё перепроверил и нашёл ошибку. В самом прикреплённом файле отсутствует присвоение Recount значения false, а в коде примера всё верно.
Ну это поправимо!
Prival
4561
Prival  

возможно я и ошибаюсь. но помойму вот так будет правильнее

if(TNew>m_TOld)

 иначе во время подкачки (правки истории) будет неточность работы

Не моглибы Вы пояснить что это и для чего вставлена такая проверка

if(...  && TNew)

 я её не понимаю. Когда это условии истинно, когда ложно? Спасибо 

Dennis Kirichenko
11377
Dennis Kirichenko  


Prival:

Не моглибы Вы пояснить что это и для чего вставлена такая проверка

 я её не понимаю. Когда это условии истинно, когда ложно? Спасибо 

Имхо, это проверка того, что TNew не равно m_TOld и одновременно не равно нулю ( т.е. D'1970.01.01 00:00:00')...

Второе условие, также имхо, проверяет, что функция

datetime TNew=datetime(SeriesInfoInteger(symbol,timeframe,SERIES_LASTBAR_DATE));

вернула что-то отличное от нуля... 

Сейчас запустил скрипт с этой функцией - вернула мне как раз 0. Может из-за выходных.

Dmitriy Skub
11760
Dmitriy Skub  
Prival:

Не моглибы Вы пояснить что это и для чего вставлена такая проверка

 я её не понимаю. Когда это условии истинно, когда ложно? Спасибо 

Проверка на ноль нужна, чтобы сразу при старте и первой проверке условия не получить начало нового бара (не зависимо от того, сколько прошло времени с его открытия).
Nikolay Kositsin
304908
Nikolay Kositsin  
Prival:

возможно я и ошибаюсь. но помойму вот так будет правильнее

 иначе во время подкачки (правки истории) будет неточность работы

Не моглибы Вы пояснить что это и для чего вставлена такая проверка

 я её не понимаю. Когда это условии истинно, когда ложно? Спасибо 

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

if(TNew>m_TOld && TNew)

хотя при подкачке истории всё-равно TNew будет равно нулю. Ноль в переменную TNew может попасть в любой момент времени, так что делать проверку на отсутствие нуля следует всё время.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий