//--- Связь с основным файлом индикатора //#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); } } //+------------------------------------------------------------------+