Вызывается в индикаторах и экспертах при наступлении периодического события Timer, которое с заданным интервалом времени генерируется терминалом |
- www.mql5.com
Вызывается в индикаторах и экспертах при наступлении периодического события Timer, которое с заданным интервалом времени генерируется терминалом |
не понятно как это соотноситься с тем , что мне надо ограничить OnCalculate. - мне нужны данны что приходят в 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[])
И вообще Мне не нужно чтобы был Timer. - ведь тики иногда могут и по 10k приходить, а иногда и гораздо меньше. OnTimer мне не подходит
Поставьте счетчик входов в Oncalculate() за одну секунду:
static int nCnt = 0; static datetime dtLastSecond = 0; if (dtLastSecond == TimeCurrent()) { ++nCnt; if (nCnt > <сколько раз в секунду>) return; } dtLastSecond = TimeCurrent(); nCnt = 0;P. S. У Вас в теме написано одно, а по факту требуется другое. Вот и угадывают тут люди.
Поставьте счетчик входов в Oncalculate() за одну секунду:
P. S. У Вас в теме написано одно, а по факту требуется другое. Вот и угадывают тут люди.Вот огромное спасибо! Сейчас перформанс протестирую.
А по поводу формулировки - Ну чтобы задать хороший вопрос надо знать половину ответа! А тут в дебрях MT5 я плаваю. Базовые вещи в документации очень поверхностно. И все примеры используют oncalculate без всяких ограничетелей или ontimer - нигде даже не видел упоминания о том , что так будет тормозить при реальной наргузке
p.s. Хмм подумав немного по логике получается что если в секунду придёт 5 тиков, то вычисления отложатся до следующей секунды. Не совсем комильфо. Надо всё таки хотя бы несколько раз в секунду обрабатывать.
Может действительно OnTimer? - но как тогда получать
const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[],
,
Хмм подумав немного по логике получается что если в секунду придёт 5 тиков, то вычисления отложатся до следующей секунды.
Не понял. На чем основан такой вывод?
Код пробовали запускать?
Не понял. На чем основан такой вывод?
Код пробовали запускать?
Да .- Нормально работает. Снизил нагрузку. Спасибо. Насчёт стоп через 5 тиков - протупил
Да .- Нормально работает. Снизил нагрузку. Спасибо. Насчёт стоп через 5 тиков - протупил
У вас там что-то сложное считается, что нужно именно по тикам делать пересчёт?
У вас там что-то сложное считается, что нужно именно по тикам делать пересчёт?
Да как раз не надо в каждом тике , потому что расчётов много и тормозит . Надо несколько раз в секунду (или реже). Засада в том , что OnCalculate вызывается каждый тик. Ну вот и приходиться извращаться
Было бы проще если было бы событие OnNewBar . В общем пока вариант вышепредложенный сработал удовлетворительно на десктопе. Но на VPS не достаточно , вариант Игоря хотя и быстрее, но всё равно десинхронизируется периодечески во время загрузки. Могу конечно попробовать более мощный VPS купить
Но тут я уже понял , что огромная засада с пересчётом на каждый тик - в реале сразу система не справляется, происходит рассинхронзация и прочие глюки.
Да как раз не надо в каждом тике , потому что расчётов много и тормозит . Надо несколько раз в секунду (или реже). Засада в том , что OnCalculate вызывается каждый тик. Ну вот и приходиться извращаться
Было бы проще если было бы событие OnNewBar . В общем пока вариант вышепредложенный сработал удовлетворительно на десктопе. Но на VPS не достаточно , вариант Игоря хотя и быстрее, но всё равно десинхронизируется периодечески во время загрузки. Могу конечно попробовать более мощный VPS купить
Но тут я уже понял , что огромная засада с пересчётом на каждый тик - в реале сразу система не справляется, происходит рассинхронзация и прочие глюки.
Так оно есть
if(rates_total-prev_calculated==0) return(rates_total);
Да как раз не надо в каждом тике , потому что расчётов много и тормозит . Надо несколько раз в секунду (или реже). Засада в том , что OnCalculate вызывается каждый тик. Ну вот и приходиться извращаться
Было бы проще если было бы событие OnNewBar . В общем пока вариант вышепредложенный сработал удовлетворительно на десктопе. Но на VPS не достаточно , вариант Игоря хотя и быстрее, но всё равно десинхронизируется периодечески во время загрузки. Могу конечно попробовать более мощный VPS купить
Но тут я уже понял , что огромная засада с пересчётом на каждый тик - в реале сразу система не справляется, происходит рассинхронзация и прочие глюки.
Что-то не сходится, бары не несколько раз в секунду приходят) и никак не пойму чем не устраивает таймер при такой постановке задачи, наверное вы просто не определились что вам надо в итоге.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
OnCalculate() - Если я правильно понимаю вызывается каждый тик
Проблема - в некоторые периоды количество тиков зашкаливает за 10000 в минуту. Индикатор дико тормозит в эти моменты. И мне не принципально что там в каждом конкрентном тике происходит. Достаточно чтобы вычисления происходили несколько раз в секунду
Не могу понять как это написать