Author: Copyright © 2020, Vladimir Karputov
0 Views
0 Downloads
0 Favorites
Name Chart
ÿþ//+------------------------------------------------------------------+

//|                                                   Name Chart.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   "1.002"

#property indicator_chart_window

#property indicator_buffers 0

#property indicator_plots 0

//--- input parameters

input string            InpName     = "Label";           // Label name

input string            InpFont     = "Arial";           // Font

input int               InpFontSize = 80;                // Font size

input color             InpColor    = clrGray;           // Color

input ENUM_ANCHOR_POINT InpAnchor   = ANCHOR_LEFT_UPPER; // Anchor type

input bool              InpBack     = true;              // Background object

input bool              InpSelection= false;             // Highlight to move

input bool              InpHidden   = true;              // Hidden in the object list

input long              InpZOrder   = 0;                 // Priority for mouse click

//---

double                  m_angle     = 0.0;               // Slope angle in degrees

ENUM_BASE_CORNER        m_corner    = CORNER_LEFT_UPPER; // Chart corner for anchoring

int                     m_correct_x = 0;

int                     m_correct_y = 0;

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

//| Custom indicator initialization function                         |

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

int OnInit()

  {

//--- chart window size

   long x_distance;

   long y_distance;

//--- set window size

   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))

     {

      Print("Failed to get the chart width! Error code = ",GetLastError());

      return(INIT_SUCCEEDED);

     }

   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))

     {

      Print("Failed to get the chart height! Error code = ",GetLastError());

      return(INIT_SUCCEEDED);

     }

//--- prepare initial text for the label

   string text=Symbol();

//--- calculation of X and Y coordinates

   int x=0,y=0;

   switch(InpAnchor)

     {

      case  ANCHOR_LEFT_UPPER:

         m_corner=CORNER_LEFT_UPPER;

         x=10;

         y=10;

         break;

      case  ANCHOR_LEFT:

         m_corner=CORNER_LEFT_UPPER;

         x=10;

         y=(int)(y_distance/2);

         break;

      case  ANCHOR_LEFT_LOWER:

         m_corner=CORNER_LEFT_LOWER;

         x=10;

         y=10;

         break;

      case  ANCHOR_LOWER:

         m_corner=CORNER_LEFT_LOWER;

         x=(int)(x_distance/2);

         y=10;

         break;

      case  ANCHOR_RIGHT_LOWER:

         m_corner=CORNER_RIGHT_LOWER;

         x=10;

         y=10;

         break;

      case  ANCHOR_RIGHT:

         m_corner=CORNER_RIGHT_LOWER;

         x=10;

         y=(int)(y_distance/2);

         break;

      case  ANCHOR_RIGHT_UPPER:

         m_corner=CORNER_RIGHT_UPPER;

         x=10;

         y=10;

         break;

      case  ANCHOR_UPPER:

         m_corner=CORNER_RIGHT_UPPER;

         x=(int)(x_distance/2);

         y=10;

         break;

      default: // ANCHOR_CENTER

         m_corner=CORNER_LEFT_LOWER;

         x=(int)(x_distance/2);

         y=(int)(y_distance/2);

         break;

     }

//--- create a text label on the chart

   if(!LabelCreate(0,InpName,0,x,y,m_corner,text,InpFont,InpFontSize,

                   InpColor,m_angle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))

     {

      Print("Failed to create label! Error code = ",GetLastError());

      return(INIT_SUCCEEDED);

     }

//---

   return(INIT_SUCCEEDED);

  }

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

//| Indicator deinitialization function                                 |

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

void OnDeinit(const int reason)

  {

//---

   LabelDelete(0,InpName);

  }

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

//| Custom indicator iteration function                              |

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

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const int begin,

                const double &price[])

  {

//---



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

      return;

//--- chart window size

   long x_distance;

   long y_distance;

//--- set window size

   if(!ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0,x_distance))

     {

      Print("Failed to get the chart width! Error code = ",GetLastError());

      return;

     }

   if(!ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0,y_distance))

     {

      Print("Failed to get the chart height! Error code = ",GetLastError());

      return;

     }

//--- prepare initial text for the label

   string text=Symbol();

//--- calculation of X and Y coordinates

   int x=0,y=0;

   switch(InpAnchor)

     {

      case  ANCHOR_LEFT_UPPER:

         m_corner=CORNER_LEFT_UPPER;

         x=10;

         y=10;

         break;

      case  ANCHOR_LEFT:

         m_corner=CORNER_LEFT_UPPER;

         x=10;

         y=(int)(y_distance/2);

         break;

      case  ANCHOR_LEFT_LOWER:

         m_corner=CORNER_LEFT_LOWER;

         x=10;

         y=10;

         break;

      case  ANCHOR_LOWER:

         m_corner=CORNER_LEFT_LOWER;

         x=(int)(x_distance/2);

         y=10;

         break;

      case  ANCHOR_RIGHT_LOWER:

         m_corner=CORNER_RIGHT_LOWER;

         x=10;

         y=10;

         break;

      case  ANCHOR_RIGHT:

         m_corner=CORNER_RIGHT_LOWER;

         x=10;

         y=(int)(y_distance/2);

         break;

      case  ANCHOR_RIGHT_UPPER:

         m_corner=CORNER_RIGHT_UPPER;

         x=10;

         y=10;

         break;

      case  ANCHOR_UPPER:

         m_corner=CORNER_RIGHT_UPPER;

         x=(int)(x_distance/2);

         y=10;

         break;

      default: // ANCHOR_CENTER

         m_corner=CORNER_LEFT_LOWER;

         x=(int)(x_distance/2);

         y=(int)(y_distance/2);

         break;

     }



   if(ObjectFind(0,InpName)<0)

     {

      //--- create a text label on the chart

      if(!LabelCreate(0,InpName,0,x,y,m_corner,text,InpFont,InpFontSize,

                      InpColor,m_angle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))

        {

         Print("Failed to create label! Error code = ",GetLastError());

         return;

        }

     }

   else

      LabelMove(0,InpName,x,y);

//--- redraw the chart

   ChartRedraw();

  }

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

//| Create a text label                                              |

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

bool LabelCreate(const long              chart_ID=0,               // chart's ID

                 const string            name="Label",             // label name

                 const int               sub_window=0,             // subwindow index

                 const int               x=0,                      // X coordinate

                 const int               y=0,                      // Y coordinate

                 const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // chart corner for anchoring

                 const string            text="Label",             // text

                 const string            font="Arial",             // font

                 const int               font_size=10,             // font size

                 const color             clr=clrGray,              // color

                 const double            angle=0.0,                // text slope

                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // anchor type

                 const bool              back=false,               // in the background

                 const bool              selection=false,          // highlight to move

                 const bool              hidden=true,              // hidden in the object list

                 const long              z_order=0)                // priority for mouse click

  {

//--- reset the error value

   ResetLastError();

//--- create a text label

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

     {

      Print(__FUNCTION__,

            ": failed to create text label! Error code = ",GetLastError());

      return(false);

     }

//--- set label coordinates

   ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);

   ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);

//--- set the chart's corner, relative to which point coordinates are defined

   ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);

//--- set the text

   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);

//--- set text font

   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);

//--- set font size

   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);

//--- set the slope angle of the text

   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);

//--- set anchor type

   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);

//--- set color

   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);

//--- display in the foreground (false) or background (true)

   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);

//--- enable (true) or disable (false) the mode of moving the label by mouse

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);

   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);

//--- hide (true) or display (false) graphical object name in the object list

   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);

//--- set the priority for receiving the event of a mouse click in the chart

   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);

//--- successful execution

   return(true);

  }

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

//| Move the text label                                              |

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

bool LabelMove(const long   chart_ID=0,   // chart's ID

               const string name="Label", // label name

               const int    x=0,          // X coordinate

               const int    y=0)          // Y coordinate

  {

//--- reset the error value

   ResetLastError();

//--- move the text label

   if(!ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x))

     {

      Print(__FUNCTION__,

            ": failed to move X coordinate of the label! Error code = ",GetLastError());

      return(false);

     }

   if(!ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y))

     {

      Print(__FUNCTION__,

            ": failed to move Y coordinate of the label! Error code = ",GetLastError());

      return(false);

     }

//--- successful execution

   return(true);

  }

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

//| Delete a text label                                              |

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

bool LabelDelete(const long   chart_ID=0,   // chart's ID

                 const string name="Label") // label name

  {

//--- reset the error value

   ResetLastError();

//--- delete the label

   if(!ObjectDelete(chart_ID,name))

     {

      Print(__FUNCTION__,

            ": failed to delete a text label! Error code = ",GetLastError());

      return(false);

     }

//--- successful execution

   return(true);

  }

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

Comments