Скачать MetaTrader 5

Есть ли встроенный механизм проверки завершения очередного бара ...?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Алексей
1563
Алексей  
На истории я моделировал по открытию бара и функция start вызывалась при начале очередного бара.
На котировках в реальном времени у меня функция start вызывается при каждом новом тике, и не важно к каком графику с таймфеймом прикреплён советник. Я подумал, что надо, просто, в самом начале функции start делать проверку текущего колличества баров с запомненным в глобальной переменной, и если они равны, то выход из функции start, а если не равны то сохраняем новое количество баров в глобальное переменной и идем выполнять страдегию для очередного нового бара.
Я думаю это будет работать, но может быть есть другие подходы или даже специальные функции для этого?
Andrey Khatimlianskii
58955
Andrey Khatimlianskii  
Это стандартное решение ;)
Что-то типа:
datetime prevtime = 0; int start() { if ( Time[0] <= prevtime ) { return(0); } prevtime = Time[0]; .............. .............. }
Юрий Макаров
358
Юрий Макаров  
int _prevTime = 0; int start() { int curTime = Time[0]; if (_prevTime != curTime) { newBar(); prevTime = curTime; } newTick(); } int newTick() { // Вызывается на каждом тике .......................... } int newBar() { // Вызывается в начале нового бара .......................... }
Алексей
1563
Алексей  
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)

int prevBars = 0; int start() { if (prevBars != Bars) { newBar(); prevBars = Bars; } newTick(); } int newTick() { // Вызывается на каждом тике .......................... } int newBar() { // Вызывается в начале нового бара .......................... }
Andrey Khatimlianskii
58955
Andrey Khatimlianskii  
elritmo:
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)
С барами могут быть проблемы.
Насколько я помню, если Bars становится больше максимального кол-ва баров (задаётся в настройках), то график подрезается слева, и, соответственно, меняется значение Bars.
С Time[0] надёжнее ;)
Rashid Umarov
Админ
12738
Rashid Umarov  
komposter:
elritmo:
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)
С барами могут быть проблемы.
Насколько я помню, если Bars становится больше максимального кол-ва баров (задаётся в настройках), то график подрезается слева, и, соответственно, меняется значение Bars.
С Time[0] надёжнее ;)
Теоретически, согласен с этим, но у меня все индикаторы привязаны к Bars и никаких багов не замечал. Хотя , возможно стоит сделать дублирующие индикаторы(завязанные на Time[0]) и посмотреть - будут ли отклонения между ними. Поэтому ни опровергнуть ни подтвердить не могу :)
Алексей
1563
Алексей  
komposter:
elritmo:
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)
С барами могут быть проблемы.
Насколько я помню, если Bars становится больше максимального кол-ва баров (задаётся в настройках), то график подрезается слева, и, соответственно, меняется значение Bars.
С Time[0] надёжнее ;)
О, а это полезное замечание. Я что то об этом не подумал что значение bars уменьшиться, если переполнится лимит и старые в истории выкинутся. Но, впринципе, такое будет происходить редко конечно же. Но неприятности на реале точно не нужны из-за этого!
Andrey Khatimlianskii
58955
Andrey Khatimlianskii  
Rosh, если проверишь, скажи. Чтоб и мы имели в виду )
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий