Счетчик на каждом вызове OnCalculate увеличивается. На условии выше - обнуляется.
Когда счетчик равен двум - запуск логики.
Счетчик на каждом вызове OnCalculate увеличивается. На условии выше - обнуляется.
Когда счетчик равен двум - запуск логики.
Не вариант. Как-то проверял принтами старт индикатора. Так он с ходу при запуске терминала выдавал ~10 вызовов OnCalculate (простое подключение индикатора на работающем терминале, не помню поведение). Тут надо что-то другое думать. Может задержку стоит дать 1-2 секунды.
К чему это занудство? При желании любые нестандартные ситуации обходятся. Основная идея - выше.
Alexey Viktorov:
if(rates_total > prev_calculated) // Новый бар есть
это не новый бар, это новый бар ИЛИ подкачка истории ИЛИ обрыв связи...
новый бар лучше классически определять:
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- static datetime lastbar=0; if(prev_calculated==0) { limit=rates_total-1; //--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории lastbar=0; } if(lastbar!=time[1] { lastbar=time[1]; // новый бар }
Не вариант. Как-то проверял принтами старт индикатора. Так он с ходу при запуске терминала выдавал ~10 вызовов OnCalculate (простое подключение индикатора на работающем терминале, не помню поведение). Тут надо что-то другое думать. Может задержку стоит дать 1-2 секунды.
К сожалению Sleep в индикаторах не работает.
это не новый бар, это новый бар ИЛИ подкачка истории ИЛИ обрыв связи...
новый бар лучше классически определять:
Игорь, читайте пожалуйста внимательно
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Alexey Viktorov, 2019.06.08 07:49
Может кто-то уже решал подобную задачу? В индикаторе надо выполнить определённые действия только на втором тике. Первый пропускаем, на втором работаем и спим до появления нового бара.
С новым баром всё предельно просто
if(rates_total > prev_calculated) // Новый бар есть
Но на втором тике сюда уже не зайдёт. А надо. Подкачка пропущенных баров истории не интересует.
Мыслей много, все перепутались и ни одна до конца не складывается.
К чему это занудство? При желании любые нестандартные ситуации обходятся. Основная идея - выше.
intOnCalculate(constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[]) { //--- staticint i = 1; Print("Вызов OnCalculate: ", i); i++; //--- return value of prev_calculated for next call return(rates_total); }При старте на работающем терминале, 1 проход. При перезагрузке терминала 2. А вроде ни чего особенного нет. И сейчас рынок закрыт. Уж точно новых тиков не было.
Счетчик на каждом вызове OnCalculate увеличивается. На условии выше - обнуляется.
Когда счетчик равен двум - запуск логики.
Не сложились у меня все эти кубики.
Первый тик бара. rates_total > prev_calculated входим. Счётчик++
Второй тик бара. Счётчик == 1 входим. Работаем. Счётчик++
Дальше??? Где сбросить счётчик?
Или заклинило где-то в микросхеме моего процессора...
int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[])
Добавьте условие tick_volume[0]>1
Добавьте условие tick_volume[0]>1
Таким образом пропустим первый тик, на втором отработаем. А как пропустить остальные тики до появления следующего бара?
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Может кто-то уже решал подобную задачу? В индикаторе надо выполнить определённые действия только на втором тике. Первый пропускаем, на втором работаем и спим до появления нового бара.
С новым баром всё предельно просто
Но на втором тике сюда уже не зайдёт. А надо. Подкачка пропущенных баров истории не интересует.
Мыслей много, все перепутались и ни одна до конца не складывается.