Надо код упрощать
Vinin:
Надо код упрощать
Куда уж проще...
в init() добавил после точек 0
int init() { SetIndexStyle(0,DRAW_LINE,0,0); SetIndexBuffer(0, ExtMapBuffer1); double sum=0; for(int h=0;h<=FTMA-1;h++) { PM[h]=shift1+MathPow(h/(FTMA-1.0),rank1)*(1.0-shift1); PM[h]=(shift2+MathPow(1-(h/(FTMA-1.0)),rank2)*(1.0-shift2))*PM[h]; if((h/(FTMA-1.))<0.5) { PM[h]=(shift3+MathPow((1-(h/(FTMA-1.0))*2.0).0,rank3)*(1.0-shift3))*PM[h]; / } else { PM[h]=(shift3+MathPow((h/(FTMA-1.))*2.0-1.0,rank3)*(1.0-shift3))*PM[h]; } sum+=PM[h]; } double sum1=0; for(h=0;h<=FTMA-1;h++) { PM[h]=PM[h]/sum; sum1+=PM[h]; } return(0); }Посмотри внимательно
Функцию старт я бы сделал примерно так
int start() { int limit; int counted_bars=IndicatorCounted(); limit=Bars - counted_bars - 1; if(counted_bars == 0) limit=Bars - FTMA - 1; for(int i=limit; i>=0; i--) { ExtMapBuffer1[i]=0; for(int h=0;h<FTMA;h++) ExtMapBuffer1[i]+=iMA(NULL, 0, 1, 0, MODE_SMA, PRICE, i) * PM[h]; } return(0); }
Vinin:
в init() добавил после точек 0
int init() { SetIndexStyle(0,DRAW_LINE,0,0); SetIndexBuffer(0, ExtMapBuffer1); double sum=0; for(int h=0;h<=FTMA-1;h++) { PM[h]=shift1+MathPow(h/(FTMA-1.0),rank1)*(1.0-shift1); PM[h]=(shift2+MathPow(1-(h/(FTMA-1.0)),rank2)*(1.0-shift2))*PM[h]; if((h/(FTMA-1.))<0.5) { PM[h]=(shift3+MathPow((1-(h/(FTMA-1.0))*2.0).0,rank3)*(1.0-shift3))*PM[h]; / } else { PM[h]=(shift3+MathPow((h/(FTMA-1.))*2.0-1.0,rank3)*(1.0-shift3))*PM[h]; } sum+=PM[h]; } double sum1=0; for(h=0;h<=FTMA-1;h++) { PM[h]=PM[h]/sum; sum1+=PM[h]; } return(0); }Посмотри внимательно
Зачем после точек нули? если можно
// пример; a=1.
Vinin:
Функцию старт я бы сделал примерно так
int start() { int limit; int counted_bars=IndicatorCounted(); limit=Bars - counted_bars - 1; if(counted_bars == 0) limit=Bars - FTMA - 1; for(int i=limit; i>=0; i--) { ExtMapBuffer1[i]=0; for(int h=0;h<FTMA;h++) ExtMapBuffer1[i]+=iMA(NULL, 0, 1, 0, MODE_SMA, PRICE, i) * PM[h]; } return(0); }
А какая разница?))) С limit я согласен, но это не критично)
gumgum:
А какая разница?))) С limit я согласен, но это не критично)
Vinin:
Функцию старт я бы сделал примерно так
int start() { int limit; int counted_bars=IndicatorCounted(); limit=Bars - counted_bars - 1; if(counted_bars == 0) limit=Bars - FTMA - 1; for(int i=limit; i>=0; i--) { ExtMapBuffer1[i]=0; for(int h=0;h<FTMA;h++) ExtMapBuffer1[i]+=iMA(NULL, 0, 1, 0, MODE_SMA, PRICE, i) * PM[h]; } return(0); }
А какая разница?))) С limit я согласен, но это не критично)
Логические условия - основной тормоз. Я стараюсь по возможности их не использовать. Скорость работы очень сильно различается
gumgum:
Зачем после точек нули? если можно
Vinin:
в init() добавил после точек 0
}Посмотри внимательно
Зачем после точек нули? если можно
// пример; a=1.
PM[h]=(shift3+MathPow((1-(h/(FTMA-1.0))*2.0).0,rank3)*(1.0-shift3))*PM[h];В этой строке есть явная ошибка. Видимо случайно точку поставил, а она в глаза не бросается. Если после точки стоит 0, то ошибку можно увидеть.
Почему компилятор пропускает такую конструкцию - я не знаю.
Vinin:
Почему компилятор пропускает такую конструкцию - я не знаю.
gumgum:
Зачем после точек нули? если можно
Vinin:
в init() добавил после точек 0
}Посмотри внимательно
Зачем после точек нули? если можно
// пример; a=1.
PM[h]=(shift3+MathPow((1-(h/(FTMA-1.0))*2.0).0,rank3)*(1.0-shift3))*PM[h];В этой строке есть явная ошибка. Видимо случайно точку поставил, а она в глаза не бросается. Если после точки стоит 0, то ошибку можно увидеть.
Почему компилятор пропускает такую конструкцию - я не знаю.
Странно конечно, но это не влияет на работу.)) Спасибо впредь буду внимательнее.)))
Кстати, с настройками по умолчанию точная копия SMA(10)

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
fine tuning MA:
Author: gumgum