H4 D1 Panel 2

Author: Copyright © 2020, Vladimir Karputov
0 Views
0 Downloads
0 Favorites
H4 D1 Panel 2
ÿþ//+------------------------------------------------------------------+

//|                                                H4 D1 Panel 2.mq5 |

//|                              Copyright © 2020, Vladimir Karputov |

//|                     https://www.mql5.com/ru/market/product/43516 |

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

#property copyright "Copyright © 2020, Vladimir Karputov"

#property link      "https://www.mql5.com/ru/market/product/43516"

#property version   "2.000"

#property indicator_chart_window

#property indicator_buffers 0

#property indicator_plots   0

//+------------------------ PanelDialog -----------------------------+

#include <Controls\Dialog.mqh>

#include <Canvas\Canvas.mqh>

#include <Controls\BmpButton.mqh>

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

//| defines                                                          |

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

//--- indents and gaps

#define INDENT_LEFT                         (11)      // indent from left (with allowance for border width)

#define INDENT_TOP                          (11)      // indent from top (with allowance for border width)

#define INDENT_RIGHT                        (11)      // indent from right (with allowance for border width)

#define INDENT_BOTTOM                       (11)      // indent from bottom (with allowance for border width)

//--- for buttons

#define BUTTON_WIDTH                        (100)     // size by X coordinate

#define BUTTON_HEIGHT                       (20)      // size by Y coordinate

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

//| Class CPanelDialog                                            |

//| Usage: main dialog of the Controls application                   |

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

class CPanelDialog : public CAppDialog

  {

private:

   CCanvas           m_canvas;                        // CCanvas object

   CBmpButton        m_bmp_button;                    // CBmpButton object



public:

                     CPanelDialog(void);

                    ~CPanelDialog(void);

   //--- create

   virtual bool      Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2);

   //--- chart event handler

   virtual bool      OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam);

   //--- displaying text

   virtual void      DisplayingText(void);



protected:

   //--- create dependent controls

   bool              CreateCanvas(void);

  };

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

//| Event Handling                                                   |

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

EVENT_MAP_BEGIN(CPanelDialog)

EVENT_MAP_END(CAppDialog)

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

//| Constructor                                                      |

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

CPanelDialog::CPanelDialog(void)

  {

  }

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

//| Destructor                                                       |

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

CPanelDialog::~CPanelDialog(void)

  {

  }

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

//| Create                                                           |

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

bool CPanelDialog::Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2)

  {

   if(!CAppDialog::Create(chart,name,subwin,x1,y1,x2,y2))

      return(false);

//--- create dependent controls

   if(!CreateCanvas())

      return(false);

//--- succeed

   return(true);

  }

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

//| Displaying Text                                                  |

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

void CPanelDialog::DisplayingText(void)

  {

   /*

   version   "1.XXX"

   "         H4         |         D1         "

   "  #2  |  #1  |  #0  |  #2  |  #1  |  #0  "

   " BULL | BULL | BULL | BEAR | BEAR | BULL "

   */

   /*

   version   "2.XXX"

   "      |  #2  |  #1  |  #0  "

   "  H4  | BULL | BULL | BULL "

   "  D1  | BEAR | BEAR | BULL "

   */

   m_canvas.Erase(ColorToARGB(InpCanvasFillColor,InpCanvasAlpha));

   MqlRates rates_h4[],rates_d1[];

   ArraySetAsSeries(rates_h4,true);

   ArraySetAsSeries(rates_d1,true);

   int start_pos=0,count=3;

   if(CopyRates(Symbol(),PERIOD_D1,start_pos,count,rates_d1)!=count || CopyRates(Symbol(),PERIOD_H4,start_pos,count,rates_h4)!=count)

     {

      m_canvas.TextOut(5,10,"    ERROR    ",ColorToARGB(ColorToARGB(clrLawnGreen,255),255));

     }

   else

     {

      string text_bull           ="BULL";

      string text_bear           ="BEAR";

      string arr_text_header[7]  = {"      |  ","#2","  |  ","#1","  |  ","#0","  "};

      //--- table header

      //--- "      |  #2  |  #1  |  #0  "

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

      //| Structurt Text                                                   |

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

      struct STRUCT_TEXT

        {

         string      text;    // text

         uint        flags;   // flags

         color       colors;  // colors

         uchar       alpha;   // alpha

         //--- Constructor

                     STRUCT_TEXT()

           {

            text  = "";

            flags = FW_NORMAL;

            colors= clrGray;

            alpha = 255;

           }

        };

      STRUCT_TEXT STextHeader[7];

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

        {

         STextHeader[i].text=arr_text_header[i];

         STextHeader[i].flags=(i%2==0)?FW_NORMAL:FW_BOLD;

         STextHeader[i].colors=InpTableHeaderColor;

         STextHeader[i].alpha=InpTableHeaderAlpha;

        }

      int x=5;

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

        {

         m_canvas.FontFlagsSet(STextHeader[i].flags);

         m_canvas.TextOut(x,5,STextHeader[i].text,ColorToARGB(STextHeader[i].colors,STextHeader[i].alpha));

         x=x+m_canvas.TextWidth(STextHeader[i].text);

        }

      //--- table line 1

      //--- "  H4  | BULL | BULL | BULL "

      string arr_text_line_1[7]  = {"  H4 "," | ","BULL"," | ","BULL"," | ","BULL "};

      STRUCT_TEXT STextLine1[7];

      x=5;

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

        {

         if(i==0)

           {

            STextLine1[i].text=arr_text_line_1[i];

            STextLine1[i].flags=FW_BOLD;

            STextLine1[i].colors=InpTableHeaderColor;

            STextLine1[i].alpha=InpTableHeaderAlpha;

           }

         else

           {

            if(i==2)

              {

               STextLine1[i].text=((rates_h4[2].open<rates_h4[2].close)?text_bull:text_bear);

               STextLine1[i].colors=(STextLine1[i].text==text_bull)?InpBullColor:InpBearColor;

               STextLine1[i].alpha=InpBullBearAlpha;

              }

            else

              {

               if(i==4)

                 {

                  STextLine1[i].text=((rates_h4[1].open<rates_h4[1].close)?text_bull:text_bear);

                  STextLine1[i].colors=(STextLine1[i].text==text_bull)?InpBullColor:InpBearColor;

                  STextLine1[i].alpha=InpBullBearAlpha;

                 }

               else

                 {

                  if(i==6)

                    {

                     STextLine1[i].text=((rates_h4[0].open<rates_h4[0].close)?text_bull:text_bear);

                     STextLine1[i].colors=(STextLine1[i].text==text_bull)?InpBullColor:InpBearColor;

                     STextLine1[i].alpha=InpBullBearAlpha;

                    }

                  else

                    {

                     STextLine1[i].text=arr_text_line_1[i];

                     STextLine1[i].colors=InpTableHeaderColor;

                     STextLine1[i].alpha=InpTableHeaderAlpha;

                    }

                 }

              }

           }

         m_canvas.FontFlagsSet(STextLine1[i].flags);

         m_canvas.TextOut(x,20,STextLine1[i].text,ColorToARGB(STextLine1[i].colors,STextLine1[i].alpha));

         x=x+m_canvas.TextWidth(STextLine1[i].text);

        }

      //--- table line 2

      //--- "  D1  | BEAR | BEAR | BULL "

      string arr_text_line_2[7]  = {"  D1 "," | ","BEAR"," | ","BEAR"," | ","BULL "};

      STRUCT_TEXT STextLine2[7];

      x=5;

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

        {

         if(i==0)

           {

            STextLine2[i].text=arr_text_line_2[i];

            STextLine2[i].flags=FW_BOLD;

            STextLine2[i].colors=InpTableHeaderColor;

            STextLine2[i].alpha=InpTableHeaderAlpha;

           }

         else

           {

            if(i==2)

              {

               STextLine2[i].text=((rates_d1[2].open<rates_d1[2].close)?text_bull:text_bear);

               STextLine2[i].colors=(STextLine2[i].text==text_bull)?InpBullColor:InpBearColor;

               STextLine2[i].alpha=InpBullBearAlpha;

              }

            else

              {

               if(i==4)

                 {

                  STextLine2[i].text=((rates_d1[1].open<rates_d1[1].close)?text_bull:text_bear);

                  STextLine2[i].colors=(STextLine2[i].text==text_bull)?InpBullColor:InpBearColor;

                  STextLine2[i].alpha=InpBullBearAlpha;

                 }

               else

                 {

                  if(i==6)

                    {

                     STextLine2[i].text=((rates_d1[0].open<rates_d1[0].close)?text_bull:text_bear);

                     STextLine2[i].colors=(STextLine2[i].text==text_bull)?InpBullColor:InpBearColor;

                     STextLine2[i].alpha=InpBullBearAlpha;

                    }

                  else

                    {

                     STextLine2[i].text=arr_text_line_2[i];

                     STextLine2[i].colors=InpTableHeaderColor;

                     STextLine2[i].alpha=InpTableHeaderAlpha;

                    }

                 }

              }

           }

         m_canvas.FontFlagsSet(STextLine2[i].flags);

         m_canvas.TextOut(x,35,STextLine2[i].text,ColorToARGB(STextLine2[i].colors,STextLine2[i].alpha));

         x=x+m_canvas.TextWidth(STextLine2[i].text);

        }

     }

   m_canvas.Update(true);

  }

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

//| Create the canvas object                                         |

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

bool CPanelDialog::CreateCanvas(void)

  {

//--- coordinates

   int x1=1;

   int y1=1;

   int x2=ClientAreaWidth()-2;

   int y2=ClientAreaHeight()-2;

//--- create canvas

   if(!m_canvas.Create("Canvas1",x2,y2,COLOR_FORMAT_XRGB_NOALPHA))

     {

      Print("Error creating canvas: ",GetLastError());

      return(false);

     }

   m_canvas.FontSet("Consolas",-120,FW_THIN);

   m_canvas.Erase(ColorToARGB(InpCanvasFillColor,InpCanvasAlpha));

   m_canvas.Update(true);

//--- create

   if(!m_bmp_button.Create(m_chart_id,m_name+"BmpButton",m_subwin,x1,y1,x1,y1))

      return(false);

//--- sets the name of bmp files of the control CBmpButton

   if(!m_bmp_button.BmpOnName(m_canvas.ResourceName()))

      return(false);

   if(!Add(m_bmp_button))

      return(false);

//--- succeed

   return(true);

  }

//+------------------------- Indicator ------------------------------+

//--- input parameters

input group             "Canvas color"

input color    InpCanvasFillColor   = clrAntiqueWhite;   // Canvas fill color

input uchar    InpCanvasAlpha       = 255;               // Canvas fill alpha channel

input group             "Table header color"

input color    InpTableHeaderColor  = clrBlack;          // Table header color

input uchar    InpTableHeaderAlpha  = 255;               // Table header alpha channel

input group             "Bars type color"

input color    InpBullColor         = clrBlue;           // Bull Bars color

input color    InpBearColor         = clrRed;            // Bear Bars color

input uchar    InpBullBearAlpha     = 255;               // Bull Bear alpha channel

//---

CPanelDialog   m_dialog;                                 // object of CPanelDialog class

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

//| Custom indicator initialization function                         |

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

int OnInit(void)

  {

//--- create application dialog

   if(!m_dialog.Create(0,"D1 H4 Panel 2",0,50,50,321,140))

      return(INIT_FAILED);

//--- run application

   if(!m_dialog.Run())

      return(INIT_FAILED);

//--- succeed

   return(INIT_SUCCEEDED);

  }

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

//| Custom indicator deinitialization function                       |

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

void OnDeinit(const int reason)

  {

//--- destroy application dialog

   m_dialog.Destroy(reason);

  }

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

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

  {

//---

   m_dialog.DisplayingText();

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

  {

   m_dialog.ChartEvent(id,lparam,dparam,sparam);

  }

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

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