Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 623
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нет нет,мне нужно это не в тестере а при реальном запуске терминала на чарте - там же это сработает только если в истории меньше максимального количества баров, или я не прав?
И в реальном времени при работе индикатора rates_total и Bars() будут увеличиваться. В OnInit() вы не сможете получить rates_total, т.к. параметр в функцию не передается. Проверку истории нужно в любом случае проводить в OnCalculate().
И в реальном времени при работе индикатора rates_total и Bars() будут увеличиваться. В OnInit() вы не сможете получить rates_total, т.к. параметр в функцию не передается. Проверку истории нужно в любом случае проводить в OnCalculate().
Т.е. нужно сделать отдельно индикатор, где сделать проверку на количество баров и если все ок, то заполнить графический буфер единицей, и соответственно в советнике ждать пока не получим единицу от индикатора, и только после этого продолжать работу, так?
Конечно нет... зачем такие сложности... Давайте еще раз. Какая цель? Получить всю доступную для расчетов историю?
Ситуация такая, для правильной работы советнику нужно единожды произвести расчет на истории. Так вот, бывает так, что при включении терминала с этим советником в наличие есть история и соответственно происходит инициализация и расчет по ней, но эта история может оказаться не вся, а новая подгрузиться после подключения к терминалу.
Я так думаю, что можно отследить конннект с терминалом, потом если он есть, то сделать проверку на изменение последнего бара по HLCO и если оно есть, то ждем, а если в течении х секунд нет, то делаем расчет.
Ситуация такая, для правильной работы советнику нужно единожды произвести расчет на истории. Так вот, бывает так, что при включении терминала с этим советником в наличие есть история и соответственно происходит инициализация и расчет по ней, но эта история может оказаться не вся, а новая подгрузиться после подключения к терминалу.
Я так думаю, что можно отследить конннект с терминалом, потом если он есть, то сделать проверку на изменение последнего бара по HLCO и если оно есть, то ждем, а если в течении х секунд нет, то делаем расчет.
Советник использует какие-либо кастомные (пользовательские) индикаторы?
Например, можно поступить так: проверяете размер истории через Bars(). Далее, смотрите, если Bars() > prev_bars+1 (размер истории на предыдущем тике) - тогда сбрасываете полностью все сохраненные данные и делаете полный пересчет советника с нуля. Эту конструкцию вставить первой в OnTick().
Не надо заморачиваться за коннект к терминалу, паузы и т.п. Самый простой вариант, чаще всего, самый лучший.
Советник использует какие-либо кастомные (пользовательские) индикаторы?
Например, можно поступить так: проверяете размер истории через Bars(). Далее, смотрите, если Bars() > prev_bars+1 (размер истории на предыдущем тике) - тогда сбрасываете полностью все сохраненные данные и делаете полный пересчет советника с нуля. Эту конструкцию вставить первой в OnTick().
Не надо заморачиваться за коннект к терминалу, паузы и т.п. Самый простой вариант, чаще всего, самый лучший.
Советник много чего использует, в том числе и индикаторы.
Я так понимаю, при предложенном варианте перерасчет будет на каждом баре, или я не прав?
Советник много чего использует, в том числе и индикаторы.
Я так понимаю, при предложенном варианте перерасчет будет на каждом баре, или я не прав?
Нет, почему на каждом? Полный пересчет эксперта будет только в том случае, если к истории добавилось более 1 бара! Если добавился 1 бар (образовался новый бар) - полного пересчета не будет.
Если Вы используете индикаторы, а в них есть глобальные переменные, то их нужно обнулять при первом запуске обязательно. Иначе на графике могут появляться артефакты/некорректно отображаться индикаторы.
Нет, почему на каждом? Полный пересчет эксперта будет только в том случае, если к истории добавилось более 1 бара! Если добавился 1 бар (образовался новый бар) - полного пересчета не будет.
Если Вы используете индикаторы, а в них есть глобальные переменные, то их нужно обнулять при первом запуске обязательно. Иначе на графике могут появляться артефакты/некорректно отображаться индикаторы.
double A;
int x, y;
x=100; y=3; A=x/y=33.000