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

Рейтинг 2146



РЕКОМЕНДУЮ



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

Добрый день, нужен индикатор в котором бы создавался 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
  • Просмотров: 1346
  • 5 октября 2019, 14:47
  • lafler356
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

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

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

  • 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 Сообщений: 16277 - Андрей

  • 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 Сообщений: 16277 - Андрей

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

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

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

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

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

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