VininI ConstTickPrice

Author: Copyright � 2008, Victor Nicolaev aka Vinin
VininI ConstTickPrice
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
VininI ConstTickPrice
//+------------------------------------------------------------------+
//|                                        VininI ConstTickPrice.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 2
#property indicator_color1 White
#property indicator_color2 White

extern int Price_Mode=0;
extern int CountTick=100;
extern bool DrawAll=false;


//---- buffers
double Price[];
double _CountBar[];
double _Volume[];




//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- drawing settings
   int i;
   IndicatorBuffers(3);
   SetIndexStyle(0,DRAW_NONE);
   SetIndexStyle(1,DRAW_NONE);
   if (!SetIndexBuffer(0,Price)) Print("Íåâîçìîæíî èíèöèàëèçèðîâàòü ìàññèâ Price");
   if (!SetIndexBuffer(1,_CountBar)) Print("Íåâîçìîæíî èíèöèàëèçèðîâàòü ìàññèâ CountBar");
   if (!SetIndexBuffer(2,_Volume)) Print("Íåâîçìîæíî èíèöèàëèçèðîâàòü ìàññèâ Volume");

   SetIndexLabel(0,"Price");
   Price_Mode=MathMax(Price_Mode,0);
   Price_Mode=MathMin(Price_Mode,6);
   return(0); }//int init() 
//+------------------------------------------------------------------+
int start() {
   int limit;
   int counted_bars=IndicatorCounted();
   int i, pos;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   for (i = limit;i>=0;i--){
      _Volume[i]=_Volume[i+1]+Volume[i];      
      _CountBar[i]=_CountBar[i+1]+1;
      CheckWeek(i);
      CheckBar(i);
      CheckTick(i);
      RedRaw(i);

      
   }
   return(0); 
}// int start()

void RedRaw(int pos){
   int i;
   if (!DrawAll) {
      for (i=1;i<=_CountBar[pos];i++) {
         Price[pos+i]=EMPTY_VALUE; 
      }
   }
   Price[pos]=fPrice(Price_Mode,pos,_CountBar[pos]);
}

void CheckWeek(int pos){
   if (TimeDayOfWeek(Time[pos+1])>TimeDayOfWeek(Time[pos+0])) {
      _Volume[pos] = Volume[pos];
      _CountBar[pos]   = 0;
      RedRaw(pos+1);
    }         
 }

void 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;
         RedRaw(pos+1);
      }
      else {
         _CountBar[pos+1] = 0;
         _CountBar[pos]   = 1;
         RedRaw(pos+2);
         RedRaw(pos+1);
      }
   }
}

void CheckTick(int pos) {
   if (Volume[pos]>CountTick) {
      _CountBar[pos]=0;
      RedRaw(pos+1);
   }
}

int Ostatok(double Value1, double Value2){
   double tmp=NormalizeDouble(Value1/Value2,0);
   if (tmp*Value2>Value1) tmp--;
   return(Value1-tmp*Value2);
}

double fPrice(int Price_Mode, int pos, int shift) {
   double   _CLOSE, _OPEN, _HIGH, _LOW, _MEDIAN, _TYPICAL, _WEIGHTED; 
   _OPEN=Open[pos+shift];
   if (shift>0) {
      _HIGH=High[iHighest(NULL,0,MODE_HIGH,shift,pos)]; 
      _LOW=Low[  iLowest( NULL,0,MODE_LOW, shift,pos)];
    }  
    else {
      _HIGH=High[pos];
      _LOW=Low[pos];
   }
   _CLOSE=Close[pos];
   
   _MEDIAN=(_HIGH+_LOW)/2.0;
   _TYPICAL=(_HIGH+_LOW+_CLOSE)/3.0;
   _WEIGHTED=(_HIGH+_LOW+2.0*_CLOSE)/4.0;
   switch (Price_Mode) {
      case PRICE_CLOSE:    return(_CLOSE);
      case PRICE_OPEN:     return(_OPEN);
      case PRICE_HIGH:     return(_HIGH);
      case PRICE_LOW:      return(_LOW);
      case PRICE_MEDIAN:   return(_MEDIAN);
      case PRICE_TYPICAL:  return(_TYPICAL);
      case PRICE_WEIGHTED: return(_WEIGHTED);
   }
   return(0);
}

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---