Вам бы лучше к экстрасенсам обратиться. Если что - ссылку дам
"или где-то"
ИНДИКАТОР
#property strict #property indicator_separate_window #property indicator_buffers 3 #property indicator_minimum 0.0 #property indicator_maximum 1.0 #property indicator_color1 Blue #property indicator_color2 Red #property indicator_color3 clrGray // ---- input parameters // париод АМА input int periodAMA=30; extern ENUM_APPLIED_PRICE PriceType=PRICE_CLOSE; // Коэффициент умножения отклонения АМА за период АМА input double K=1.0; // количество баров истории для определения Макс. и Мин. АМА (развороты рынка) input int DetectMinMax=60; double SellBuf[],BuyBuf[],StopBuf[],StdAMA[],AMAbuffer[]; //------------------------------------------------------------------ int init() { // ---- indicators IndicatorBuffers(5); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,SellBuf); SetIndexEmptyValue(0,-1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,BuyBuf); SetIndexEmptyValue(1,-1); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,StopBuf); SetIndexEmptyValue(2,-1); SetIndexBuffer(3,AMAbuffer); SetIndexBuffer(4,StdAMA); return(INIT_SUCCEEDED); } // ------------------------------------------------------------------ int deinit() {return(0);} // ------------------------------------------------------------------ int start() { int counted_bars=IndicatorCounted(); // ---- int i,j,limit; double Signal,Noise,ER,SSC; double AMAmax,AMAmin,Filter; if(Bars< DetectMinMax || Bars < periodAMA) return(0); limit=Bars-counted_bars-(DetectMinMax+periodAMA)-1; for(i=limit; i>=0; i--) { // Абслютное значение разности текущей цены и ценой в начале периода Signal=MathAbs(Price(i)-Price(i+periodAMA)); // Сумма абсолютных приращений цены в течении вычисляемого периода Noise=0; for(j=i; j<=i+periodAMA-1; j++) Noise+= MathAbs(Price(j) - Price(j + 1)); // Коэффициент эффективности ER if(Noise!=0) ER=Signal/Noise; else ER=0; // сглаживающая константа в квадрате SSC=MathPow(ER*0.60215+0.06452,2); // Значение адаптивной скользящей Кауфмана AMAbuffer[i]=AMAbuffer[i+1]+SSC*(Price(i)-AMAbuffer[i+1]); } // данные стандартного отклонения АМА for(i=limit; i>=0; i--) StdAMA[i]=iStdDevOnArray(AMAbuffer,0,periodAMA,0,MODE_SMA,i); // заполнение индикатора for(i=limit; i>=0; i--) { //Print("i=",i); BuyBuf[i] = -1; SellBuf[i]= -1; StopBuf[i]= -1; AMAmin=100; AMAmax= 0; for(j=i; j<i+DetectMinMax; j++) { AMAmax=MathMax(AMAmax, AMAbuffer[j]); AMAmin=MathMin(AMAmin, AMAbuffer[j]); } Filter=K*StdAMA[i]; if((AMAbuffer[i]-AMAmin)>Filter) BuyBuf[i]= 1; if((AMAmax-AMAbuffer[i])>Filter) SellBuf[i]= 1; if(SellBuf[i]>0 && BuyBuf[i]>0) { BuyBuf[i] = -1; SellBuf[i]= -1; StopBuf[i]= 1; } } return (0); } // // +------------------------------------------------------------------+ // | возвращает цену | // +------------------------------------------------------------------+ double Price(int shift) { // ---- double res; // ---- switch(PriceType) { case PRICE_OPEN: res=Open[shift]; break; case PRICE_HIGH: res=High[shift]; break; case PRICE_LOW: res=Low[shift]; break; case PRICE_MEDIAN: res=(High[shift]+Low[shift])/2.0; break; case PRICE_TYPICAL: res=(High[shift]+Low[shift]+Close[shift])/3.0; break; case PRICE_WEIGHTED: res=(High[shift]+Low[shift]+2*Close[shift])/4.0; break; default: res=Close[shift]; break; } return (res); } //+------------------------------------------------------------------+
СОВЕТНИК (та часть где значения присваиваются)
int LetsSell=(int)iCustom(Symbol(),PERIOD_M30,"AMA_SELL_BUY_STOP2",periodAMA,PriceType,K,DetectMinMax,0,0); int LetsBuy=(int)iCustom(Symbol(),PERIOD_M30,"AMA_SELL_BUY_STOP2",periodAMA,PriceType,K,DetectMinMax,1,0); int Flat=(int)iCustom(Symbol(),PERIOD_M30,"AMA_SELL_BUY_STOP2",periodAMA,PriceType,K,DetectMinMax,2,0); Print(LetsSell,LetsBuy,Flat);
Вставляйте код правильно: Правильно вставляем код на форуме. И перед вставкой кода в MetaEditore применяйте стилизацию кода: Работа с исходным кодом: Стилизатор - Разработка программ.
Ваш код я уже вставил правильно.
То есть в тестере погонять я его не смогу, ничего не меняя? Так? А так хотелось... Может что-то поменять можно? И вообще тестер же на истории и работает или как?
uprogs:
То есть в тестере погонять я его не смогу, ничего не меняя? Так? А так хотелось... Может что-то поменять можно? И вообще тестер же на истории и работает или как?
То есть в тестере погонять я его не смогу, ничего не меняя? Так? А так хотелось... Может что-то поменять можно? И вообще тестер же на истории и работает или как?
Попробуй
#property strict #property indicator_separate_window #property indicator_buffers 3 #property indicator_minimum 0.0 #property indicator_maximum 1.0 #property indicator_label1 "BUY" #property indicator_color1 clrBlue #property indicator_label2 "SELL" #property indicator_color2 clrRed #property indicator_label3 "STOP" #property indicator_color3 clrGray // ---- input parameters // париод АМА input int periodAMA=30; input ENUM_APPLIED_PRICE PriceType=PRICE_CLOSE; // Коэффициент умножения отклонения АМА за период АМА input double K=1.0; // количество баров истории для определения Макс. и Мин. АМА (развороты рынка) input int DetectMinMax=60; double SellBuf[],BuyBuf[],StopBuf[],StdAMA[],AMAbuffer[]; //------------------------------------------------------------------ int init() { // ---- indicators IndicatorBuffers(5); SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,SellBuf); SetIndexEmptyValue(0,-1); SetIndexStyle(1,DRAW_HISTOGRAM); SetIndexBuffer(1,BuyBuf); SetIndexEmptyValue(1,-1); SetIndexStyle(2,DRAW_HISTOGRAM); SetIndexBuffer(2,StopBuf); SetIndexEmptyValue(2,-1); SetIndexBuffer(3,AMAbuffer); SetIndexBuffer(4,StdAMA); return(INIT_SUCCEEDED); } // ------------------------------------------------------------------ int deinit() {return(0);} // ------------------------------------------------------------------ int start() { int counted_bars=IndicatorCounted(); // ---- int i,j; double Signal,Noise,ER,SSC; double AMAmax,AMAmin,Filter; if(Bars< DetectMinMax || Bars < periodAMA) return(0); int limit1=Bars-counted_bars; int limit2=limit1; int limit3=limit1; if(limit1>1) { limit1=Bars-periodAMA-1; limit2=limit1-periodAMA; limit3=limit2-DetectMinMax; } for(i=limit1; i>=0; i--) { // Абслютное значение разности текущей цены и ценой в начале периода Signal=MathAbs(Price(i)-Price(i+periodAMA)); // Сумма абсолютных приращений цены в течении вычисляемого периода Noise=0; for(j=i; j<=i+periodAMA-1; j++) Noise+= MathAbs(Price(j) - Price(j + 1)); // Коэффициент эффективности ER if(Noise!=0) ER=Signal/Noise; else ER=0; // сглаживающая константа в квадрате SSC=MathPow(ER*0.60215+0.06452,2); // Значение адаптивной скользящей Кауфмана AMAbuffer[i]=AMAbuffer[i+1]+SSC*(Price(i)-AMAbuffer[i+1]); } // данные стандартного отклонения АМА for(i=limit2; i>=0; i--) StdAMA[i]=iStdDevOnArray(AMAbuffer,0,periodAMA,0,MODE_SMA,i); // заполнение индикатора for(i=limit3; i>=0; i--) { //Print("i=",i); BuyBuf[i] = -1; SellBuf[i]= -1; StopBuf[i]= -1; AMAmin=100; AMAmax= 0; for(j=i; j<i+DetectMinMax; j++) { AMAmax=MathMax(AMAmax, AMAbuffer[j]); AMAmin=MathMin(AMAmin, AMAbuffer[j]); } Filter=K*StdAMA[i]; if((AMAbuffer[i]-AMAmin)>Filter) BuyBuf[i]= 1; if((AMAmax-AMAbuffer[i])>Filter) SellBuf[i]= 1; if(SellBuf[i]>0 && BuyBuf[i]>0) { BuyBuf[i] = -1; SellBuf[i]= -1; StopBuf[i]= 1; } } return (0); } // // +------------------------------------------------------------------+ // | возвращает цену | // +------------------------------------------------------------------+ double Price(int shift) { // ---- double res; // ---- switch(PriceType) { case PRICE_OPEN: res=Open[shift]; break; case PRICE_HIGH: res=High[shift]; break; case PRICE_LOW: res=Low[shift]; break; case PRICE_MEDIAN: res=(High[shift]+Low[shift])/2.0; break; case PRICE_TYPICAL: res=(High[shift]+Low[shift]+Close[shift])/3.0; break; case PRICE_WEIGHTED: res=(High[shift]+Low[shift]+2*Close[shift])/4.0; break; default: res=Close[shift]; break; } return (res); } //+------------------------------------------------------------------+
Благодарю!! Попробую!
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем здрасте!
Суть в счем: есть идюк с тремя буферами по гистаграммам, либо -1 (по умолчанию) либо 1 .
Построен на нем советник. Если к графику его прикрепить он честно выдает где-то единицу, то есть трех -1 не должно быть в принципе.
А вот если в тестере, то все -1.
В связи с этим вопрос это такие ограничения в тестере mt4? Или я где-то затупливаю?