251 lines
12 KiB
Markdown
251 lines
12 KiB
Markdown
# OBJ_TEXT
|
||
|
||
Text object.
|
||
|
||

|
||
|
||
Note
|
||
|
||
Anchor point position relative to the text can be selected from [ENUM_ANCHOR_POINT](/en/docs/constants/objectconstants/enum_anchorpoint) enumeration. You can also change text slope angle using [OBJPROP_ANGLE](/en/docs/constants/objectconstants/enum_object_property#enum_object_property_double) property.
|
||
|
||
Example
|
||
|
||
The following script creates several Text objects on the chart. Special functions have been developed to create and change graphical object's properties. You can use these functions "as is" in your own applications.
|
||
|
||
```
|
||
//--- 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);
|
||
}
|
||
//---
|
||
}
|
||
|
||
```
|