//+------------------------------------------------------------------+ //| MA_with_canal.mq4 | //| Copyright © 2009, Áóãàåâ Äàíèèë Âëàäèìèðîâè÷ | //| e-mail: buga1922@mail.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, Áóãàåâ Äàíèèë Âëàäèìèðîâè÷" #property link "mailto:buga1922@mail.ru" #property indicator_chart_window // Ñòðîèì èíäèêàòîð â ãëàâíîì îêíå #property indicator_buffers 3 // Êîëè÷åñòâî èñïîëüçóåìûõ áóôåðîâ = 3 #property indicator_color1 Red // Öâåò 1-îé ëèíèè - êðàñíûé #property indicator_color2 Red // Öâåò 2-îé ëèíèè - êðàñíûé #property indicator_color3 Red // Öâåò 3-åé ëèíèè - êðàñíûé #property indicator_width3 2 // Òîëùèíà òðåòüåé ëèíèè - 2 // Ìàññèâû äëÿ õðàíåíèÿ çíà÷åíèé èíäèêàòîðà double Buffer1[], Buffer2[], Buffer3[]; // Çàäàâàåìûå ïîëüçîâàòåëåì ïåðåìåííûå extern double ma_canal = 2; // Êîýôôèöèåíò èñïîëüçóåìûé äëÿ ðàññ÷åòà øèðèíû êàíàëà (ma_canal*ñðåäíèé_ðàçìåð_ñâå÷è) extern int ma_period = 21, // Ïåðèîä äëÿ ðàññ÷åòà ñêîëüçÿùåé ñðåäíåé ma_method=3, // Ìåòîä ðàññ÷åòà ñðåäíåé 0-ïðîñòàÿ SMA, 1-ýêñïîòåíöèàëüíàÿ EMA, 2-ñãëàæåííàÿ SMMA, // 3-ëèíåéíî-âçâåøåííàÿ LWMA ma_cena=0; // Öåíû ïî êîòîðûì ñòðîèòñÿ ÌÀ 0-öåíà çàêðûòèÿ, 1-öåíà îòêðûòèÿ, 2-ìàêñèìàëüíàÿ, 3-ìèíèìàëüíàÿ, // 4-ñðåäíÿÿ, 5-òèïè÷íàÿ, 6-âçâåøåííàÿ öåíà çàêðûòèÿ // Ïåðåìåííûå äëÿ îòîáðàæåíèÿ íàñòðîåê èíäèêàòîðà string ma_method_str,ma_cena_str; //---ÏÎËÜÇÎÂÀÒÅËÜÑÊÈÅ ÔÓÍÊÖÈÈ---// // Ôóíêöèÿ, ïîìîãàþùàÿ âûâåñòè íàñòðîéêè èíäèêàòîðà void PARAMETRY() { switch(ma_method) { case 0: ma_method_str = "ïðîñòàÿ ñðåäíÿÿ (SMA)"; break; case 1: ma_method_str = "ýêñïîòåíöèàëüíàÿ ñðåäíÿÿ (EMA)"; break; case 2: ma_method_str = "ñãëàæåííàÿ ñðåäíÿÿ (SMMA)"; break; case 3: ma_method_str = "ëèíåéíî-âçâåøåííàÿ ñðåäíÿÿ (LWMA)"; break; default: ma_method_str = "ââåäåí íåêîððåêòíûé ïàðàìåòð"; break; } switch(ma_cena) { case 0: ma_cena_str = "öåíà çàêðûòèÿ (PRICE_CLOSE)"; break; case 1: ma_cena_str = "öåíà îòêðûòèÿ (PRICE_OPEN)"; break; case 2: ma_cena_str = "ìàêñèìàëüíàÿ öåíà (PRICE_HIGH)"; break; case 3: ma_cena_str = "ìèíèìàëüíàÿ öåíà (PRICE_LOW)"; break; case 4: ma_cena_str = "ñðåäíÿÿ öåíà (PRICE_MEDIAN)"; break; case 5: ma_cena_str = "òèïè÷íàÿ öåíà (PRICE_TYPICAL)"; break; case 6: ma_cena_str = "âçâåøåííàÿ öåíà çàêðûòèÿ (PRICE_WEIGHTED)"; break; default: ma_cena_str = "ââåäåí íåêîððåêòíûé ïàðàìåòð"; break; } } // Ôóíêöèÿ âûïîëíÿåò ïðîâåðêó íà êîððåêòíîñòü ââåäåííûõ ïàðàìåòðîâ, // â ñëó÷àå íåîáõîäèìîñòè âûâîäèò îøèáêó. Âîçâðàùàåò true, åñëè âñå ïàðàìåòðû êîððåêòíû. bool PROVERKA() { // Óäàëÿåì ñóùåñòâóþùèå ñîîáùåíèÿ îá îøèáêå ObjectDelete("error"); ObjectDelete("advice"); return(true); // Ïðîèçâîäèì ïðîâåðêó íà íàëè÷èå îøèáîê if ( ma_canal < 0) { VYVOD(": Èçìåíèòå ïàðàìåòð ma_canal.","Ïàðàìåòð äîëæåí áûòü ïîëîæèòåëüíûì");return(false); } else { if ( ( ma_period < 0) || ( ma_period > Bars-2) ) { VYVOD(": Èçìåíèòå ïàðàìåòð ma_period.","Çíà÷åíèå ïàðàìåòðà äîëæíî ïðèíàäëåæàòü äèàïàçîíó [0;"+(Bars-2)+"]");return(false); } else { if ( ( ma_method < 0) || ( ma_method > 3) ) { VYVOD(": Èçìåíèòå ïàðàìåòð ma_method.","Çíà÷åíèå ïàðàìåòðà äîëæíî ïðèíàäëåæàòü äèàïàçîíó [0;3]");return(false); } else { if ( ( ma_cena < 0) || ( ma_cena > 6) ) { VYVOD(": Èçìåíèòå ïàðàìåòð ma_cena.","Çíà÷åíèå ïàðàìåòðà äîëæíî ïðèíàäëåæàòü äèàïàçîíó [0;6]");return(false); } } } } } // Ôóíêöèÿ âûâîäèò èíôîðìàöèþ îòíîñèòåëüíî íåêîððåêòíûõ ïàðàìåòðàõ èíäèêàòîðà void VYVOD(string error, string advice) { ObjectCreate ( "error", OBJ_LABEL,0,0,0); // Ñîçäàåì ìåòêó, êîòîðàÿ áóäåò ñîîáùàòü î // íåêîððåêòíûõ çàäàííûõ ïàðàìåòðàõ ObjectSetText ( "error", "Èíäèêàòîð MA_with_canal"+error,12,"Arial", Red); // Çàäàåì òåêñò ìåòêè îá îøèáêå ObjectSet ( "error", OBJPROP_CORNER, 1); // Çàäàåì óãîë ïðèâÿçêè ìåòêè (ïðàâûé âåðõíèé) ObjectSet ( "error", OBJPROP_XDISTANCE,15); // Çàäàåì ñäâèã îòíîñèòåëüíî ìåòêè ïî ãîðèçîíòàëè ObjectSet ( "error", OBJPROP_YDISTANCE,15); // Çàäàåì ñäâèã îòíîñèòåëüíî ìåòêè ïî âåðòèêàëè ObjectCreate ( "advice", OBJ_LABEL,0,0,0); // Ñîçäàåì ìåòêó, êîòîðàÿ áóäåò ñîîáùàòü ðåêîìåíäàöèè // î äîïóñòèìîì äèàïàçîíå ïàðàìåòðîâ ObjectSetText ( "advice", advice,12,"Arial", Red); // Çàäàåì òåêñò ìåòêè ñ ðåêîìåíäàöèÿìè ObjectSet ( "advice", OBJPROP_CORNER, 1); // Çàäàåì óãîë ïðèâÿçêè ìåòêè (ïðàâûé âåðõíèé) ObjectSet ( "advice", OBJPROP_XDISTANCE,15); // Çàäàåì ñäâèã îòíîñèòåëüíî ìåòêè ïî ãîðèçîíòàëè ObjectSet ( "advice", OBJPROP_YDISTANCE,40); // Çàäàåì ñäâèã îòíîñèòåëüíî ìåòêè ïî âåðòèêàëè } double canal(int lag) { int i; double sum=0; for (i=lag; i<=lag+ma_period; i++) sum=sum+(High[i]-Low[i]); return(sum/ma_period*ma_canal); } // Ôóíêöèÿ ïðîèçâîäèò ðàññ÷åò çíà÷åíèé èíäèêàòîðà void RASSCHET(int counted_bars) { double MA; int bars=counted_bars-1; while ( bars > 0 ) { MA=iMA(Symbol(),0,ma_period,0,ma_method,ma_cena,bars); Buffer1[bars]=( MA + canal(bars)); Buffer2[bars]=( MA - canal(bars)); Buffer3[bars]=MA; bars--; } } // Ôóíêöèÿ èíèöèàëèçàöèè void init() { // Óñòàíàâëèâàåì ñòèëü îòðèñîâêè - ïðîñòàÿ ëèíèÿ,ñòèëü ëèíèè - ñïëîøíàÿ, äëÿ âñåõ ëèíèé èíäèêàòîðà SetIndexStyle (0, DRAW_LINE, STYLE_SOLID); SetIndexStyle (1, DRAW_LINE, STYLE_SOLID); SetIndexStyle (2, DRAW_LINE, STYLE_SOLID); // Ñâÿçûâàåì ìàññèâû Buffer ñ áóôåðàìè ïîëüçîâàòåëüñêîãî èíäèêàòîðà SetIndexBuffer (0, Buffer1); SetIndexBuffer (1, Buffer2); SetIndexBuffer (2, Buffer3); // Çàäàåì èìÿ ëèíèé èíäèêàòîðà SetIndexLabel (0, "high_limit"); SetIndexLabel (1, "low_limit"); SetIndexLabel (2, "MA"); // Çàäàåì êîðîòêîå èìÿ èíäèêàòîðà IndicatorShortName("MA_with_canal ("+ma_period+";"+ DoubleToStr(ma_canal,1)+")"); PARAMETRY(); // Îïðåäåëÿåì êàêèì ñïîñîáîì ïðîèçâîäèòñÿ ðàññ÷åò ñêîëüçÿùåé ñðåäíåé } // Ôóíêöèÿ äåèíèöèàëèçàöèè void deinit() { // Óäàëÿåì âûâåäåííûå êîììåíòàðèè è ñîîáùåíèå îá îøèáêå Comment(""); ObjectDelete("error"); ObjectDelete("advice"); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ void start() { int counted_bars=IndicatorCounted(); if ( PROVERKA() == true) { RASSCHET(counted_bars); } Comment("Èíäèêàòîð MA_with_canal\nÏåðèîä ñêîëüçÿùåé ñðåäíåé="+ma_period+ "; Êîýôôèöèåíò äëÿ ðàññ÷åòà êàíàëà="+DoubleToStr(ma_canal,1)+ "\nÄëÿ ðàññ÷åòà ÌÀ èñïîëüçîâàëàñü "+ma_cena_str+ "\nÌåòîä âû÷èñëåíèÿ ñêîëüçÿùåé ñðåäíåé - "+ma_method_str+ "\nÔàêòè÷åñêàÿ øèðèíà êàíàëà="+DoubleToStr(canal(0),4)); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Series array that contains the highest prices of each bar
Series array that contains the lowest prices of each bar
Indicator Curves created:
Indicators Used:
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features: