MultiSymbolSignals/Include/MultiSymbol/SetDeleteObjects.mqh
super.admin f343eff89f convert
2025-05-30 16:10:44 +02:00

148 lines
No EOL
13 KiB
MQL5

//--- Связь с основным файлом индикатора
//#include "..\MultiSymbolPriceDivergence.mq5"
//--- Подключаем свои библиотеки
#include "Checks.mqh"
#include "SettingChart.mqh"
//+------------------------------------------------------------------+
//| Установить канву |
//+------------------------------------------------------------------+
void SetCanvas()
{
//--- Если канвы нет, установим её
if(ObjectFind(0,canvas_name)<0)
{
//--- Создадим канву
canvas.CreateBitmapLabel(0,number_window,canvas_name,0,0,chart_width,chart_height,clr_format);
//--- Сделаем канву полностью прозрачной
canvas.Erase(ColorToARGB(canvas_bg_color,0));
//--- Обновим канву
canvas.Update();
}
}
//+------------------------------------------------------------------+
//| Изменяет размер канвы |
//+------------------------------------------------------------------+
void ResizeCanvas()
{
//--- Если канва есть в подокне индикатора, установим новый размер
if(ObjectFind(0,canvas_name)==number_window)
canvas.Resize(chart_width,chart_height);
}
//+------------------------------------------------------------------+
//| Выводит сообщение в канве |
//+------------------------------------------------------------------+
void ShowCanvasMessage(string message_text)
{
SetSubwindowProperties();
//--- Если канва есть на графике
if(ObjectFind(0,canvas_name)==number_window)
{
//--- Отобразим сообщение,
// если передана не пустая строка и координаты получены
if(message_text!="" && chart_wcenter>0 && chart_vcenter>0)
{
canvas.Erase(ColorToARGB(canvas_bg_color,canvas_opacity));
canvas.TextOut(chart_wcenter,chart_vcenter,message_text,ColorToARGB(clrRed),TA_CENTER|TA_VCENTER);
canvas.Update();
}
}
}
//+------------------------------------------------------------------+
//| Устанавливает вертикальную линию для начальной точки цен |
//+------------------------------------------------------------------+
void SetLineStartPricesDivergence()
{
//--- Если вертикальной линии нет, установим её
if(StartPriceDivergence==VERT_LINE &&
ObjectFind(0,start_price_divergence)<0)
//--- Установим вертикальную линию на истинном баре
CreateVerticalLines(0,0,TimeCurrent()+PeriodSeconds(),start_price_divergence,
2,STYLE_SOLID,clrGreenYellow,true,true,false,"","\n");
//--- Если не в режиме вертикальной линии
if(StartPriceDivergence!=VERT_LINE)
DeleteObjectByName(start_price_divergence);
}
//+------------------------------------------------------------------+
//| Удаляет канву |
//+------------------------------------------------------------------+
void DeleteCanvas()
{
//--- Удалим канву, если она есть
if(ObjectFind(0,canvas_name)==0)
{
//--- Перед удалением произведём эффект исчезания
for(int i=canvas_opacity; i>0; i-=5)
{
canvas.Erase(ColorToARGB(canvas_bg_color,(uchar)i));
canvas.Update();
}
//--- Удаление канвы
canvas.Destroy();
}
}
//+------------------------------------------------------------------+
//| Удаляет вертикальные линии начала серий |
//+------------------------------------------------------------------+
void DeleteVerticalLines()
{
string object_name =""; // Имя объекта
int total_vert_lines =0; // Общее количество линий
//--- Получим количество вертикальных линий
total_vert_lines=ObjectsTotal(0,0,OBJ_VLINE);
//--- Удалим только те, которые были установлены этой программой
for(int i=total_vert_lines-1; i>=0; i--)
{
//--- Получим имя объекта
for(int j=0; j<5; j++)
if((object_name=ObjectName(0,i))!="")
break;
//--- Если в имени есть префикс индикатора, удалим объект
if(StringFind(object_name,prefix,0)>-1)
DeleteObjectByName(object_name);
}
}
//+------------------------------------------------------------------+
//| Удаляет объект по имени |
//+------------------------------------------------------------------+
void DeleteObjectByName(string Name)
{
//--- Если есть такой объект
if(ObjectFind(0,Name)>=0)
{
//--- Если была ошибка при удалении, сообщим об этом
if(!ObjectDelete(0,Name))
Print("Ошибка ("+IntegerToString(GetLastError())+") при удалении объекта!");
}
}
//+------------------------------------------------------------------+
//| Создание вертикальной линии |
//+------------------------------------------------------------------+
void CreateVerticalLines(long chart_id, // id графика
int number_win, // номер окна
datetime time, // время
string name_line, // имя объекта
int width_line, // толщина линии
ENUM_LINE_STYLE style_line, // стиль линии
color color_line, // цвет линии
bool selected, // выделенный объект
bool selectable, // нельзя выделить объект, если FALSE
bool back, // установить фоновым
string description_text, // текст описания
string tooltip) // нет всплывающей подсказки, если "\n"
{
//--- Если объект успешно создан...
if(ObjectCreate(chart_id,name_line,OBJ_VLINE,number_win,time,0))
{
// ...установим ему свойства
ObjectSetInteger(chart_id,name_line,OBJPROP_TIME,time);
ObjectSetInteger(chart_id,name_line,OBJPROP_STYLE,style_line);
ObjectSetInteger(chart_id,name_line,OBJPROP_WIDTH,width_line);
ObjectSetInteger(chart_id,name_line,OBJPROP_COLOR,color_line);
ObjectSetInteger(chart_id,name_line,OBJPROP_SELECTABLE,selectable);
ObjectSetInteger(chart_id,name_line,OBJPROP_SELECTED,selected);
ObjectSetInteger(chart_id,name_line,OBJPROP_BACK,back);
ObjectSetString(chart_id,name_line,OBJPROP_TEXT,description_text);
ObjectSetString(chart_id,name_line,OBJPROP_TOOLTIP,tooltip);
}
}
//+------------------------------------------------------------------+