Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай, как пользоваться виджетами на MQL5.community
Алексей
1565
Алексей 2006.03.21 20:09 
На истории я моделировал по открытию бара и функция start вызывалась при начале очередного бара.
На котировках в реальном времени у меня функция start вызывается при каждом новом тике, и не важно к каком графику с таймфеймом прикреплён советник. Я подумал, что надо, просто, в самом начале функции start делать проверку текущего колличества баров с запомненным в глобальной переменной, и если они равны, то выход из функции start, а если не равны то сохраняем новое количество баров в глобальное переменной и идем выполнять страдегию для очередного нового бара.
Я думаю это будет работать, но может быть есть другие подходы или даже специальные функции для этого?
Andrey Khatimlianskii
52247
Andrey Khatimlianskii 2006.03.21 20:29  
Это стандартное решение ;)
Что-то типа:
datetime prevtime = 0; int start() { if ( Time[0] <= prevtime ) { return(0); } prevtime = Time[0]; .............. .............. }
Юрий Макаров
358
Юрий Макаров 2006.03.22 10:57  
int _prevTime = 0; int start() { int curTime = Time[0]; if (_prevTime != curTime) { newBar(); prevTime = curTime; } newTick(); } int newTick() { // Вызывается на каждом тике .......................... } int newBar() { // Вызывается в начале нового бара .......................... }
Алексей
1565
Алексей 2006.03.22 11:55  
Да, сравнение времени нулевого бара 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
52247
Andrey Khatimlianskii 2006.03.22 12:20  
elritmo:
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)
С барами могут быть проблемы.
Насколько я помню, если Bars становится больше максимального кол-ва баров (задаётся в настройках), то график подрезается слева, и, соответственно, меняется значение Bars.
С Time[0] надёжнее ;)
Rashid Umarov
Админ
6602
Rashid Umarov 2006.03.22 13:00  
komposter:
elritmo:
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)
С барами могут быть проблемы.
Насколько я помню, если Bars становится больше максимального кол-ва баров (задаётся в настройках), то график подрезается слева, и, соответственно, меняется значение Bars.
С Time[0] надёжнее ;)
Теоретически, согласен с этим, но у меня все индикаторы привязаны к Bars и никаких багов не замечал. Хотя , возможно стоит сделать дублирующие индикаторы(завязанные на Time[0]) и посмотреть - будут ли отклонения между ними. Поэтому ни опровергнуть ни подтвердить не могу :)
Алексей
1565
Алексей 2006.03.22 14:10  
komposter:
elritmo:
Да, сравнение времени нулевого бара Time[0] с уже сохранённым я думаю полностью идентично сравнению колличества баров Bars включая нулевой с запомненным prevBars. То есть, как только меняется time[0], то и значение Bars меняется. Или может быть значение Bars меняется при приходе первого тика новой нулевой свечи, а time[0] меняется чётко по завершению предыдушего бара и первой секундой нового нулевого бара?
Кажется я зарываюсь, как будто моя стратегия должна рассчитывать полёт корабля на луну :)
С барами могут быть проблемы.
Насколько я помню, если Bars становится больше максимального кол-ва баров (задаётся в настройках), то график подрезается слева, и, соответственно, меняется значение Bars.
С Time[0] надёжнее ;)
О, а это полезное замечание. Я что то об этом не подумал что значение bars уменьшиться, если переполнится лимит и старые в истории выкинутся. Но, впринципе, такое будет происходить редко конечно же. Но неприятности на реале точно не нужны из-за этого!
Andrey Khatimlianskii
52247
Andrey Khatimlianskii 2006.03.22 15:12  
Rosh, если проверишь, скажи. Чтоб и мы имели в виду )
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий