EA-Setka-2/Libs/CtrlPanel/GraphFunction.mqh
super.admin a4b861dd93 convert
2025-05-30 14:50:44 +02:00

233 lines
No EOL
21 KiB
MQL5

//+------------------------------------------------------------------+
//| GraphFunction.mqh |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link "https://www.mql5.com"
//+------------------------------------------------------------------+
//| Создает горизонтальную линию |
//+------------------------------------------------------------------+
bool HLineCreate(const long chart_ID=0, // ID графика
const string name="HLine", // имя линии
const int sub_window=0, // номер подокна
double price=0, // цена линии
const color clr=clrRed, // цвет линии
const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии
const int width=1, // толщина линии
const string tooltip="", // всплывающая подсказка
const bool back=false, // на заднем плане
const bool selection=true, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
//--- если цена не задана, то установим ее на уровне текущей цены Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- сбросим значение ошибки
ResetLastError();
//--- создадим горизонтальную линию
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))
{
Print(__FUNCTION__,
": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
//--- установим цвет линии
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим толщину линии
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения линии мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
if (StringLen(tooltip))
{
ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,tooltip);
}
return(true);
}
//+------------------------------------------------------------------+
//| Перемещение горизонтальной линии |
//+------------------------------------------------------------------+
bool HLineMove(const long chart_ID=0, // ID графика
const string name="HLine", // имя линии
double price=0) // цена линии
{
//--- если цена линии не задана, то перемещаем ее на уровень текущей цены Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- сбросим значение ошибки
ResetLastError();
//--- переместим горизонтальную линию
if(!ObjectMove(chart_ID,name,0,0,price))
{
Print(__FUNCTION__,
": не удалось переместить горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Удаляет горизонтальную линию |
//+------------------------------------------------------------------+
bool HLineDelete(const long chart_ID=0, // ID графика
const string name="HLine") // имя линии
{
//--- сбросим значение ошибки
ResetLastError();
//--- удалим горизонтальную линию
if(!ObjectDelete(chart_ID,name)&&(GetLastError()!=4202))
{
Print(__FUNCTION__,
": не удалось удалить горизонтальную линию! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Создает объект "Текст" |
//+------------------------------------------------------------------+
bool TextCreate(const long chart_ID=0, // ID графика
const string name="Text", // имя объекта
const int sub_window=0, // номер подокна
datetime time=0, // время точки привязки
double price=0, // цена точки привязки
const string text="Text", // сам текст
const string font="Arial", // шрифт
const int font_size=10, // размер шрифта
const color clr=clrRed, // цвет
const double angle=0.0, // наклон текста
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
//--- установим координаты точки привязки, если они не заданы
ChangeTextEmptyPoint(time,price);
//--- сбросим значение ошибки
ResetLastError();
//--- создадим объект "Текст"
if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
{
Print(__FUNCTION__,
": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError());
return(false);
}
//--- установим текст
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- установим шрифт текста
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- установим размер шрифта
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- установим угол наклона текста
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- установим способ привязки
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- отобразим на переднем (false) или заднем (true) плане
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения объекта мышью
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Перемещает точку привязки |
//+------------------------------------------------------------------+
bool TextMove(const long chart_ID=0, // ID графика
const string name="Text", // имя объекта
datetime time=0, // координата времени точки привязки
double price=0) // координата цены точки привязки
{
//--- если координаты точки не заданы, то перемещаем ее на текущий бар с ценой Bid
if(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- сбросим значение ошибки
ResetLastError();
//--- переместим точку привязки
if(!ObjectMove(chart_ID,name,0,time,price))
{
Print(__FUNCTION__,
": не удалось переместить точку привязки! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Изменяет текст объекта |
//+------------------------------------------------------------------+
bool TextChange(const long chart_ID=0, // ID графика
const string name="Text", // имя объекта
const string text="Text") // текст
{
//--- сбросим значение ошибки
ResetLastError();
//--- изменим текст объекта
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": не удалось изменить текст! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Удаляет объект "Текст" |
//+------------------------------------------------------------------+
bool TextDelete(const long chart_ID=0, // ID графика
const string name="Text") // имя объекта
{
//--- сбросим значение ошибки
ResetLastError();
//--- удалим объект
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": не удалось удалить объект \"Текст\"! Код ошибки = ",GetLastError());
return(false);
}
//--- успешное выполнение
return(true);
}
//+------------------------------------------------------------------+
//| Проверяет значения точки привязки и для пустых значений |
//| устанавливает значения по умолчанию |
//+------------------------------------------------------------------+
void ChangeTextEmptyPoint(datetime &time,double &price)
{
//--- если время точки не задано, то она будет на текущем баре
if(!time)
time=TimeCurrent();
//--- если цена точки не задана, то она будет иметь значение Bid
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
}