Группа "Стол заказов MQL"

Рейтинг 2156



РЕКОМЕНДУЮ



Исправьте ошибку

Добрый день, нужен индикатор в котором бы создавался Label и менял цвет в зависимости от фона, могли бы вы исправить ошибку:

#property strict
#property indicator_chart_window
color g_clrOldColor
;
string g_sCurrentFile;
color clrNewColor
;

int OnInit(void)
{
   g_clrOldColor
= color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
   color strFile
= (g_clrOldColor == C'0,0,0')? "clsWhite" : "clsBlack";
   
LabelCreate(0,"label0",0,50,50,CORNER_LEFT_UPPER,"Статистика","Tahoma",8,strFile,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);
   
return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{

}


int OnCalculate(const int rates_total,
               
const int prev_calculated,
               
const datetime &time[],
               
const double &open[],
               
const double &high[],
               
const double &low[],
               
const double &close[],
               
const long &tick_volume[],
               
const long &volume[],
               
const int &spread[])

{
   
return(rates_total);
}

void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
{
   
if (id == CHARTEVENT_CHART_CHANGE)
   
{  
      clrNewColor
= color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
     
if (clrNewColor != g_clrOldColor)
     
{
         
string strFile = (clrNewColor ==  C'0,0,0')? "clsWhite" : "clsBlack";
   
LabelCreate(0,"label0",0,50,50,CORNER_LEFT_UPPER,"Статистика","Tahoma",8,clrNewColor,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);
   
//ObjectSetInteger(0,"label0", OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);
         
ChartRedraw();
         g_sCurrentFile
= strFile;
         g_clrOldColor
= clrNewColor;
     
}

     
     
   
}
}


bool LabelCreate(const long              chart_ID=0,               // ID графика
                 
const string            name="Label",             // имя метки
                 
const int               sub_window=0,             // номер подокна
                 
const int               x=0,                      // координата по оси X
                 
const int               y=0,                      // координата по оси Y
                 
const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
                 
const string            text="Label",             // текст
                 
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)                // приоритет на нажатие мышью
 
{
//--- сбросим значение ошибки
   
ResetLastError();
//--- создадим текстовую метку
   
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
     
{
     
Print(__FUNCTION__,
           
": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     
return(false);
     
}
//--- установим координаты метки
   
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим текст
   
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);
   
ObjectSetInteger(chart_ID,name, OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);  
//--- отобразим на переднем (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);
 
}
  • 0
  • Просмотров: 1438
  • 5 октября 2019, 14:47
  • lafler356
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
Следующая запись в группе  
Советник
05 октября 2019
06 октября 2019

Брокер для ваших роботов, 15 лет на рынке

Комментарии (6)

0
пишите полностью тз
avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 5 октября 2019, 14:51
0
Сказали вот тут ошибка:
color strFile = (g_clrOldColor == C'0,0,0')? "clsWhite" : "clsBlack";
avatar

  9  lafler356 Автор Сообщений: 305

  • 5 октября 2019, 14:57
0
написал свой вариант:




//+------------------------------------------------------------------+
//|                                                          Fon.mq4 |
//|                                              Copyright 2019, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict
#property indicator_chart_window

color clr
=Black;
color fclr
=clrNONE;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
 
{
   fclr
=color(ChartGetInteger(0,CHART_COLOR_BACKGROUND));

   fclr
==Black ? clr=White : clr=Black;

   
PutLabel("Текст");

   
Comment("\n Цвет фона: ",fclr,
           
"\n Цвет метки: ",clr);

   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{
   
Comment("");
   
ObjectDelete(0,"L");
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text)
 
{
//--- создадим текстовую метку
   
ObjectCreate(0,"L",OBJ_LABEL,0,0,0);
//--- установим координаты метки
   
ObjectSetInteger(0,"L",OBJPROP_XDISTANCE,22);
   
ObjectSetInteger(0,"L",OBJPROP_YDISTANCE,77);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(0,"L",OBJPROP_CORNER,0);
//--- установим текст
   
ObjectSetString(0,"L",OBJPROP_TEXT,text);
//--- установим шрифт текста
   
ObjectSetString(0,"L",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   
ObjectSetInteger(0,"L",OBJPROP_FONTSIZE,12);
//--- установим цвет
   
ObjectSetInteger(0,"L",OBJPROP_COLOR,clr);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
               
const int prev_calculated,
               
const datetime &time[],
               
const double &open[],
               
const double &high[],
               
const double &low[],
               
const double &close[],
               
const long &tick_volume[],
               
const long &volume[],
               
const int &spread[])

 
{
//---

//---
   
return(rates_total);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
 
{
   
if(id == CHARTEVENT_CHART_CHANGE)
     
{
      fclr
=color(ChartGetInteger(0,CHART_COLOR_BACKGROUND));

      fclr
==Black ? clr=White : clr=Black;

     
PutLabel("Текст");

     
Comment("\n Цвет фона: ",fclr,
             
"\n Цвет метки: ",clr);
     
}
 
}
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 5 октября 2019, 17:34
+
0
исправил ваш вариант:


//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2018, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window
color g_clrOldColor
;
string g_sCurrentFile;
color clrNewColor
;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit(void)
 
{
   g_clrOldColor
= color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
   color strFile
= (g_clrOldColor == C'0,0,0')? clrWhite : clrBlack;
   
LabelCreate(0,"label0",0,50,50,CORNER_LEFT_UPPER,"Статистика","Tahoma",8,strFile,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);
   
return(INIT_SUCCEEDED);
 
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{

 
}


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
               
const int prev_calculated,
               
const datetime &time[],
               
const double &open[],
               
const double &high[],
               
const double &low[],
               
const double &close[],
               
const long &tick_volume[],
               
const long &volume[],
               
const int &spread[])

 
{
   
return(rates_total);
 
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long& lparam, const double& dparam, const string& sparam)
 
{
   
if(id == CHARTEVENT_CHART_CHANGE)
     
{
      clrNewColor
= color(ChartGetInteger(0, CHART_COLOR_BACKGROUND));
     
if(clrNewColor != g_clrOldColor)
       
{
         
string strFile = (clrNewColor ==  C'0,0,0')? "clsWhite" : "clsBlack";
         
LabelCreate(0,"label0",0,50,50,CORNER_LEFT_UPPER,"Статистика","Tahoma",8,clrNewColor,0.0,ANCHOR_LEFT_UPPER,false,false,true,0);
         
ObjectSetInteger(0,"label0", OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);
         
ChartRedraw();
         g_sCurrentFile
= strFile;
         g_clrOldColor
= clrNewColor;
       
}
     
}
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool LabelCreate(const long              chart_ID=0,               // ID графика
                 
const string            name="Label",             // имя метки
                 
const int               sub_window=0,             // номер подокна
                 
const int               x=0,                      // координата по оси X
                 
const int               y=0,                      // координата по оси Y
                 
const ENUM_BASE_CORNER  corner=CORNER_LEFT_UPPER, // угол графика для привязки
                 
const string            text="Label",             // текст
                 
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)                // приоритет на нажатие мышью
 
{
//--- сбросим значение ошибки
   
ResetLastError();
//--- создадим текстовую метку
   
if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0))
     
{
     
Print(__FUNCTION__,
           
": не удалось создать текстовую метку! Код ошибки = ",GetLastError());
     
return(false);
     
}
//--- установим координаты метки
   
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
   
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
//--- установим угол графика, относительно которого будут определяться координаты точки
   
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
//--- установим текст
   
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);
   
ObjectSetInteger(chart_ID,name, OBJPROP_COLOR, (clrNewColor ==  C'0,0,0')? clrWhite : clrBlack);
//--- отобразим на переднем (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);
 
}
//+------------------------------------------------------------------+

avatar

  35  AM2 Сообщений: 16530 - Андрей

  • 5 октября 2019, 17:39
0
Спасибо большое!!!
avatar

  9  lafler356 Автор Сообщений: 305

  • 7 октября 2019, 10:33
0
Андрей Спасибо вам огромное! долгое время ломал голову как же сделать это :) 
avatar

  9  lafler356 Автор Сообщений: 305

  • 11 октября 2019, 08:50

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Загрузка...