VininI_ConstTickPriceM

Author: Copyright � 2008, Victor Nicolaev aka Vinin
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
VininI_ConstTickPriceM
//+------------------------------------------------------------------+
//|                                                   Const Tick.mq4 |
//|                      Copyright © 2008, Victor Nicolaev aka Vinin |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, Victor Nicolaev aka Vinin"
#property link      "e-mail: vinin@mail.ru"


#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 clrWhite
#property indicator_color2 clrRed
#property indicator_color3 clrRed
#property indicator_color4 clrWhite
#property indicator_color5 clrYellow

extern int CountTick=100;

//---- buffers
double _Open[];
double _High[];
double _Low[];
double _Close[];
double _CountBar[];
double _Volume[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   int i;
   IndicatorBuffers(6);
   for(i=0;i<4;i++)
      SetIndexStyle(i,DRAW_LINE);
   SetIndexStyle(4,DRAW_NONE);
//---
   SetIndexBuffer(0,_Open);
   SetIndexBuffer(1,_High);
   SetIndexBuffer(2,_Low);
   SetIndexBuffer(3,_Close);
   SetIndexBuffer(4,_CountBar);
   SetIndexBuffer(5,_Volume);
//---
   SetIndexLabel(0,"Open");
   SetIndexLabel(1,"High");
   SetIndexLabel(2,"Low");
   SetIndexLabel(3,"Close");

   return(0);
  }//int init() 
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   int counted_bars=IndicatorCounted();
   int i;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   if(counted_bars==0) limit-=2;
   for(i=limit;i>=0;i--)
     {
      _Volume[i]=_Volume[i+1]+Volume[i];
      _Close[i]=Close[i];
      _Open[i]=_Open[i+1];
      _High[i]=MathMax(High[i],_High[i+1]);
      _Low[i]=MathMin(Low[i],_Low[i+1]);
      _CountBar[i]=_CountBar[i+1]+1;
      CheckWeek(i);
      CheckBar(i);
      CheckTick(i);
     }
   return(0);
  }// int start()
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckTick(int pos)
  {
   if(Volume[pos]>=CountTick)
     {
      _CountBar[pos]=0;
      _Open[pos]   = Open[pos];
      _High[pos]   = High[pos];
      _Low[pos]    = Low[pos];
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckBar(int pos)
  {
   int tmp0=Ostatok(_Volume[pos+0],CountTick);
   int tmp1=Ostatok(_Volume[pos+1],CountTick);
   if(tmp0<tmp1)
     {
      if(tmp0>CountTick-tmp1)
        {
         _CountBar[pos]=0;
         _Open[pos]   = Open[pos];
         _High[pos]   = High[pos];
         _Low[pos]    = Low[pos];
        }
      else
        {
         _CountBar[pos+1]=0;
         _Open[pos+1]   = Open[pos+1];
         _High[pos+1]   = High[pos+1];
         _Low[pos+1]    = Low[pos+1];
         _CountBar[pos]=_CountBar[pos+1]+1;
         _Open[pos]   = _Open[pos+1];
         _High[pos]   = MathMax(High[pos],_High[pos+1]);
         _Low[pos]    = MathMin(Low[pos],_Low[pos+1]);
        }
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool CheckWeek(int pos)
  {
   if(TimeDayOfWeek(Time[pos+1])>TimeDayOfWeek(Time[pos+0]))
     {
      _Volume[pos]=Volume[pos];
      _CountBar[pos]=0;
      _Open[pos]   = Open[pos];
      _High[pos]   = High[pos];
      _Low[pos]    = Low[pos];
      return(true);
     }
   return(false);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int Ostatok(double Value1,double Value2)
  {
   double tmp=NormalizeDouble(Value1/Value2,0);
   if(tmp*Value2>Value1) tmp--;
   return(Value1-tmp*Value2);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void RedRaw(int pos)
  {

  }
//+------------------------------------------------------------------+

Comments