Добрый день, нужен индикатор в котором бы создавался 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);
}
Комментарии (6)
35 AM2 Сообщений: 16277 - Андрей
9 lafler356 Автор Сообщений: 305
35 AM2 Сообщений: 16277 - Андрей
35 AM2 Сообщений: 16277 - Андрей
9 lafler356 Автор Сообщений: 305
9 lafler356 Автор Сообщений: 305
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий