во-первых, некорректно написаные индикаторы, основная проблема длительности советников. (для корректной проверки скорости рекомендую использовать встроенные индикаторы, и только потом подключать дополнительные)
во-вторых, некорректные циклы, либо циклы с большим количеством проходов, например иногда в эксперте каждый раз проверяются в цикле все бары от 0 до Bars, в таком случае вариант либо не использовать данные циклы, (но иногда они все же нужны), либо ограничивать их, например в 1000 циклов (тогда каждый раз будет просчитываться только последняя тысяча баров, а не все имеющиеся)
в-третьих, кроме использования некорректных индикаторов, иногда возникает проблема использования большого количества индикаторов, (для меня, большое - это больше трех)
в-четвертых, использование холостых циклов, (циклов не имеющих значение), например, вы при оптимизации эксперта сделали цикл в виде if(какое-то условие) {заносим куда-нибудь какое-ибудь значение}, пусть это было сделано для проверки эксперта во время работы, но если такой цикл не несет никакой информации влияющей на работу финальной версии эксперта, то перед компиляцией его лучше исключить.
в-пятых, оптимизировать имеющиеся параметры, т.е. если у вас в программе 10 циклов, то лучше использовать для всех какой-нибудь один предопределенный параметр, типа int i = 0, нежели для каждого цикла создавать свою переменную, i, j, x, y,a ,b и.т.д.
в-шестых, оптимизировать вывод функций, т.е. пример: у вас есть условие в виде, if(iAC()!=10&&iAC()i!=20&&iAC()!=30....), правильнее будет предопределить некую переменную double i = iAC(..) и далее делать условие if(i!=10&&i!=20&&i!=30...)
p.s. все вышенаписанное лишь моя точка зрения на оптимизациюэкспертов и ее следует воспринимать как информацию, а не как руководство к действию
Пример: int start=GetTickCount(); |
Пример: int start=GetTickCount(); |
Пример: int start=GetTickCount(); |
Не страдает ли при этом скорость его выполнения
Есть ли ещё какие нибудь нюансы при написании экспертов, чтобы избежать его замедления и увеличить его эффективность
Я думаю, что в принципе вы самостоятельно разберётесь с вынесением кода в отдельные функции как только начнёте программировать. Вы это будете просто чувствовать - когда нужно, а когда нет выносить тот или иной код в отдельную функцию ;o)))!

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
И какие правила нужно соблюдать при написании
1. чтобы избежать замедления в исполнении
2. чтобы достичь быстрого исполнения и малого потреблении рессурсов компьютера