2pbIdealMA_nk





// 22.01.2009 Ðåäàêòèðîâàë Íèêîëàé Êîñèöèí
//+X================================================================X+
//|                                    Moving Average 2p-IdealMA.mq4 |
//|                                      Copyright © 2009,   Neutron |                                                                   | 
//+X================================================================X+
//---- îòðèñîâêà èíäèêàòîðà â îñíîâíîì îêíå
#property indicator_chart_window
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ
#property  indicator_buffers 1
//---- öâåò ëèíèèè èíäèêàòîðîâ
#property indicator_color1 Blue
//---- âõîäíûå ïàðàìåòðû ýêñïåðòà
extern double w1 =0.1;
extern double w2 = 0.1;
//---- èíäèêàòîðíûå áóôåðû
double MA[];
//---- 
int StartBar;
//+X================================================================X+
//|  2p-IdealMA function                                             |
//+X================================================================X+
double GetIdealMASmooth(double W1_, double W2_,
                       double Series1, double Series0, double Resalt1)
 {
//---+
   double Resalt0, dSeries, dSeries2;
   dSeries = Series0 - Series1;
   dSeries2 = dSeries * dSeries -1.0;
   
   Resalt0 = (W1_ * (Series0 - Resalt1) + 
                   Resalt1 + W2_ * Resalt1 * dSeries2) 
                                           / (1.0 + W2_ * dSeries2);	
   return(Resalt0);
//---+ 
 }
//+X================================================================X+
//|  initialization function                                         |
//+X================================================================X+
int init()
 {
//---+
   //---- ñòèëü èçîáðàæåíèÿ èíäèêàòîðà
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 3);
   //---- áóôåð äëÿ ïåðâîé ëèíèè èíäèêàòîðà
   SetIndexBuffer(0, MA);
   //---- ìèíèìàëüíîå êîëè÷åñòâî áàðîâ äëÿ ðàñ÷¸òà
   StartBar = 2;
   //----
   return(0);
//---+
 }
//+X================================================================X+
//|  start function                                                  |
//+X================================================================X+
int start()
 {
//---+
   //---- ïðîâåðêà êîëè÷åñòâà áàðîâ 
                           //íà äîñòàòî÷íîñòü äëÿ äàëüíåéøåãî ðàñ÷¸òà
   if (Bars - 1 < StartBar)
                       return(-1);
   //---- Ââåäåíèå öåëûõ ïåðåìåííûõ è ïîëó÷åíèå óæå ïîñ÷èòàííûõ áàðîâ 
   int MaxBar, limit, bar, counted_bars = IndicatorCounted();  
   //---- ïðîâåðêà íà âîçìîæíûå îøèáêè
   if (counted_bars < 0)
                  return(-1);
   //---- ïîñëåäíèé ïîñ÷èòàííûé áàð äîëæåí áûòü ïåðåñ÷èòàí
   if (counted_bars > 0)
              counted_bars--;
   //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà,
            //íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò âñåõ áàðîâ
   MaxBar = Bars - 2;       
   //---- îïðåäåëåíèå íîìåðà ñàìîãî ñòàðîãî áàðà,
            //íà÷èíàÿ ñ êîòîðîãî áóäåò ïðîèçåä¸í ïåðåñ÷¸ò íîâûõ áàðîâ
   limit = Bars - counted_bars - 1; 
   //---- èíèöèàëèçàöèÿ íóëÿ   
   if (limit >= MaxBar)
     {
      limit = MaxBar;
      MA[MaxBar] = Close[MaxBar];
	   MA[MaxBar + 1] = Close[MaxBar + 1];
     } 
   //---- ÂÛ×ÈÑËÅÍÈÅ ÈÍÄÈÊÀÒÎÐÀ  
	for( bar = limit; bar >= 0; bar--)
      MA[bar] = GetIdealMASmooth(w1, w2, 
                            Close[bar + 1], Close[bar], MA[bar + 1]);
   //----
   return(0);
//---+
 }
//+X----------------------------------------------------------------X+





Sample





Analysis



Market Information Used:

Series array that contains close prices for each bar


Indicator Curves created:

Implements a curve of type DRAW_LINE


Indicators Used:



Custom Indicators Used:

Order Management characteristics:

Other Features: