Author: Copyright � 2013, HgCl2
0 Views
0 Downloads
0 Favorites
SR_Cloud
//+------------------------------------------------------------------+ 
//|                                                     SR_Cloud.mq5 | 
//|                                          Copyright © 2013, HgCl2 | 
//|                                                                  | 
//+------------------------------------------------------------------+ 
#property copyright "Copyright © 2013, HgCl2"
#property link ""
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
//---- êîëè÷åñòâî èíäèêàòîðíûõ áóôåðîâ 2
#property indicator_buffers 2 
//---- èñïîëüçîâàíî îäíî ãðàôè÷åñêîå ïîñòðîåíèå
#property indicator_plots   1
//+-----------------------------------+
//|  Ïàðàìåòðû îòðèñîâêè èíäèêàòîðà   |
//+-----------------------------------+
//---- îòðèñîâêà èíäèêàòîðà â âèäå öâåòíîãî îáëàêà
#property indicator_type1   DRAW_FILLING
//---- â êà÷åñòâå öâåòà èíäèêàòîðà èñïîëüçîâàí Khaki
#property indicator_color1  clrKhaki
//---- îòîáðàæåíèå ìåòêè èíäèêàòîðà
#property indicator_label1  "SR_Cloud"
//+-----------------------------------+
//|  Îáúÿâëåíèå ïåðå÷èñëåíèÿ          |
//+-----------------------------------+
enum Applied_price_ //Òèï êîíñòàíòû
  {
   PRICE_CLOSE_ = 1,     //Close
   PRICE_OPEN_,          //Open
  };
//+-----------------------------------+
//|  ÂÕÎÄÍÛÅ ÏÀÐÀÌÅÒÐÛ ÈÍÄÈÊÀÒÎÐÀ     |
//+-----------------------------------+
input double k_std=1.0;
input Applied_price_ Price=PRICE_OPEN_;
//+-----------------------------------+
double m[10000];
double o[10000];
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
int  min_rates_total;
//---- îáúÿâëåíèå äèíàìè÷åñêèõ ìàññèâîâ, êîòîðûå áóäóò â 
// äàëüíåéøåì èñïîëüçîâàíû â êà÷åñòâå èíäèêàòîðíûõ áóôåðîâ
double ExtABuffer[];
double ExtBBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//---- Èíèöèàëèçàöèÿ ïåðåìåííûõ íà÷àëà îòñ÷¸òà äàííûõ
   min_rates_total=2;

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(0,ExtABuffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(ExtABuffer,true);

//---- ïðåâðàùåíèå äèíàìè÷åñêîãî ìàññèâà â èíäèêàòîðíûé áóôåð
   SetIndexBuffer(1,ExtBBuffer,INDICATOR_DATA);
//---- èíäåêñàöèÿ ýëåìåíòîâ â áóôåðå êàê â òàéìñåðèè
   ArraySetAsSeries(ExtBBuffer,true);

//---- îñóùåñòâëåíèå ñäâèãà íà÷àëà îòñ÷¸òà îòðèñîâêè èíäèêàòîðà
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total);

//--- ñîçäàíèå èìåíè äëÿ îòîáðàæåíèÿ â îòäåëüíîì ïîäîêíå è âî âñïëûâàþùåé ïîäñêàçêå
   IndicatorSetString(INDICATOR_SHORTNAME,"SR_Cloud("+DoubleToString(k_std,4)+")");
//--- îïðåäåëåíèå òî÷íîñòè îòîáðàæåíèÿ çíà÷åíèé èíäèêàòîðà
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---- çàâåðøåíèå èíèöèàëèçàöèè
  }
//+------------------------------------------------------------------+  
//| Custom indicator iteration function                              | 
//+------------------------------------------------------------------+  
int OnCalculate(
                const int rates_total,    // êîëè÷åñòâî èñòîðèè â áàðàõ íà òåêóùåì òèêå
                const int prev_calculated,// êîëè÷åñòâî èñòîðèè â áàðàõ íà ïðåäûäóùåì òèêå
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &Tick_Volume[],
                const long &Volume[],
                const int &Spread[]
                )
  {
//---- ïðîâåðêà êîëè÷åñòâà áàðîâ íà äîñòàòî÷íîñòü äëÿ ðàñ÷¸òà
   if(rates_total<min_rates_total) return(0);

//---- Îáúÿâëåíèå ïåðåìåííûõ ñ ïëàâàþùåé òî÷êîé  
   static double LastHigh,LastLow;
   double g1=0.0,g2=0.0;
//---- Îáúÿâëåíèå öåëûõ ïåðåìåííûõ
   int limit,x=0;

//---- ðàñ÷¸ò ñòàðòîâîãî íîìåðà limit äëÿ öèêëà ïåðåñ÷¸òà áàðîâ
   if(prev_calculated>rates_total || prev_calculated<=0)// ïðîâåðêà íà ïåðâûé ñòàðò ðàñ÷¸òà èíäèêàòîðà
     {
      limit=rates_total-min_rates_total-1; // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà âñåõ áàðîâ
      for(int bar=rates_total-1; bar>=0 && !IsStopped(); bar--)
        {
         ExtABuffer[bar]=0.0;
         ExtBBuffer[bar]=0.0;
        }
      LastHigh=0;
      LastLow=999999999;
     }
   else limit=rates_total-prev_calculated;  // ñòàðòîâûé íîìåð äëÿ ðàñ÷¸òà òîëüêî íîâûõ áàðîâ

//---- èíäåêñàöèÿ ýëåìåíòîâ â ìàññèâàõ êàê â òàéìñåðèÿõ  
   ArraySetAsSeries(High,true);
   ArraySetAsSeries(Low,true);
   if(Price==PRICE_OPEN_) ArraySetAsSeries(Open,true);
   else ArraySetAsSeries(Close,true);

//---- îñíîâíîé öèêë ðàñ÷¸òà èíäèêàòîðà
   for(int bar=limit; bar>=0 && !IsStopped(); bar--)
     {
      LastHigh=MathMax(LastHigh,High[bar+1]);
      LastLow=MathMin(LastLow,Low[bar+1]);
      
      MqlDateTime tm0,tm1;
      TimeToStruct(Time[bar],tm0);
      TimeToStruct(Time[bar+1],tm1);

      if(tm0.day!=tm1.day)
        {
         x++;
         if(Price==PRICE_OPEN_) o[x]=Open[bar];
         else o[x]=Close[bar];
         m[x]=LastHigh-o[x-1];

         if(LastHigh-o[x-1]>o[x-1]-LastLow) m[x]=o[x-1]-LastLow;

         LastLow=999999999;
         LastHigh=0;

         if(x>15)
           {
            double a1 = m[x];
            double a2 = m[x-1];
            double a3 = m[x-2];
            double a4 = m[x-3];
            double a5 = m[x-4];
            double a6 = m[x-5];
            double a7 = m[x-6];
            double a8 = m[x-7];
            double a9 = m[x-8];
            double a10 = m[x-9];
            double a11 = m[x-10];
            double a12 = m[x-11];
            double a13 = m[x-12];
            double a14 = m[x-13];
            //----
            double ax = 0.1111111 * (a1+a2+a3+a4+a5+a6+a7+a8+a9);
            double ay = 0.0714285 * (a1+a2+a3+a4+a5+a6+a7+a8+a9+a10+a11+a12+a13+a14);
            //----
            double stx=0.1111111 *(( a1-ax) *(a1-ax)+(a2-ax) *(a2-ax)+(a3-ax) *(a3-ax)+
                                   (a4-ax) *(a4-ax)+(a5-ax) *(a5-ax)+(a6-ax) *(a6-ax)+(a7-ax) *(a7-ax)
                                   +(a8-ax) *(a8-ax)+(a9-ax) *(a9-ax));
            //----
            double sty=0.0714285 *(( a1-ay) *(a1-ay)+(a2-ay) *(a2-ay)+(a3-ay) *(a3-ay)+
                                   (a4-ay) *(a4-ay)+(a5-ay) *(a5-ay)+(a6-ay) *(a6-ay)+(a7-ay) *(a7-ay)
                                   +(a8-ay) *(a8-ay)+(a9-ay) *(a9-ay)+(a10-ay) *(a10-ay)+(a11-ay) *(a11-ay)
                                   +(a12-ay) *(a12-ay)+(a13-ay) *(a13-ay)+(a14-ay) *(a14-ay));
            //----
            double st1 = ax + k_std * MathPow(stx,0.5);
            double st2 = ay + k_std * MathPow(sty,0.5);
            double std=st2;
            if(st1>st2) std=st1;
            g1 = o[x]+std;
            g2 = o[x]-std;
           }
        }

      if(x>15)
        {
         ExtABuffer[bar]=g1;
         ExtBBuffer[bar]=g2;
        }
     }
//----    
   return(rates_total);
  }
//+------------------------------------------------------------------+

Comments