Всё зависит от того, какая логика заложена в пользовательский индикатор. В принципе, может и раз в сутки пересчитывать свои значения, пропуская все остальные тики. По воле автора, так сказать.
В принципе, некоторые пытаются использовать такой чудовищный подход: создать копию индикатора через iCustom, скопировать нужные данные, уничтожить копию индикатора. По мере необходимости процедуру повторяют.
..Ещё есть функция OnTimer(). Сам с ней не работал, но, может быть, Вам удастся её скомпоновать под свою задачу.
Спасибо. Так и думал. OnTimer не подходит.
Есть ситуация, когда индикатор на M5, но обращение к нему происходит раз в час к примеру. Получается, что индикатор будет рассчитываться в советнике в холостую каждые 5 минут ради вызова его раз в час. Поэтому и интересуюсь - нет ли возможности приостановить пересчет индикатора.
Есть ситуация, когда индикатор на M5, но обращение к нему происходит раз в час к примеру. Получается, что индикатор будет рассчитываться в советнике в холостую каждые 5 минут ради вызова его раз в час.
Yedelkin: А переписать индикатор так, чтоб и он рассчитывался ежечасно, не получается?
торговля идет на M5. Неизвестно, когда будет вызов индикатора. Может быть раз в два часа, а может быть три раза за час. Индикатор используется для подтверждения решения о сделке.
C появлением новой версии языка MQL, не только изменился подход к работе с индикаторами, но и появились новые способы создания индикаторов. Кроме того, появилась дополнительная гибкость при работе с индикаторными буферами - теперь вы можете самостоятельно указать нужное направление индексации и получать ровно столько значений индикатора, сколько вам требуется. В этой статье рассмотрены базовые методы вызова индикаторов и получения данных из индикаторных буферов.
masharov: торговля идет на M5. Неизвестно, когда будет вызов индикатора. Может быть раз в два часа, а может быть три раза за час. Индикатор используется для подтверждения решения о сделке.
Логика понятна. Я в таких случаях делал тупо и сердито: блок расчётов из индикатора переносил непосредственно в эксперт. Т.е. вместо внешнего источника данных (индикатора) эксперт пользовался одной из своих функций - той, которая воспроизводила расчётный алгоритм индикатора. В таком случае эта функция вызывалась по мере необходимости, с полным пересчётом нужных значений.
1)Что делать с ошибками типа TRADE_RETCODE_LOCKED, TRADE_RETCODE_FROZEN и в каком случае блокируется запрос или морозится позиция/ордер?
2)Также интересно, что делать с TRADE_RETCODE_INVALID_FILL и в каком случае она возникает?
1) Посмотрите поиском по форуму. С год назад обсуждалось.
2) Смотрите в Справочнике ENUM_ORDER_TYPE_FILLING. Вероятно, несоответствие в торговом запросе заданного "типа ордера по исполнению" режиму исполнения и приведёт к указанному коду возврата.
Например, ORDER_FILLING_FOK и SYMBOL_TRADE_EXECUTION_MARKET.
Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?
Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ?
Если я правильно Вас понял, то ограничить расчёты на последующих тиках можно попробовать по примеру из справки по iFractals (см. множественные условия в OnCalculate).
Ещё, вероятно, можно флагировать в OnCalculate через true первичное выполнение индикаторных расчётов на всех необходимых барах и проверять серверное время терминала, а по наступлению оного с необходимым шагом t сбрасывать флаг в false, тем самым разрешив перерасчёт, и снова ставить в true... и так далее.
Ну или даже так: написать внешнюю функцию с расчётами, вызвать её в OnInit, где она отработает единожды при первом запуске индикатора (а также при смене ТФ и т. п., что происходит по инициативе пользователя), а затем эту же функцию вызывать в OnCalculate вторым способом (по наступлению заданного времени на сервере и флагированием).
Но первый способ всё же хорош тем, что не просто не грузит процессор полными перерасчётами (зачастую ни к каким новым результатам не ведущими вовсе) на каждом тике, но даже не будет делать полные перерасчёты через заданный интервал времени, а лишь будет обсчитывать самые новые бары (если на каждом тике, то по одному новому, а если раз в t, то несколько накопившихся за это время). ...Хотя этот вариант лучше уточнить лично, могу ошибаться... К тому же всё зависит от конкретной цели индикатора. Если он зависит от большой или даже всей истории рынка, то от пересчётов всей истории никуда не деться.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Всё зависит от того, какая логика заложена в пользовательский индикатор. В принципе, может и раз в сутки пересчитывать свои значения, пропуская все остальные тики. По воле автора, так сказать.
В принципе, некоторые пытаются использовать такой чудовищный подход: создать копию индикатора через iCustom, скопировать нужные данные, уничтожить копию индикатора. По мере необходимости процедуру повторяют.
..Ещё есть функция OnTimer(). Сам с ней не работал, но, может быть, Вам удастся её скомпоновать под свою задачу.
Спасибо. Так и думал. OnTimer не подходит.
Есть ситуация, когда индикатор на M5, но обращение к нему происходит раз в час к примеру. Получается, что индикатор будет рассчитываться в советнике в холостую каждые 5 минут ради вызова его раз в час. Поэтому и интересуюсь - нет ли возможности приостановить пересчет индикатора.
Есть ситуация, когда индикатор на M5, но обращение к нему происходит раз в час к примеру. Получается, что индикатор будет рассчитываться в советнике в холостую каждые 5 минут ради вызова его раз в час.
А переписать индикатор так, чтоб и он рассчитывался ежечасно, не получается?
торговля идет на M5. Неизвестно, когда будет вызов индикатора. Может быть раз в два часа, а может быть три раза за час. Индикатор используется для подтверждения решения о сделке.
Здравствуйте! Скажите пожалуйста,
1)Что делать с ошибками типа TRADE_RETCODE_LOCKED, TRADE_RETCODE_FROZEN и в каком случае блокируется запрос или морозится позиция/ордер?
2)Также интересно, что делать с TRADE_RETCODE_INVALID_FILL и в каком случае она возникает?
Здравствуйте! Скажите пожалуйста,
1)Что делать с ошибками типа TRADE_RETCODE_LOCKED, TRADE_RETCODE_FROZEN и в каком случае блокируется запрос или морозится позиция/ордер?
2)Также интересно, что делать с TRADE_RETCODE_INVALID_FILL и в каком случае она возникает?
1) Посмотрите поиском по форуму. С год назад обсуждалось.
2) Смотрите в Справочнике ENUM_ORDER_TYPE_FILLING. Вероятно, несоответствие в торговом запросе заданного "типа ордера по исполнению" режиму исполнения и приведёт к указанному коду возврата.
Например, ORDER_FILLING_FOK и SYMBOL_TRADE_EXECUTION_MARKET.
Возникло подозрение, что если индикатор активирован через iCustom, то он рассчитывается на каждом тике. И это не зависит от обращений к нему через CopyBuffer. Это верно?
Если верно, то можно ли отключить пересчет индикатора и включить только перед обращением к CopyBuffer ?
Если я правильно Вас понял, то ограничить расчёты на последующих тиках можно попробовать по примеру из справки по iFractals (см. множественные условия в OnCalculate).
Ещё, вероятно, можно флагировать в OnCalculate через true первичное выполнение индикаторных расчётов на всех необходимых барах и проверять серверное время терминала, а по наступлению оного с необходимым шагом t сбрасывать флаг в false, тем самым разрешив перерасчёт, и снова ставить в true... и так далее.
Ну или даже так: написать внешнюю функцию с расчётами, вызвать её в OnInit, где она отработает единожды при первом запуске индикатора (а также при смене ТФ и т. п., что происходит по инициативе пользователя), а затем эту же функцию вызывать в OnCalculate вторым способом (по наступлению заданного времени на сервере и флагированием).
Но первый способ всё же хорош тем, что не просто не грузит процессор полными перерасчётами (зачастую ни к каким новым результатам не ведущими вовсе) на каждом тике, но даже не будет делать полные перерасчёты через заданный интервал времени, а лишь будет обсчитывать самые новые бары (если на каждом тике, то по одному новому, а если раз в t, то несколько накопившихся за это время). ...Хотя этот вариант лучше уточнить лично, могу ошибаться... К тому же всё зависит от конкретной цели индикатора. Если он зависит от большой или даже всей истории рынка, то от пересчётов всей истории никуда не деться.
Не понял юмора шутки (пишу индикатор, хотя без разницы):
Компилируется без ошибок и предупреждений.
Компилируется с 1 error(s), 0 warning(s): 'elements' - invalid index value.
Что тут может быть мимо очевидного здравого смысла??
Что тут может быть мимо очевидного здравого смысла??
число элементов массива задается константой
если число элементов заранее не известно, то чтоб задавать размер с помощью переменных пользуйтесь ArrayResize.
Это азы c++.
поэтому или