Author: Roman.
Price Data Components
Series array that contains open time of each barSeries array that contains the lowest prices of each bar
0 Views
0 Downloads
0 Favorites
ColorsDay
ÿþ//+------------------------------------------------------------------+

//| Open code                                                        |

//+------------------------------------------------------------------+

#property strict

#property version     "1.0"

#property copyright   "Roman."

#property link        "qwer1234_4@bk.ru"

#property description "If you like the indicator, you can thank the author"

#property description "Webmoney: Z330494414179, R222585888867"

#property description " "

#property description "Thank you very much."

#property indicator_chart_window

#property indicator_plots 0

//+------------------------------------------------------------------+

//| Custom indicator initialization function                         |

//+------------------------------------------------------------------+

extern color LowColorMon = C'0x25,0x00,0x00';//>=545;L=8: 86=89 &25B

extern color HighColorMon = C'0x25,0x00,0x25';//>=545;L=8: 5@E=89 &25B

extern color LowColorTu = clrBlack;//B>@=8: 86=89 &25B

extern color HighColoTu = C'0x25,0x25,0x00';//B>@=8: 5@E=89 &25B

extern color LowColorWe = C'0x00,0x25,0x00';//!@540 86=89 &25B

extern color HighColorWe = clrBlack;//!@540 5@E=89 &25B

extern color LowColorTh = clrBlack;//'5B25@3 86=89 &25B

extern color HighColorth = C'0x00,0x25,0x25';//'5B25@3 5@E=89 &25B

extern color LowColorFr = C'0x00,0x25,0x50';//OB=8F0 86=89 &25B

extern color HighColorFr = C'0x50,0x25,0x00';//OB=8F0 5@E=89 &25B

extern bool WeekRew = false;// 0745;OBL =545;8



struct Colors

  {

   uint              UpBitmap[],DnBitmap[];

   string            Name[2];

   uchar             StartR, StartG, StartB, EndR, EndG, EndB;

  };



Colors Storage[5];

int OnInit()

  {

   color IC[5][2];



   IC[0][0] = LowColorMon;

   IC[0][1] = HighColorMon;

   IC[1][0] = LowColorTu;

   IC[1][1] = HighColoTu;

   IC[2][0] = LowColorWe;

   IC[2][1] = HighColorWe;

   IC[3][0] = LowColorTh;

   IC[3][1] = HighColorth;

   IC[4][0] = LowColorFr;

   IC[4][1] = HighColorFr;



   for(int i = 0; i < 5; i ++)

     {

      Storage[i].Name[0] = "::Up" + IntegerToString(i);

      Storage[i].Name[1] = "::Dn" + IntegerToString(i);

      Storage[i].StartR = (uchar)IC[i][0];

      Storage[i].StartG = (uchar)(IC[i][0]>>8);

      Storage[i].StartB = (uchar)(IC[i][0]>>16);

      Storage[i].EndR = (uchar)IC[i][1];

      Storage[i].EndG = (uchar)(IC[i][1]>>8);

      Storage[i].EndB = (uchar)(IC[i][1]>>16);

     }

//---

   return(INIT_SUCCEEDED);

  }



//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

void Draw()

  {

   int Y=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS),

       X=(int)ChartGetInteger(0,CHART_WIDTH_IN_PIXELS),

       F=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR),

       Prev = 0, k = F, Cx, Cy, CxP, Cxp, sub;



   while(k >= 0)

     {

      if(TimeDayOfWeek(iTime(Symbol(),Period(),k))!=TimeDayOfWeek(iTime(Symbol(),Period(),k+1)))

        {

         if(Prev!=0)

            break;

         Prev = k;

        }

      k--;

     }



   if(Prev==0||k<0)

      return;



   ChartTimePriceToXY(0,0,iTime(Symbol(),Period(),k),iLow(Symbol(),Period(),k),Cx,Cy);

   ChartTimePriceToXY(0,0,iTime(Symbol(),Period(),Prev),iLow(Symbol(),Period(),Prev),CxP,Cy);

   int New = Cx - CxP;



   ChartTimePriceToXY(0,0,iTime(Symbol(),Period(),F),iLow(Symbol(),Period(),F),Cx,Cy);

   ChartTimePriceToXY(0,0,iTime(Symbol(),Period(),F+1),iLow(Symbol(),Period(),F+1),Cxp,Cy);

   int CpC = Cx - Cxp;



   for(int i = 0; i < 5; i ++)

     {

      ArrayResize(Storage[i].UpBitmap,Y*New);

      ArrayResize(Storage[i].DnBitmap,Y*New);

     };



   ObjectsDeleteAll(0,"map");



   for(int i = 0; i * New + CxP < X + 2 * New; i ++)

     {

      datetime time;

      double p;

      if(!ChartXYToTimePrice(0,i * New + CxP - New,0,sub,time,p))

         time=iTime(Symbol(),Period(),F);



      int DW = TimeDayOfWeek(time);



      DW = DW < 2? 0:DW > 4? 4: DW - 1;

      string D = "map" + IntegerToString(i) + "up";

      ObjectCreate(0,D,OBJ_BITMAP_LABEL,0,0,0);

      ObjectSetString(0,D,OBJPROP_BMPFILE,WeekRew?(i%2!=1?Storage[DW].Name[0]:Storage[DW].Name[1]):Storage[DW].Name[0]);

      ObjectSetInteger(0,D,OBJPROP_XDISTANCE,i * New + CxP - New - CpC/2);

      ObjectSetInteger(0,D,OBJPROP_YDISTANCE,0);

      ObjectSetInteger(0,D,OBJPROP_BACK,true);

     }



   for(int j = 0; j < 5; j ++)

     {

      double dR = Storage[j].StartR!=Storage[j].EndR?(((double)(Storage[j].StartR-Storage[j].EndR)/(double)(Y))):0;

      double dG = Storage[j].StartG!=Storage[j].EndG?(((double)(Storage[j].StartG-Storage[j].EndG)/(double)(Y))):0;

      double dB = Storage[j].StartB!=Storage[j].EndB?(((double)(Storage[j].StartB-Storage[j].EndB)/(double)(Y))):0;

      for(int i = 0; i < Y; i++)

        {

         uint a = 0xFF000000 +

                  ((uint(Storage[j].EndR+(dR!=0?(double(i)*dR):0)))<<16)+

                  ((uint(Storage[j].EndG+(dG!=0?(double(i)*dG):0)))<<8)+

                  (uint(Storage[j].EndB+(dB!=0?(double(i)*dB):0)));

         ArrayFill(Storage[j].UpBitmap, New * i, New, a);

         ArrayFill(Storage[j].DnBitmap, New * (Y-1-i), New, a);

        }

      ResourceFree(Storage[j].Name[0]);

      ResourceCreate(Storage[j].Name[0],Storage[j].UpBitmap,New,Y,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

      ResourceFree(Storage[j].Name[1]);

      ResourceCreate(Storage[j].Name[1],Storage[j].DnBitmap,New,Y,0,0,0,COLOR_FORMAT_XRGB_NOALPHA);

     }

   ChartRedraw();

  }

//+------------------------------------------------------------------+

//|                                                                  |

//+------------------------------------------------------------------+

int TimeDayOfWeek(datetime time)

  {

   MqlDateTime ST;

   TimeToStruct(time,ST);

   return ST.day_of_week;

  }

//+------------------------------------------------------------------+

//| 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[])

  {

//---

   Draw();

//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+

//| ChartEvent function                                              |

//+------------------------------------------------------------------+

void OnChartEvent(const int id,

                  const long &lparam,

                  const double &dparam,

                  const string &sparam)

  {

//---

   if(id==CHARTEVENT_CHART_CHANGE)

      Draw();

  }

//+------------------------------------------------------------------+

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