Navigation´╝ÜHome > Content >

ozymandias_v2.mq4

Time: 2010-11-15 | Download file:ozymandias_v2.mq4

//+------------------------------------------------------------------+
//|                                                Ozymandias v2.mq4 |
//|                                      Copyright 2014, GoldnMoney  |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, GoldnMoney"
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 clrChartreuse
#property indicator_width1 2
#property indicator_color2 clrOrange
#property indicator_width2 2
#property indicator_color3 clrChartreuse
#property indicator_width3 0
#property indicator_color4 clrOrange
#property indicator_width4 0

extern int Length=2;

double up[],down[],zoneup[],zonedown[],map[];
double bandup[],banddown[];
double minhi=0,maxlo=0;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorBuffers(5);
   SetIndexBuffer(0,up);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(1,down);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(2,zoneup);
   SetIndexStyle(2,DRAW_LINE,STYLE_DASHDOT);
   SetIndexBuffer(3,zonedown);
   SetIndexStyle(3,DRAW_LINE,STYLE_DASHDOT);
   SetIndexBuffer(4,map,INDICATOR_CALCULATIONS);

   SetIndexLabel(0,"Up");
   SetIndexLabel(1,"Down");
   SetIndexLabel(2,"ZoneUp");
   SetIndexLabel(3,"ZoneDown");

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   double lowprice,highprice,lowma,highma,zone;

   if(prev_calculated==0)
      int limit=rates_total-Length-1;
   if(prev_calculated>0)
      limit=rates_total-prev_calculated;

   for(int i=limit; i>=0; i--)
     {
      lowprice=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,Length,i));
      highprice=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Length,i));

      lowma=iMA(NULL,0,Length,0,MODE_SMA,PRICE_LOW,i);
      highma=iMA(NULL,0,Length,0,MODE_SMA,PRICE_HIGH,i);

      zone=iATR(NULL,0,100,i)/2;

      maxlo=MathMax(lowprice,maxlo);
      minhi=MathMin(highprice,minhi);

      map[i]=map[i+1];

      if(highmaminhi && close[i]>high[i+1])
        {
         map[i]=1;
         minhi=highprice;
        }

      if(map[i]>0 && map[i+1]<0)
        {
         up[i]=down[i+1];
         up[i+1]=up[i];
         zoneup[i]=zonedown[i+1];
        }

      if(map[i]>0 && map[i+1]>0)
        {
         up[i]=MathMax(maxlo,up[i+1]);
         zoneup[i]=up[i]-zone;    
        }

      if(map[i]<0 && map[i+1]>0)
        {
         down[i]=up[i+1];
         down[i+1]=down[i];
         zonedown[i]=zoneup[i+1];
        }

      if(map[i]<0 && map[i+1]<0)
        {
         down[i]=MathMin(minhi,down[i+1]);
         zonedown[i]=down[i]+zone;
        }
     }
   return(rates_total);
  }
//+------------------------------------------------------------------+

Recommend