Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть ссылка на правильное использование iCustom() с учетом этих нюансов ??? А то устал я его проверять и искать в чем же дело.
Посмотрите статью Индикатор от индикатора в MQL5:
Нужна ли инициализация индикаторных буферов?
Массивы в MQL5 не инициализируются по умолчанию каким-либо значением, и это безусловно относится также и к массивам, которые назначаются индикаторным буферам функцией SetIndexBuffer(). Если массив является индикаторным буфером, то его размер в процессе работы будет зависеть от параметра rates_total в обработчике OnCalculate().
Может возникнуть соблазн инициализировать все индикаторные буферы пустым значением EMPTY_VALUE с помощью функции ArrayInitialize(), например, однократно в начале OnCalculate()
...
Уважаемый Rosh - я читал эту статью, но применить ее не смог, так как у меня используется вторая форма вызова OnCalculate, так как мне необходимо время каждого бара, а не только цена.
Причина действительно в том, что в буфере индикатора появляется хлам. И инициализация буфера пустыми значениями ничего не дает, так как в тестере при появлении новых данных буфер индикатора автоматически растет и в нем действительно вначале мусор, а если в индикаторе буфер не заполняется на каждом баре - то мусор так и остается там.
У меня советник работает по таймеру - так намного быстрее почему то, чем по функции OnTick(). Да и в выходные можно тестировать.
Сейчас пытаюсь выяснить что сидит в каждом индикаторном буфере. Сложность заключается еще в том, что один индикатор вызывает другой рассчитывается на основе его значений.
Попробую выделить четкий период и задать буферам размер. Определю причину ложных срабатываний тестера. Эх - жаль в тестере нет отладчика - а так все его ждали и ждут.
У меня советник работает по таймеру - так намного быстрее почему то, чем по функции OnTick(). Да и в выходные можно тестировать.
Есть статья Основы тестирования в MetaTrader 5, где показано:
Были сделаны замеры времени тестирования при различных значениях параметра timer (периочность события Timer). На полученных данных построен график зависимости времени тестирования T от значения периодичности Period.
Хорошо видно, чем меньше параметр timer при инициализации таймера функцией EventSetTimer(timer), тем меньше период (Period) между вызовами обработчика OnTimer(), и тем больше время тестирования T при одних и тех же остальных условиях.Если в iCustom() появляется реальный мусор, то проблема точно в инициализации.
Инициализируйте буфер не Empty_Value, а нулем. При появлении каждого нового бара не забывайте обнулять соответствующую ячейку буфера.
Если в iCustom() появляется реальный мусор, то проблема точно в инициализации.
Инициализируйте буфер не Empty_Value, а нулем. При появлении каждого нового бара не забывайте обнулять соответствующую ячейку буфера.
Да так и сделал. В каждом индикаторе обязательно обнуляю вначале значения - помогло от мусора избавиться.
for(i=first;i<rates_total-1 && !IsStopped();i++)
{EnterBuffer[i]=0;
EditBuffer[i]=0;
ExitBuffer[i]=0;
....
}
Сейчас проверяю на минутном графике. На часовом работает все как часики уже))) А на минутном есть вопросы еще у меня к работе советника.
Как и предполагалось - отсутствие инициализации. В индикаторе FB
Во-первых, в начале функции OnCalculate необходимо добавить инициализацию массивов
Потому что та инициализация, которая есть у Вас, не всегда срабатывает
Во-вторых, в основном цикле расчёта в самом его начале добавить инициализацию нулевых элементов массивов (так как при добавлении нового бара на графике автоматически увеличиваются и индикаторные массивы, и эти новые элементы никак не инициализируются, ни явно потому что prev_calculated>0, ни неявно)
Кроме этого в CustomOptimisation.mqh в классе TBalanceSlopeCriterion обязательно надо добавить деструктор (это на результат не влияет, но при тестировании получается утечка памяти)
У меня тоже было чудо с тестером.
Тестирую советник с одним именем: тестер рисует объекты
...сохранил и компильнул советник под другим именем::объектов не видно
но замечу что перебросил терминал на другой диск