Author: Roman.
Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Bars
ÿþ//+------------------------------------------------------------------+

//|                                                     Futprint.mq4 |

//|                        Copyright 2018, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

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

#property strict

#property version     "1.0"

#property copyright   "Roman."



#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."



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

//|                                                                  |

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

class DayList

  {

public:

   double            Days[5];

                     DayList()

     {

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

         Days[i] = 0;

     }

   void                 AddDayWeek(int Dayh,double Monday)

     {

      switch(Dayh)

        {

         case 1:

            Days[0]+=Monday;

            break;

         case 2:

            Days[1]+=Monday;

            break;

         case 3:

            Days[2]+=Monday;

            break;

         case 4:

            Days[3]+=Monday;

            break;

         case 5:

            Days[4]+=Monday;

            break;

        }

     }

   void              AddMo(double Monday) { Days[0]=Monday; }

   void              AddTu(double Monday) { Days[1]=Monday; }

   void              AddWe(double Monday) { Days[2]=Monday; }

   void              AddTh(double Monday) { Days[3]=Monday; }

   void              AddFr(double Monday) { Days[4]=Monday; }



   void              Draw(string Name,int x, int y, int dx, int dy, int dz, int Zero)

     {

      int Min = ArrayMinimum(Days),

          Max = ArrayMaximum(Days);

      double        Length = Days[Max]<0?-Days[Min]:Days[Min]>0?Days[Max]:Days[Max]-Days[Min];

      if(Length==0)

         return;

      double Pix = ((double)dy)/Length;



      int Shir = (dy-4*dz)/5;

      if(Zero == 0)

        {

         Bar(Name + " Mo",x,y+dy-int(Pix*((double)Days[0])),Shir,int(Pix*((double)Days[0])),clrRed);

         Bar(Name + " Tu",x+int(0.2*double(dx)),y-int(Pix*((double)Days[1]))+dy,Shir,int(Pix*((double)Days[1])),clrOrange);

         Bar(Name + " We",x+int(0.4*double(dx)),y-int(Pix*((double)Days[2]))+dy,Shir,int(Pix*((double)Days[2])),clrYellow);

         Bar(Name + " Th",x+int(0.6*double(dx)),y-int(Pix*((double)Days[3]))+dy,Shir,int(Pix*((double)Days[3])),clrGreen);

         Bar(Name + " Fr",x+int(0.8*double(dx)),y-int(Pix*((double)Days[4]))+dy,Shir,int(Pix*((double)Days[4])),clrCyan);



         LabelCreate(Name + " Mo+", x+(Shir-dz)/2-12, y + dy - int(Pix*((double)Days[0])) - 3, (string)Days[0], clrMagenta, 90, 18, "Arial", ANCHOR_LEFT_UPPER);

         LabelCreate(Name + " Tu+", x+(Shir-dz)/2-12+int(0.2*double(dx)), y + dy - int(Pix*((double)Days[1])) - 3, (string)Days[1], clrMagenta, 90, 18, "Arial", ANCHOR_LEFT_UPPER);

         LabelCreate(Name + " We+", x+(Shir-dz)/2-12+int(0.4*double(dx)), y + dy - int(Pix*((double)Days[2])) - 3, (string)Days[2], clrMagenta, 90, 18, "Arial", ANCHOR_LEFT_UPPER);

         LabelCreate(Name + " Th+", x+(Shir-dz)/2-12+int(0.6*double(dx)), y + dy - int(Pix*((double)Days[3])) - 3, (string)Days[3], clrMagenta, 90, 18, "Arial", ANCHOR_LEFT_UPPER);

         LabelCreate(Name + " Fr+", x+(Shir-dz)/2-12+int(0.8*double(dx)), y + dy - int(Pix*((double)Days[4])) - 3, (string)Days[4], clrMagenta, 90, 18, "Arial", ANCHOR_LEFT_UPPER);

        }

     }



   void              Draw(string Name, int x, int y, int dx, int dy, int dz, int d, color &Colors[5])

     {



     }

  };

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

//|                                                                  |

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

void Bar(string name,int x,int y,int dx,int dy,color f)

  {

   if(ObjectFind(0,name)<0)

      ObjectCreate(0,name,OBJ_RECTANGLE_LABEL,0,x,y);

   ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);

   ObjectSetInteger(0,name,OBJPROP_XSIZE,dx);

   ObjectSetInteger(0,name,OBJPROP_YSIZE,dy);

   ObjectSetInteger(0,name,OBJPROP_WIDTH,0);

   ObjectSetInteger(0,name,OBJPROP_BACK,false);

   ObjectSetInteger(0,name,OBJPROP_BGCOLOR,f);

  }

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

//|                                                                  |

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

bool LabelCreate(

   const string            name="Label",             // 8<O <5B:8

   const int               x=0,                      // :>>@48=0B0 ?> >A8 X

   const int               y=0,                      // :>>@48=0B0 ?> >A8 Y

   const string            text="Label",             // B5:AB

   const color             clr=clrRed,               // F25B

   const double            angle=0.0,                // =0:;>= B5:AB0

   const int               font_size=10,             // @07<5@ H@8DB0

   const string            font="Arial",             // H@8DB

   const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // A?>A>1 ?@82O7:8

   const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8



   const bool              back=false,               // =0 704=5< ?;0=5

   const bool              selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

   const bool              hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

   const long              z_order=0,

   const int               sub_window=0,             // =><5@ ?>4>:=0

   const long              chart_ID=0                // ID 3@0D8:0

)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

//--- A>74048< B5:AB>2CN <5B:C

   if(ObjectFind(0,name)<0)

      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))

        {

         Print(__FUNCTION__,

               ": =5 C40;>AL A>740BL B5:AB>2CN <5B:C! >4 >H81:8 = ",GetLastError());

         return(false);

        }

//--- CAB0=>28< :>>@48=0BK <5B:8

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

//--- CAB0=>28< B5:AB

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< C3>; =0:;>=0 B5:AB0

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);

//--- CAB0=>28< A?>A>1 ?@82O7:8

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

//--- CAB0=>28< F25B

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O <5B:8 <KHLN

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- CA?5H=>5 2K?>;=5=85

   return(true);

  }



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



#property indicator_chart_window



#property indicator_buffers 4



#property indicator_color1  Magenta

#property indicator_color2  Blue

#property indicator_color3  Red

#property indicator_color4  White



double buf_l1[],buf_l2[],buf_l3[],buf_l4[];



int init()

  {

   SetIndexBuffer(0,buf_l1);

   SetIndexBuffer(1,buf_l2);

   SetIndexBuffer(2,buf_l3);

   SetIndexBuffer(3,buf_l4);



   SetIndexStyle(0,DRAW_ARROW);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexStyle(2,DRAW_ARROW,0);

   SetIndexStyle(3,DRAW_ARROW,0);



   SetIndexArrow(0,116);

   SetIndexArrow(1,116);

   SetIndexArrow(2,234);

   SetIndexArrow(3,233);



   SetIndexEmptyValue(0,0);

   SetIndexEmptyValue(1,0);

   SetIndexEmptyValue(2,0);

   SetIndexEmptyValue(3,0);



#define Adder 250



   OutText("Bars", "Warning!!! Need to check!", 50, 50, clrGreen, 15);

   OutText("Info", "Maintenance", 50, 90, Blue, 15);

   OutText("Per", "Connect to Site", 50, 130, clrOrange, 15);

   OutText("Info2", "Maintenance", 50+Adder, 90, Blue, 15);

   OutText("Per2", "Connect to Site", 50+Adder, 130, clrOrange, 15);

   OutText("Info3", "Maintenance", 50+Adder*2, 90, Blue, 15);

   OutText("Per3", "Connect to Site", 50+Adder*2, 130, clrOrange, 15);

   OutText("Info4", "Maintenance", 50+Adder*3, 90, Blue, 15);

   OutText("Per4", "Connect to Site", 50+Adder*3, 130, clrOrange, 15);



   return(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[])

  {

//---

   DayList Days = DayList(), Dayss = DayList(), Up = DayList(), Down = DayList();

   int BarDay = 0,BarDay2 = 0,BarDay3 = 0,BarDay4 = 0;

   for(int i = 0; i < Bars-2; i ++)

     {

      if(High[i]<High[i+1]&&Low[i]>Low[i+1])

        {

         buf_l1[i] = (High[i]+Low[i])/2;

         BarDay++;

         Days.AddDayWeek(TimeDayOfWeek(Time[i]),1);

        }

      if(High[i]>High[i+1]&&Low[i]<Low[i+1])

        {

         buf_l2[i] = (High[i]+Low[i])/2;

         BarDay2++;

         Dayss.AddDayWeek(TimeDayOfWeek(Time[i]),1);

        }

      if(High[i]<=High[i+1]&&Low[i]<=Low[i+1])

        {

         buf_l3[i] = (High[i]+Low[i])/2;

         BarDay3++;

         Up.AddDayWeek(TimeDayOfWeek(Time[i]),1);

        }

      if(High[i]>=High[i+1]&&Low[i]>=Low[i+1])

        {

         buf_l4[i] = (High[i]+Low[i])/2;

         BarDay4++;

         Down.AddDayWeek(TimeDayOfWeek(Time[i]),1);

        }

     }

   ObjectSetText("Bars","0@>2 " + (string)Bars,15);



   ObjectSetText("Info","=CB@5==8E " + (string)BarDay,15);

   ObjectSetText("Per","0@>2 " + (string)NormalizeDouble(100.0*BarDay/Bars,2) + " %",15);



   ObjectSetText("Info2","=5H=8E " + (string)BarDay2,15);

   ObjectSetText("Per2","0@>2 " + (string)NormalizeDouble(100.0*BarDay2/Bars,2) + " %",15);



   ObjectSetText("Info3","865 " + (string)BarDay3,15);

   ObjectSetText("Per3","0@>2 " + (string)NormalizeDouble(100.0*BarDay3/Bars,2) + " %",15);



   ObjectSetText("Info4","KH5 " + (string)BarDay4,15);

   ObjectSetText("Per4","0@>2 " + (string)NormalizeDouble(100.0*BarDay4/Bars,2) + " %",15);



   Days.Draw("Name",50, 250, 200, 200, 2, 0);

   Dayss.Draw("Name2",50+Adder, 250, 200, 200, 2, 0);

   Up.Draw("Name3",50+Adder*2, 250, 200, 200, 2, 0);

   Down.Draw("Name4",50+Adder*3, 250, 200, 200, 2, 0);



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

   return(rates_total);

  }

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

//|                                                                  |

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

void OutText(const string            name="Label",             // 8<O <5B:8

             const string            text="Label",             // B5:AB

             const int               x=0,                      // :>>@48=0B0 ?> >A8 X

             const int               y=0,                      // :>>@48=0B0 ?> >A8 Y

             const color             clr=clrYellow,            // F25B

             const int               font_size=12,             // @07<5@ H@8DB0

             const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // C3>; 3@0D8:0 4;O ?@82O7:8

             const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // A?>A>1 ?@82O7:8

             const string            font="Arial",             // H@8DB

             const double            angle=0.0,                // =0:;>= B5:AB0

             const bool              back=false,               // =0 704=5< ?;0=5

             const bool              selection=false,          // 2K45;8BL 4;O ?5@5<5I5=89

             const bool              hidden=true,              // A:@KB 2 A?8A:5 >1J5:B>2

             const long              z_order=0,

             const int               sub_window=0,             // =><5@ ?>4>:=0

             const long              chart_ID=0)                // ?@8>@8B5B =0 =060B85 <KHLN

  {

//--- A1@>A8< 7=0G5=85 >H81:8

   ResetLastError();

//--- A>74048< B5:AB>2CN <5B:C

   if(ObjectFind(chart_ID,name)==-1)

     {

      if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))

        {

         Print(__FUNCTION__, ": =5 C40;>AL A>740BL B5:AB>2CN <5B:C! >4 >H81:8 = ",GetLastError());

         //       return(false);

        }

     }

//--- CAB0=>28< :>>@48=0BK <5B:8

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

//--- CAB0=>28< C3>; 3@0D8:0, >B=>A8B5;L=> :>B>@>3> 1C4CB >?@545;OBLAO :>>@48=0BK B>G:8

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

//--- CAB0=>28< B5:AB

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- CAB0=>28< H@8DB B5:AB0

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

//--- CAB0=>28< @07<5@ H@8DB0

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

//--- CAB0=>28< C3>; =0:;>=0 B5:AB0

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);

//--- CAB0=>28< A?>A>1 ?@82O7:8

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

//--- CAB0=>28< F25B

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- >B>1@078< =0 ?5@54=5< (false) 8;8 704=5< (true) ?;0=5

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- 2:;NG8< (true) 8;8 >B:;NG8< (false) @568< ?5@5<5I5=8O <5B:8 <KHLN

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- A:@>5< (true) 8;8 >B>1@078< (false) 8<O 3@0D8G5A:>3> >1J5:B0 2 A?8A:5 >1J5:B>2

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- CAB0=>28< ?@8>@8B5B =0 ?>;CG5=85 A>1KB8O =060B8O <KH8 =0 3@0D8:5

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- CA?5H=>5 2K?>;=5=85

   return;

  }

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



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

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