А что за метод XHA, который не реализован?
У вас ошибка в алгоритме. Необходимо усреднять цены, а не средние значения.
void start(){ for(int i=Bars-IndicatorCounted(); i>=0; i--){ if(save_time!=iTime(0,tf, iBarShift(0,tf,Time[i]))){ save_time =iTime(0,tf, iBarShift(0,tf,Time[i])); for(int j=MaPeriod-1;j>0;j--) // buf_arrey[j]=iMA(0,tf,1,0,0,price,j+iBarShift(0,tf,Time[i])); buf_arrey[j]=Price(i+j*MathFloor(tf/Period())); } buf_arrey[0]=Price(i); MaBuffer[i]=iMAOnArray(buf_arrey,0,MaPeriod,0,MaMethod,0); } } //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ // функция double Price(price); //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ double Price(int i){ switch(price){ case 0 : return (Close[i]); case 1 : return (iMA(0,tf,1,0,0,1,iBarShift(0,tf,Time[i]))); case 2 : int kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i; if(kol_vo_pois==0) return ( High[i]); return ( High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]); case 3 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i; if(kol_vo_pois==0) return ( Low[i]); return ( Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)]); case 4 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i; if(kol_vo_pois==0) return ( (High[i]+Low[i])/2); return ( (High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]+Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)])/2); case 5 : Print("Price not valide"); Comment("Price not valide"); return(0); case 6 : Print("Price not valide"); Comment("Price not valide"); return(0); } }
kharko:
У вас ошибка в алгоритме. Необходимо усреднять цены, а не средние значения.
void start(){ for(int i=Bars-IndicatorCounted(); i>=0; i--){ if(save_time!=iTime(0,tf, iBarShift(0,tf,Time[i]))){ save_time =iTime(0,tf, iBarShift(0,tf,Time[i])); for(int j=MaPeriod-1;j>0;j--) // buf_arrey[j]=iMA(0,tf,1,0,0,price,j+iBarShift(0,tf,Time[i])); buf_arrey[j]=Price(i+j*MathFloor(tf/Period())); } buf_arrey[0]=Price(i); MaBuffer[i]=iMAOnArray(buf_arrey,0,MaPeriod,0,MaMethod,0); } } //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= // функция double Price(price); //+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+= double Price(int i){ switch(price){ case 0 : return (Close[i]); case 1 : return (iMA(0,tf,1,0,0,1,iBarShift(0,tf,Time[i]))); case 2 : int kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i; if(kol_vo_pois==0) return ( High[i]); return ( High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]); case 3 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i; if(kol_vo_pois==0) return ( Low[i]); return ( Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)]); case 4 : kol_vo_pois=iBarShift(0,0,iTime(0,tf, iBarShift(0,tf,Time[i])))-i; if(kol_vo_pois==0) return ( (High[i]+Low[i])/2); return ( (High[iHighest(0,0,MODE_HIGH,kol_vo_pois,i)]+Low[iLowest(0,0,MODE_LOW,kol_vo_pois,i)])/2); case 5 : Print("Price not valide"); Comment("Price not valide"); return(0); case 6 : Print("Price not valide"); Comment("Price not valide"); return(0); } }
Усредняется цена а не сред. знач!
Vinin:
А что за метод XHA, который не реализован?
Это обычный индикатор МА который имеет 4 метода, пятый это X метод :) Добавил Alert("Проверьте правильность метода МА");
costy_:
kharko:
У вас ошибка в алгоритме. Необходимо усреднять цены, а не средние значения.
Усредняется цена а не сред. знач!
buf_arrey[j]=iMA(0,tf,... MaBuffer[i]=iMAOnArray(buf_arrey,...
eddy:
buf_arrey[j]=iMA(0,tf,... MaBuffer[i]=iMAOnArray(buf_arrey,...
Почему же?!
Уговорили, для лентяев ... делаем проверку, если не равенство, ааа ужас какойто на баре ..
for(price=4; price>=0; price--) for(i=Bars-IndicatorCounted(); i>=0; i--) switch(price){ //PRICE_CLOSE case 0: if(iMA(0,tf,1,0,0,price,1+iBarShift(0,tf,Time[i])) != iClose(0,tf,1+iBarShift(0,tf,Time[i])))Alert("PRICE_CLOSE aaaa ujyrfrjqnj"+i); break; //PRICE_OPEN case 1: if(iMA(0,tf,1,0,0,price,1+iBarShift(0,tf,Time[i])) != iOpen(0,tf,1+iBarShift(0,tf,Time[i])))Alert("PRICE_OPEN aaaa ujyrfrjqnj"+i); break; //PRICE_HIGH case 2: if(iMA(0,tf,1,0,0,price,1+iBarShift(0,tf,Time[i])) != iHigh(0,tf,1+iBarShift(0,tf,Time[i])))Alert("PRICE_HIGH aaaa ujyrfrjqnj"+i); break; //PRICE_LOW case 3: if(iMA(0,tf,1,0,0,price,1+iBarShift(0,tf,Time[i])) != iLow(0,tf,1+iBarShift(0,tf,Time[i])))Alert("PRICE_LOW aaaa ujyrfrjqnj"+i); break; //PRICE_MEDIAN case 4: if(iMA(0,tf,1,0,0,price,1+iBarShift(0,tf,Time[i])) != (iHigh(0,tf,1+iBarShift(0,tf,Time[i]))+iLow(0,tf,1+iBarShift(0,tf,Time[i])))/2) Alert("PRICE_MEDIAN aaaa ujyrfrjqnj"+i); break; }
Странно но терминал не не выдал ни единого алерта, хм значит все ок.
А, забыл, среднее арифметическое с периодом 1 является (равно) усредняемым(ому) значением(ю), школьная программа.
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Moving Average мультипериодный:
Author: Konstantin