de ultime » Dim 27 Mai 2012 13:18
//| Val_Bands.mq4 | //| Èíäèêàòîð âîëàíòèëüíîñòè äëèíû ñâå÷åé: | //| - êðàñíàÿ ãèñòîãðàììà - äëèíà ñâå÷è â ïèïñàõ | //| - ëèíèè: ýòî ñðåäíèå îò äëèíû ñâå÷åé ñî ñòàíäàðòíûì îòêëîíåíèåì | //| Íàñòðîéêè - àíàëîãè÷íû êàíàëó Áîëèíäæåðà | //| Èñïîëüçîâàíèå. Óäîáåí äëÿ îòñëåæèàíèÿ ãýïîâ íà ðûíêå. Çà ãýï ñ÷èòåòñÿ | //| âñå, ÷òî âûøå æåëòîé ëèíèè | //| - âûõîä çà âåðõíþþ ãðàíèöó - à) ïîäàðîê â ÒÐ (åñëè ïî ïîçèöèè); | //| á) SL (åñëè ïðîòèâ ïîçèöèè; | //| â) çàïðåò âõîäà â ýòîé òî÷êå | //| - âûõîä çà íèæíþþ ãðàíèöó - áîêîâèê | //| - ïåðåñå÷åíèå ñíèçó ââåðõ íèæíåé ãðàíèöû - íà÷àëî òðåíäà. | //ØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØØ #property copyright "Copyright © 2010, Fomenko" #property link "http://faa1947@mail.ru" // ----------------- Îòäåëüíîå îêíî äëÿ èíäèêàòîðà ---------------------------- #property indicator_separate_window // ---------------- Êîë-âî âèäèìûõ áóôåðîâ èíäèêàòîðà ------------------------- #property indicator_buffers 4 // ---------------- Óñòàíîâêà öâåòà èíäèêàòîðà -------------------------------- #property indicator_color1 LightSeaGreen #property indicator_color2 Yellow #property indicator_color3 Orchid #property indicator_color4 Red // ---------------- Óñòàíîâêà øèðèíû ëèíèè ----------------------------------- #property indicator_width1 2 #property indicator_width2 1 #property indicator_width3 1 #property indicator_width4 1 // ---------------- Óñòàíîâêà ñòèëÿ ëèíèè ----------------------------------- #property indicator_style1 0 #property indicator_style2 0 #property indicator_style3 0 #property indicator_style4 0 //----------------- Âíåøíèå íàñòðîéêè èíäèêàòîðà ==========-------------------- extern int BandsPeriod = 14; // Ïåðèîä ðàñ÷åòà extern double BandsDeviations = 1.0; // Âåëè÷èíà ñòàíäàðòíîãî îòêëîíåíèÿ int BandsShift = 0; // Ñäâèã îòíîñèòåëüíî ãðàôèêà //----------------- Îáúÿâëåíèå áóôåðîâ èíèäèêàòîðîâ -------------------------- double MovingBuffer[]; double UpperBuffer[]; double LowerBuffer[]; double Val_BarsBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { IndicatorDigits (1); //--------- Òðè âèäèìûõ áóôåðà -------------------------------------- IndicatorBuffers (4); //---------- Óñòàíîâêà ïàðàìåòðîâ ðèñîâàíèÿ ------------------------- SetIndexStyle (0, DRAW_LINE); SetIndexDrawBegin (0, BandsPeriod+BandsShift); SetIndexStyle (1, DRAW_LINE); SetIndexDrawBegin (1, BandsPeriod+BandsShift); SetIndexStyle (2, DRAW_LINE); SetIndexDrawBegin (2, BandsPeriod+BandsShift); SetIndexStyle (3, DRAW_HISTOGRAM); SetIndexDrawBegin (3, BandsPeriod+BandsShift); //---------- Ïðèâÿçûâàåì íîìåð áóôåðà ê åãî èìåíè ------------------- SetIndexBuffer (0, MovingBuffer); SetIndexBuffer (1, UpperBuffer); SetIndexBuffer (2, LowerBuffer); SetIndexBuffer (3, Val_BarsBuffer); // ----------- Óñòàíàâëèâàåì ïåðâîíà÷àëüíûå çíà÷åíèÿ --------------- SetIndexEmptyValue (0, 0.0); SetIndexEmptyValue (1, 0.0); SetIndexEmptyValue (2, 0.0); SetIndexEmptyValue (3, 0.0); //------------------ Ìåòêà äëÿ ëèíèè èíäèêàòîðà --------------------- SetIndexLabel (0, "Mov"); SetIndexLabel (1, "Up"); SetIndexLabel (2, "Down"); return(0); } //+------------------------------------------------------------------+ //| Bollinger Bands | //+------------------------------------------------------------------+ int start() { int i, k, counted_bars = IndicatorCounted(); double deviation; double sum, oldval, newres; //---- if(Bars <= BandsPeriod) return(0); //---------------- Âû÷èñëÿåì ñðåäíþþ -------------------------------- int limit = Bars - counted_bars; if(counted_bars > 0) limit++; for(i = 0; i < limit; i++) Val_BarsBuffer[i] = (High[i] - Low[i]) / Point; for(i = 0; i < limit; i++) MovingBuffer[i] = iMAOnArray(Val_BarsBuffer, Bars, BandsPeriod, BandsShift, MODE_SMA, // MODE_SMA, MODE_EMA, MODE_SMMA, MODE_LWMA i); //--------------- Âû÷èñëÿåì ñòîðîíû êàíàëà ---------------------------- i = Bars - BandsPeriod + 1; if(counted_bars > BandsPeriod - 1) i = Bars - counted_bars - 1; while(i >= 0) { sum = 0.0; k = i + BandsPeriod - 1; oldval = MovingBuffer[i]; while(k >= i) { newres = Val_BarsBuffer[k] - oldval; sum += newres * newres; k--; } deviation = BandsDeviations * MathSqrt(sum / BandsPeriod); UpperBuffer[i] = oldval + deviation; LowerBuffer[i] = oldval - deviation; i--; } //----------------- Èíäèêàòîð âû÷èñëåí -------------------------------- return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { return(0); }