//+-----------------------------------------------------------------------------+ //| Gaus_MA.mq4 | //| Gregory A. Kakhiani | //| gkakhiani@gmail.com | //+-----------------------------------------------------------------------------+ //Óñðåäíåíèå (Ñãëàæèâàíèå êðèâîé öåí) öåí ïðè ïîìîùè ìîäèôèöèðîâàííîãî àëãîðèòìà| //ëèíåéíî-âçâåøåííîãî ñêîëüçÿùåãî ñðåäíåãî ãäå êîýôôèöèåíòû ñãëàæèâàíèÿ | //ðàñ÷èòûâàþòñÿ ïðè ïîìîùè ðàäèàëüíî-áàçèñíîé ôóíêöè (ôóíêöèÿ ãàóñà) | //+-----------------------------------------------------------------------------+ #property copyright "Gregory A. Kakhiani" #property link "gkakhiani@gmail.com" #property indicator_chart_window #property indicator_buffers 1 #property indicator_color1 Red //---- input parameters extern int period=10; //Ïåðèîä óñðåäíåíèÿ extern double N=2; //Ñòåïåíü ýêñïîíåíòû extern double A=-0.001; //Êîýôèöèåíò ñòåïåíè å extern bool Vol=false; //Óìíîæèòü íà îáúåì extern int applied_price=0;//Èñïîëüçóåìàÿ öåíîâàÿ êîíñòàíòà - èñïîëüçóþòñÿ ñòàíäàðòíûå öåíîâûå êîíñòàíòû extern int ma_shift=0; //Ñäâèã èíäèêàòîðà îòíîñèòåëüíî öåíîâîãî ãðàôèêà extern int koef_shift=0; //Ñäâèã èíäåêñà ìàñèâà êîåôôèöèåíòîâ //---- buffers double GaussAverage[]; //Ãëîáàëüíûå ïåðåìåííûå int MaxBars=10000; //Êîëè÷åñòâî àíàëèçèðóåìûõ áàðîâ double Coefs[50]; //Ìàññèâ äëÿ õðàíåíèÿ êîýôôèöèåíòîâ //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0,GaussAverage); SetIndexLabel(0,"GaussAverage") ; if(applied_price>6) applied_price=0; //îôîðìëÿåì èíäèêàòîð string applied_priceText=""; switch(applied_price) { case PRICE_CLOSE:// 0 Öåíà çàêðûòèÿ {applied_priceText="Close";}break; case PRICE_OPEN://1 Öåíà îòêðûòèÿ {applied_priceText="Open";}break; case PRICE_HIGH://2 Ìàêñèìàëüíàÿ öåíà {applied_priceText="High";}break; case PRICE_LOW://3 Ìèíèìàëüíàÿ öåíà {applied_priceText="Low";}break; case PRICE_MEDIAN://4 Ñðåäíÿÿ öåíà, (high+low)/2 {applied_priceText="Median price";}break; case PRICE_TYPICAL://5 Òèïè÷íàÿ öåíà, (high+low+close)/3 {applied_priceText="Typical price";}break; case PRICE_WEIGHTED:// 6 Âçâåøåííàÿ öåíà çàêðûòèÿ, (high+low+close+close)/4 {applied_priceText="Weighted price";}break; } IndicatorShortName("GaussAverage("+A+","+N+","+period+","+applied_priceText+",koef_shift="+koef_shift+", Shift="+ma_shift+")"); //Çàïîëíåíèå ìàññèâà êîýôèöèåíòîâ CalcCoefs(A, N, period); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { //Ñîáñòâåííî ñãëàæèâàíèå for(int i=MaxBars;i>=0;i--) { GaussAverage[i+ma_shift]=GetGausAverage(period, applied_price, Vol, koef_shift,i); } //---- return(0); } //+------------------------------------------------------------------+ //Âîçâðàùàåò öåíó â çàâèñèìîñòè îò PriceType ñî ñäâèãîì Index | //+------------------------------------------------------------------+ double GetPrice(int Index,int PriceType) { switch(PriceType) { case PRICE_CLOSE:// 0 Öåíà çàêðûòèÿ {return (Close[Index]);} case PRICE_OPEN://1 Öåíà îòêðûòèÿ {return (Open[Index]);} case PRICE_HIGH://2 Ìàêñèìàëüíàÿ öåíà {return (High[Index]);} case PRICE_LOW://3 Ìèíèìàëüíàÿ öåíà {return (Low[Index]);} case PRICE_MEDIAN://4 Ñðåäíÿÿ öåíà, (high+low)/2 {return ((High[Index]+Low[Index])/2);} case PRICE_TYPICAL://5 Òèïè÷íàÿ öåíà, (high+low+close)/3 {return ((High[Index]+Low[Index]+Close[Index])/3);} case PRICE_WEIGHTED:// 6 Âçâåøåííàÿ öåíà çàêðûòèÿ, (high+low+close+close)/4 {return ((High[Index]+Low[Index]+Close[Index]+Close[Index])/4);} default: {return (Close[Index]);} } return (0); } //+-----------------------------------------------------------------+ //Ôóíêöèÿ ñãëàæèâàíèÿ | //Ìîäèôèöèðîâàííûé àëãîðèòì ëèíåéíî-âçâåøåííîãî ñêîëüçÿùåãî ñðåäíåãî| //+-----------------------------------------------------------------+ //AvPeriod - ïåðèîä ñãëàæèâàíèÿ | //applied_price - Èñïîëüçóåìàÿ öåíîâàÿ êîíñòàíòà | //Vol - Óìíîæèòü íà îáúåì | //Sh - Ñäâèã | //+-----------------------------------------------------------------+ double GetGausAverage(double AvPeriod, int applied_price, bool Vol, int koef_shift,int Sh) { double sum=0; //Âðåìåííûå ïåðåìåííûå äëÿ ñóìì double W=0; //ó÷àñòâóþùèõ â èñëèòåëå è çíàìåíàòåëå for(int j=AvPeriod;j>=0;j--) { if(Vol==true) { sum+=GetPrice(Sh+j,applied_price)*Volume[Sh]*Coefs[j+koef_shift]; W+=Coefs[j+koef_shift]*Volume[Sh]; } else { sum+=GetPrice(Sh+j,applied_price)*Coefs[j+koef_shift]; W+=Coefs[j+koef_shift]; } } return (sum/W); } // //+-----------------------------------------------------------------+ //Ðàñ÷¸ò êîýôôèöèåíòîâ äëÿ ðàäèàëüíî-áàçèñíîé ôóíêöèè ñãëàæèâàíèÿ | //+-----------------------------------------------------------------+ //AvPeriod - ïåðèîä ñãëàæèâàíèÿ | //A - Êîýôèöèåíò ñòåïåíè å | //N - Ñòåïåíü ýêñïîíåíòû | //+-----------------------------------------------------------------+ double CalcCoefs(double A, double N, double AvPeriod) { //Ïðîâåðêà ïàðàìåòðîâ if(AvPeriod>=50) AvPeriod=49; if(MathAbs(N)>5) N=5; //Çàïîëíåíèå ìàññèâà êîåôôèöèåíòîâ for(int i=0;i<=AvPeriod;i++) Coefs[i]=MathExp(A*MathPow(i,N)); return (0); }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains open prices of each bar
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Series array that contains tick volumes of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: