PriceGrid1_Plus

Author: Copyright � 2016, Nikolay Kositsin
0 Views
0 Downloads
0 Favorites
PriceGrid1_Plus
//+------------------------------------------------------------------+
//|                                              PriceGrid1_Plus.mq5 |
//|                               Copyright © 2016, Nikolay Kositsin | 
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+
//---- àâòîðñòâî èíäèêàòîðà
#property copyright "Copyright © 2016, Nikolay Kositsin"
//---- ññûëêà íà ñàéò àâòîðà
#property link      "farria@mail.redcom.ru"
//---- íîìåð âåðñèè èíäèêàòîðà
#property version   "1.00"
//----
#property description "Ñåòêà èç êðóãëûõ öåíîâûõ óðîâíåé" 
//---- îòðèñîâêà èíäèêàòîðà â ãëàâíîì îêíå
#property indicator_chart_window 
//---- äëÿ ðàñ÷¸òà è îòðèñîâêè èíäèêàòîðà íå èñïîëüçóþòñÿ áóôåðû
#property indicator_buffers 0
//---- íå èñïîëüçóþòñÿ ãðàôè÷åñêèå ïîñòðîåíèÿ
#property indicator_plots  0
//+-----------------------------------+
//|  îáúÿâëåíèå ïåðå÷èñëåíèÿ          |
//+-----------------------------------+
enum Number
  {
   Number_0,
   Number_1,
   Number_2,
   Number_3
  };
//+-----------------------------------+
//|  îáúÿâëåíèå ïåðå÷èñëåíèÿ          |
//+-----------------------------------+  
enum WIDTH
  {
   Width_1=1, //1
   Width_2,   //2
   Width_3,   //3
   Width_4,   //4
   Width_5    //5
  };
//+-----------------------------------+
//|  îáúÿâëåíèå ïåðå÷èñëåíèÿ          |
//+-----------------------------------+
enum STYLE
  {
   SOLID_,//Ñïëîøíàÿ ëèíèÿ
   DASH_,//Øòðèõîâàÿ ëèíèÿ
   DOT_,//Ïóíêòèðíàÿ ëèíèÿ
   DASHDOT_,//Øòðèõ-ïóíêòèðíàÿ ëèíèÿ
   DASHDOTDOT_   //Øòðèõ-ïóíêòèðíàÿ ëèíèÿ ñ äâîéíûìè òî÷êàìè
  };
//+----------------------------------------------+
//| Âõîäíûå ïàðàìåòðû èíäèêàòîðà                 |
//+----------------------------------------------+
input string  SirName="PriceGrid1_Plus";     //Ïåðâàÿ ÷àñòü èìåíè ãðàôè÷åñêèõ îáúåêòîâ
input uint  Digits_=2;                       //ðàçðÿä ñåòêè
input uint  Total=200;                       //êîëè÷åñòâî áëîêîâ ñåòêè ñâåðõó èëè ñíèçó îò öåíû
//----
input color  Color_A = clrSlateBlue;         //öâåò óðîâíÿ 1 
input bool ShowPriceLable_A = true;          //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 1 íà öåíîâîì ãðàôèêå
input color  Color_AL = clrBlueViolet;       //öâåò öåíîâîé ìåòêè 1 
input STYLE  Style_A = DASHDOTDOT_;          //ñòèëü ëèíèè óðîâíÿ 1
input WIDTH  Width_A = Width_1;              //òîëùèíà ëèíèè óðîâíÿ 1
//----
input color  Color_B = clrDarkOrange;        //öâåò óðîâíÿ 2
input bool ShowPriceLable_B = true;          //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 2 íà öåíîâîì ãðàôèêå
input color  Color_BL = clrGold;             //öâåò öåíîâîé ìåòêè 2
input STYLE  Style_B = DASH_;                //ñòèëü ëèíèè óðîâíÿ 2
input WIDTH  Width_B = Width_1;              //òîëùèíà ëèíèè óðîâíÿ 2
//----
input color  Color_C = clrMagenta;           //öâåò óðîâíÿ 3
input bool ShowPriceLable_C = true;          //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 3 íà öåíîâîì ãðàôèêå
input color  Color_CL = clrMagenta;          //öâåò öåíîâîé ìåòêè 3
input STYLE  Style_C = SOLID_;               //ñòèëü ëèíèè óðîâíÿ 3
input WIDTH  Width_C = Width_1;              //òîëùèíà ëèíèè óðîâíÿ 3
//----
input color  Color_D = clrRed;               //öâåò óðîâíÿ 4
input bool ShowPriceLable_D = true;          //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 4 íà öåíîâîì ãðàôèêå
input color  Color_DL = clrRed;              //öâåò öåíîâîé ìåòêè 4
input STYLE  Style_D = SOLID_;               //ñòèëü ëèíèè óðîâíÿ 4
input WIDTH  Width_D = Width_1;              //òîëùèíà ëèíèè óðîâíÿ 4
//----
input color  Color_E = clrLime;              //öâåò óðîâíÿ 5
input bool ShowPriceLable_E = true;          //îòîáðàæåíèå çíà÷åíèÿ öåíîâîé ìåòêè 5 íà öåíîâîì ãðàôèêå
input color  Color_EL = clrLime;             //öâåò öåíîâîé ìåòêè 5
input STYLE  Style_E = SOLID_;               //ñòèëü ëèíèè óðîâíÿ 5
input WIDTH  Width_E = Width_1;              //òîëùèíà ëèíèè óðîâíÿ 5
//----
input uint FontSize = 2;                     //ðàçìåð öåíîâûõ ìåòîê
input int  Shift = 5;                        //Ñäâèã öåíîâûõ ìåòîê ïî ãîðèçîíòàëè â áàðàõ
input bool ShowLineInfo = true;              //îòîáðàæåíèå çíà÷åíèÿ óðîâíÿ íà öåíîâîì ãðàôèêå
//+----------------------------------------------+
color clr,clrl;
STYLE Style;
WIDTH Width;
bool ShowPriceLable;
int middle,size,Normalize;
string ObjectNames[][2];
double PointPow10,PointPow100,PointPow1000,PointPow10000,PointPow100000,PriceGrid[],Price[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+  
void OnInit()
  {
//---- ðàñïðåäåëåíèå ïàìÿòè ïîä ìàññèâû ïåðåìåííûõ  
   size=int(Total*2);
   ArrayResize(ObjectNames,size);
   ArrayResize(PriceGrid,size);
   ArrayResize(Price,size);
//---- èíèöèàëèçàöèÿ èì¸í
   for(int count=0; count<size; count++) ObjectNames[count][0]=SirName+" PriceLine "+string(count);
   for(int count=0; count<size; count++) ObjectNames[count][1]=SirName+" PriceLable "+string(count);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ         
   PointPow10=_Point*MathPow(10,Digits_);
   PointPow100=PointPow10*10;
   PointPow1000=PointPow10*100;
   PointPow10000=PointPow10*1000;
   PointPow100000=PointPow10*10000;
   middle=(size/2)-1;
   Normalize=int(_Digits-Digits_);
//---- èíèöèàëèçàöèÿ ïåðåìåííûõ         
   for(int count=middle; count<size; count++) PriceGrid[count]=+NormalizeDouble(PointPow10*(count-middle),Normalize);
   for(int count=middle-1; count>=0; count--) PriceGrid[count]=-NormalizeDouble(PointPow10*(middle-count),Normalize);
//----
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+    
void OnDeinit(const int reason)
  {
//----
   for(int count=0; count<size; count++) ObjectDelete(0,ObjectNames[count][0]);
   for(int count=0; count<size; count++) ObjectDelete(0,ObjectNames[count][1]);
//----
   ChartRedraw(0);
  }
//+------------------------------------------------------------------+
//| 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[]
                )
  {
//----   
   static double  res_prev=0.0;
   double res=NormalizeDouble(PointPow10*MathCeil(close[rates_total-1]/PointPow10),Normalize);
   if(!(res-res_prev)) return(rates_total);
   res_prev=res;
   for(int count=0; count<size; count++) Price[count]=NormalizeDouble(res+PriceGrid[count],Normalize);
   datetime time0=time[rates_total-1]+PeriodSeconds()*Shift;
   datetime timeX=time[0];
   for(int count=0; count<size; count++)
     {
      if(!NormalizeDouble(Price[count]-PointPow100000*MathCeil(Price[count]/PointPow100000),Normalize))
        {
         clr=Color_E;
         clrl=Color_EL;
         ShowPriceLable=ShowPriceLable_E;
         Style=Style_E;
         Width=Width_E;
        }
      else if(!NormalizeDouble(Price[count]-PointPow10000*MathCeil(Price[count]/PointPow10000),Normalize))
        {
         clr=Color_D;
         clrl=Color_DL;
         ShowPriceLable=ShowPriceLable_D;
         Style=Style_D;
         Width=Width_D;
        }
      else if(!NormalizeDouble(Price[count]-PointPow1000*MathCeil(Price[count]/PointPow1000),Normalize))
        {
         clr=Color_C;
         clrl=Color_CL;
         ShowPriceLable=ShowPriceLable_C;
         Style=Style_C;
         Width=Width_C;
        }
      else  if(!NormalizeDouble(Price[count]-PointPow100*MathCeil(Price[count]/PointPow100),Normalize))
        {
         clr=Color_B;
         clrl=Color_BL;
         ShowPriceLable=ShowPriceLable_B;
         Style=Style_B;
         Width=Width_B;
        }
      else
        {
         clr=Color_A;
         clrl=Color_AL;
         ShowPriceLable=ShowPriceLable_A;
         Style=Style_A;
         Width=Width_A;
        }
      string info="";
      if(ShowLineInfo) info=ObjectNames[count][0]+" "+DoubleToString(Price[count],Normalize);
      SetTline(0,ObjectNames[count][0],0,timeX,Price[count],time0,Price[count],clr,Style,Width,info);
      if(ShowPriceLable)
        {
         if(ShowLineInfo) info=ObjectNames[count][1]+" "+DoubleToString(Price[count],Normalize);
         SetRightPrice(0,ObjectNames[count][1],0,time0,Price[count],clrl,FontSize,info);
        }
     }
//----
   ChartRedraw(0);
   return(rates_total);
  }
//+------------------------------------------------------------------+
//|  Ñîçäàíèå òðåíäîâîé ëèíèè                                        |
//+------------------------------------------------------------------+
void CreateTline
(
 long     chart_id,      // èäåíòèôèêàòîð ãðàôèêà
 string   name,          // èìÿ îáúåêòà
 int      nwin,          // èíäåêñ îêíà
 datetime time1,         // âðåìÿ 1 öåíîâîãî óðîâíÿ
 double   price1,        // 1 öåíîâîé óðîâåíü
 datetime time2,         // âðåìÿ 2 öåíîâîãî óðîâíÿ
 double   price2,        // 2 öåíîâîé óðîâåíü
 color    Color,         // öâåò ëèíèè
 int      style,         // ñòèëü ëèíèè
 int      width,         // òîëùèíà ëèíèè
 string   text           // òåêñò
 )
//---- 
  {
//----
   ObjectCreate(chart_id,name,OBJ_TREND,nwin,time1,price1,time2,price2);
   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
   ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style);
   ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
   ObjectSetInteger(chart_id,name,OBJPROP_BACK,true);
//ObjectSetInteger(chart_id,name,OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(chart_id,name,OBJPROP_RAY,true);
//ObjectSetInteger(chart_id,name,OBJPROP_SELECTED,true);
//ObjectSetInteger(chart_id,name,OBJPROP_SELECTABLE,true);
   ObjectSetInteger(chart_id,name,OBJPROP_ZORDER,true);
//----
  }
//+------------------------------------------------------------------+
//|  Ïåðåóñòàíîâêà òðåíäîâîé ëèíèè                                   |
//+------------------------------------------------------------------+
void SetTline
(
 long     chart_id,      // èäåíòèôèêàòîð ãðàôèêà
 string   name,          // èìÿ îáúåêòà
 int      nwin,          // èíäåêñ îêíà
 datetime time1,         // âðåìÿ 1 öåíîâîãî óðîâíÿ
 double   price1,        // 1 öåíîâîé óðîâåíü
 datetime time2,         // âðåìÿ 2 öåíîâîãî óðîâíÿ
 double   price2,        // 2 öåíîâîé óðîâåíü
 color    Color,         // öâåò ëèíèè
 int      style,         // ñòèëü ëèíèè
 int      width,         // òîëùèíà ëèíèè
 string   text           // òåêñò
 )
//---- 
  {
//----
   if(ObjectFind(chart_id,name)==-1) CreateTline(chart_id,name,nwin,time1,price1,time2,price2,Color,style,width,text);
   else
     {
      ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
      ObjectMove(chart_id,name,0,time1,price1);
      ObjectMove(chart_id,name,1,time2,price2);
      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
      ObjectSetInteger(chart_id,name,OBJPROP_STYLE,style);
      ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,width);
     }
//----
  }
//+------------------------------------------------------------------+
//|  RightPrice creation                                             |
//+------------------------------------------------------------------+
void CreateRightPrice(long chart_id,// chart ID
                      string   name,              // object name
                      int      nwin,              // window index
                      datetime time,              // price level time
                      double   price,             // price level
                      color    Color,             // price color
                      int      fontsize,          // price size
                      string   text               // òåêñò
                      )
//---- 
  {
//----
   ObjectCreate(chart_id,name,OBJ_ARROW_RIGHT_PRICE,nwin,time,price);
   ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
   ObjectSetInteger(chart_id,name,OBJPROP_BACK,true);
   ObjectSetInteger(chart_id,name,OBJPROP_WIDTH,fontsize);
   ObjectSetString(chart_id,name,OBJPROP_TEXT,text);
//----
  }
//+------------------------------------------------------------------+
//|  RightPrice reinstallation                                       |
//+------------------------------------------------------------------+
void SetRightPrice(long chart_id,// chart ID
                   string   name,              // object name
                   int      nwin,              // window index
                   datetime time,              // price level time
                   double   price,             // price level
                   color    Color,             // price color
                   int      fontsize,          // price size
                   string   text               // òåêñò
                   )
//---- 
  {
//----
   if(ObjectFind(chart_id,name)==-1) CreateRightPrice(chart_id,name,nwin,time,price,Color,fontsize,text);
   else
     {
      ObjectMove(chart_id,name,0,time,price);
      ObjectSetInteger(chart_id,name,OBJPROP_COLOR,Color);
     }

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

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 ---