Для начала так:
int limit=Bars-counted_bars; for(i=limit;i>=0;i--) { SMA1=iMA(NULL,0,Period1,0,MODE_SMA,PRICE_CLOSE,i); SMA2=iMA(NULL,0,Period2,0,MODE_SMA,PRICE_CLOSE,i); if(SMA2 == 0) result=0; else result=((SMA1-SMA2)/SMA2)*100; ExtBuffer[i]=result; }
Вот это выражение принципиально некрасиво!
if(SMA2 == 0) result=0; else result=((SMA1-SMA2)/SMA2)*100;
Если у вас SMA2 будет равно к примеру 1*10^(-20), то у вас на графике будет отображён один бесконечный всплеск и прямая линия на остальном промежутке времени. Вам это надо? Лучше сделать вот так
if(MathAbs(SMA2)<delta) result=0; else result=((SMA1-SMA2)/SMA2)*100;
delta - это то значение, которое для вас будет означать интервал нуля для SMA2. Значение определите вы сами.
Всем спасибо за помощь.
Хорошо ускорить работу эксперта позволяет еше и перенос расчета индикатора непосредственно в код эксперта в виде функции, которая будет заполнять не весь массив индикатора, а только необходимую глубину массива. Особенно это значимо для индикаторов вызываемых iCustom.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
а замедляет сильно. Пробовал ограничить по числу обсчитываемых баров. Ускорилю Вот только результаты совсем другие.Как можно ускорить эксперта, использующего данный индикатор?