Author: ������ (urdala) ���������
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Urdala_MA
//+------------------------------------------------------------------+
//|                                                    Urdala_MA.mq4 |
//|                                        Ñåðãåé (urdala) Ðàøåâñêèé |
//|                                        http://urdala-forex.at.ua |
//+------------------------------------------------------------------+
#property copyright "Ñåðãåé (urdala) Ðàøåâñêèé"
#property link      "http://urdala-forex.at.ua"

#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_style1 2
#property indicator_color2 Red
#property indicator_style2 2
#property indicator_color3 Red
#property indicator_style3 2
#property indicator_color4 Red
#property indicator_style4 2
#property indicator_color5 Red
#property indicator_style5 2


extern bool HourMA   = true;//èíäèêàöèÿ ñðåäíåé çà ÷àñ
extern bool DayMa    = true;//èíäèêàöèÿ ñðåäíåé çà äåíü
extern bool WeekMA   = true;//èíäèêàöèÿ ñðåäíåé çà íåäåëþ
extern bool MonthMA  = true;//èíäèêàöèÿ ñðåäíåé çà ìåñÿö
extern bool YearMA   = true;//èíäèêàöèÿ ñðåäíåé çà ãîä
extern int MinPeriod = 5;   //ìèíèìàëüíûé ïåðèîä
extern int MaxPeriod = 300; //ìàêñèìàëüíûé ìåðèîä

double MAH[],MAD[],MAW[],MAM[],MAY[];
int PeriodH,PeriodD,PeriodW,PeriodM,PeriodY;
int i,i1;
///////////////////////////////////////////////////////////////////////
int init()
  {
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MAH);
   PeriodH=PeriodFunc(3600);
   SetIndexLabel(0,"Hour_"+PeriodH);
   
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,MAD);
   PeriodD=PeriodFunc(86400);
   SetIndexLabel(1,"Day_"+PeriodD);

   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,MAW);
   PeriodW=PeriodFunc(604800);
   SetIndexLabel(2,"Week_"+PeriodW);

   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,MAM);
   PeriodM=PeriodFunc(2592000);
   SetIndexLabel(3,"Month_"+PeriodM);

   SetIndexStyle(4,DRAW_LINE);
   SetIndexBuffer(4,MAY);
   PeriodY=PeriodFunc(31536000);
   SetIndexLabel(4,"Year_"+PeriodY);
   
   return(0);
  }
////////////////////////////////////////////////////////////////////////
int deinit()
  {
   
   return(0);
  }
////////////////////////////////////////////////////////////////////////
int start()
  {
   int pos=Bars-IndicatorCounted()-1;
   for (i=0;i<=pos;i++)
      {
       if(PeriodH>=MinPeriod && PeriodH<=MaxPeriod && HourMA)MAH[i]=SMA(i,PeriodH);
       if(PeriodD>=MinPeriod && PeriodD<=MaxPeriod && DayMa)MAD[i]=SMA(i,PeriodD);
       if(PeriodW>=MinPeriod && PeriodW<=MaxPeriod && WeekMA)MAW[i]=SMA(i,PeriodW);
       if(PeriodM>=MinPeriod && PeriodM<=MaxPeriod && MonthMA)MAM[i]=SMA(i,PeriodM);
       if(PeriodY>=MinPeriod && PeriodY<=MaxPeriod && YearMA)MAY[i]=SMA(i,PeriodY);
      }
   return(0);
  }
/////////////////////////////////////////////////////////////////////////
double SMA(int sh, int per)
   {
    double sma=0;
    if (Bars<=sh+per)return(EMPTY_VALUE);
    for(i1=sh; i1<sh+per; i1++)
      {
       sma+=Close[i1];
      }
    return(NormalizeDouble(sma/per,Digits));
   }
//////////////////////////////////////////////////////////////////////////
int PeriodFunc(int second)
   {
    int per,sh;
    while(!IsStopped())
      {
       per=iBarShift(Symbol(),NULL,Time[sh]-second,true);
       if(per>0)break;
       if(sh>=Bars)break;
       sh++;
      }
    return(per);
   }

Comments