148 lines
No EOL
13 KiB
MQL5
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);
|
|
}
|
|
}
|
|
//+------------------------------------------------------------------+ |