诚信为本
量力而为
当前位置:ea编程网 EA知识 正文

创建和管理MQL4中的文本对象

本文将详细介绍如何在MQL4中创建和管理文本对象,帮助您理解和利用OBJ_TEXT功能。了解如何使用OBJ_TEXT属性和相关函数可以使您更有效地在MetaTrader 4平台上开发自己的应用程序。

MQL4中的文本对象

文本对象概述

文本对象(Text object)在MQL4中是一种常用的图形对象,用于在图表上显示文本信息,例如价格、日期或自定义标签。您可以通过设置字体、颜色、大小和角度来定制文本的外观和位置。

创建文本对象

要创建文本对象,您可以使用以下代码示例,该示例演示了如何在图表上创建多个文本对象,显示每个柱状图的最高和最低价:

#property strict 
//--- description 
#property description "Script creates \"Text\" graphical object." 
//--- display window of the input parameters during the script's launch 
#property script_show_inputs 
//--- input parameters of the script 
input string            InpFont="Arial";         // Font 
input int               InpFontSize=10;          // Font size 
input color             InpColor=clrRed;         // Color 
input double            InpAngle=90.0;           // Slope angle in degrees 
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_LEFT;   // Anchor type 
input bool              InpBack=false;           // 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 
//+------------------------------------------------------------------+ 
//| Creating Text object                                             | 
//+------------------------------------------------------------------+ 
bool TextCreate(const long              chart_ID=0,               // chart's ID 
                const string            name="Text",              // object name 
                const int               sub_window=0,             // subwindow index 
                datetime                time=0,                   // anchor point time 
                double                  price=0,                  // anchor point price 
                const string            text="Text",              // the text itself 
                const string            font="Arial",             // font 
                const int               font_size=10,             // font size 
                const color             clr=clrRed,               // 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 
  { 
//--- set anchor point coordinates if they are not set 
   ChangeTextEmptyPoint(time,price); 
//--- reset the error value 
   ResetLastError(); 
//--- create Text object 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
     { 
      Print(__FUNCTION__, 
            ": failed to create \"Text\" object! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- 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 object 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 anchor point                                            | 
//+------------------------------------------------------------------+ 
bool TextMove(const long   chart_ID=0,  // chart's ID 
              const string name="Text", // object name 
              datetime     time=0,      // anchor point time coordinate 
              double       price=0)     // anchor point price coordinate 
  { 
//--- if point position is not set, move it to the current bar having Bid price 
   if(!time) 
      time=TimeCurrent(); 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
//--- reset the error value 
   ResetLastError(); 
//--- move the anchor point 
   if(!ObjectMove(chart_ID,name,0,time,price)) 
     { 
      Print(__FUNCTION__, 
            ": failed to move the anchor point! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Change the object text                                           | 
//+------------------------------------------------------------------+ 
bool TextChange(const long   chart_ID=0,  // chart's ID 
                const string name="Text", // object name 
                const string text="Text") // text 
  { 
//--- reset the error value 
   ResetLastError(); 
//--- change object text 
   if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text)) 
     { 
      Print(__FUNCTION__, 
            ": failed to change the text! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Delete Text object                                               | 
//+------------------------------------------------------------------+ 
bool TextDelete(const long   chart_ID=0,  // chart's ID 
                const string name="Text") // object name 
  { 
//--- reset the error value 
   ResetLastError(); 
//--- delete the object 
   if(!ObjectDelete(chart_ID,name)) 
     { 
      Print(__FUNCTION__, 
            ": failed to delete \"Text\" object! Error code = ",GetLastError()); 
      return(false); 
     } 
//--- successful execution 
   return(true); 
  } 
//+------------------------------------------------------------------+ 
//| Check anchor point values and set default values                 | 
//| for empty ones                                                   | 
//+------------------------------------------------------------------+ 
void ChangeTextEmptyPoint(datetime &time,double &price) 
  { 
//--- if the point's time is not set, it will be on the current bar 
   if(!time) 
      time=TimeCurrent(); 
//--- if the point's price is not set, it will have Bid value 
   if(!price) 
      price=SymbolInfoDouble(Symbol(),SYMBOL_BID); 
  } 
//+------------------------------------------------------------------+ 
//| Script program start function                                    | 
//+------------------------------------------------------------------+ 
void OnStart() 
  { 
   datetime date[]; // array for storing dates of visible bars 
   double   low[];  // array for storing Low prices of visible bars 
   double   high[]; // array for storing High prices of visible bars 
//--- number of visible bars in the chart window 
   int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS); 
//--- memory allocation 
   ArrayResize(date,bars); 
   ArrayResize(low,bars); 
   ArrayResize(high,bars); 
//--- fill the array of dates 
   ResetLastError(); 
   if(CopyTime(Symbol(),Period(),0,bars,date)==-1) 
     { 
      Print("Failed to copy time values! Error code = ",GetLastError()); 
      return; 
     } 
//--- fill the array of Low prices 
   if(CopyLow(Symbol(),Period(),0,bars,low)==-1) 
     { 
      Print("Failed to copy the values of Low prices! Error code = ",GetLastError()); 
      return; 
     } 
//--- fill the array of High prices 
   if(CopyHigh(Symbol(),Period(),0,bars,high)==-1) 
     { 
      Print("Failed to copy the values of High prices! Error code = ",GetLastError()); 
      return; 
     } 
//--- define how often texts are to be displayed 
   int scale=(int)ChartGetInteger(0,CHART_SCALE); 
//--- define the step 
   int step=1; 


 switch(scale) 
     { 
      case 0: 
         step=12; 
         break; 
      case 1: 
         step=6; 
         break; 
      case 2: 
         step=4; 
         break; 
      case 3: 
         step=2; 
         break; 
     } 
//--- create texts for High and Low bars' values (with gaps) 
   for(int i=0;i<bars;i+=step) 
     { 
      //--- create the texts 
      if(!TextCreate(0,"TextHigh_"+(string)i,0,date[i],high[i],DoubleToString(high[i],5),InpFont,InpFontSize, 
         InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) 
        { 
         return; 
        } 
      if(!TextCreate(0,"TextLow_"+(string)i,0,date[i],low[i],DoubleToString(low[i],5),InpFont,InpFontSize, 
         InpColor,-InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder)) 
        { 
         return; 
        } 
      //--- check if the script's operation has been forcefully disabled 
      if(IsStopped()) 
         return; 
      //--- redraw the chart 
      ChartRedraw(); 
      // 0.05 seconds of delay 
      Sleep(50); 
     } 
//--- half a second of delay 
   Sleep(500); 
//--- delete the texts 
   for(int i=0;i<bars;i+=step) 
     { 
      if(!TextDelete(0,"TextHigh_"+(string)i)) 
         return; 
      if(!TextDelete(0,"TextLow_"+(string)i)) 
         return; 
      //--- redraw the chart 
      ChartRedraw(); 
      // 0.05 seconds of delay 
      Sleep(50); 
     } 
//--- 
  }

示例和最佳实践

以上示例展示了如何使用MQL4创建和管理文本对象。您可以根据需要调整文本的位置、颜色和其他属性,以满足特定的交易分析或信息显示需求。在编写自己的MQL4脚本时,建议参考这些示例,并根据实际需求进行修改和优化。

总结

通过本文,您学习了如何在MQL4中有效地创建、管理和定制文本对象。这些技能对于开发自定义交易工具和分析工具至关重要,希望本文能够帮助您更好地利用MetaTrader 4平台的功能。

未经允许不得转载:ea编程网 » 创建和管理MQL4中的文本对象