// 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: