MQLArticles/Utils/GraphicObjects.mqh

902 lines
95 KiB
MQL5

2025-10-22 18:51:04 -05:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| GraphicObjects.mqh |
//| Copyright 2025, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372/news |
//+------------------------------------------------------------------+
2025-11-10 09:33:53 -05:00
#property copyright "Copyright 2025, Niquel Mendoza."
2025-10-22 18:51:04 -05:00
#property link "https://www.mql5.com/es/users/nique_372/news"
2025-11-28 17:21:07 -05:00
2025-10-22 18:51:04 -05:00
#property strict
2026-01-02 10:22:09 -05:00
2025-10-22 18:51:04 -05:00
#ifndef MQLARTICLES_UTILS_GRAPHICOBJECTS_MQH
2025-11-28 17:21:07 -05:00
#define MQLARTICLES_UTILS_GRAPHICOBJECTS_MQH
//+------------------------------------------------------------------+
//| Include |
2025-10-22 18:51:04 -05:00
//+------------------------------------------------------------------+
#include "..\\Utils\\Basic.mqh"
2025-11-28 17:21:07 -05:00
2025-10-22 18:51:04 -05:00
//+------------------------------------------------------------------+
//| Functions for creating native MT5 graphical objects |
//+------------------------------------------------------------------+
bool VLineCreate(const long chart_ID, // ID del gr<EFBFBD>fico
const string name, // nombre de la l<EFBFBD>nea
const int sub_window, // <EFBFBD>ndice de subventana
datetime time, // hora de la l<EFBFBD>nea
const color clr, // color de la l<EFBFBD>nea
const ENUM_LINE_STYLE style, // estilo de la l<EFBFBD>nea
const int width, // grosor de la l<EFBFBD>nea
const bool back, // al fondo
const bool selection, // seleccionar para mover
const bool ray,
const string tooltip, // continuaci<EFBFBD>n de la l<EFBFBD>nea abajo
const long z_order = 0) // prioridad para el clic del rat<EFBFBD>n
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos la l<EFBFBD>nea vertical
if(!ObjectCreate(chart_ID, name, OBJ_VLINE, sub_window, time, 0))
{
Print(__FUNCTION__,
": <00>Fallo al crear la l<00>nea vertical! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos el color de la l<EFBFBD>nea
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- establecemos el estilo de visualizaci<EFBFBD>n de la l<EFBFBD>nea
ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
//--- establecemos el grosor de la l<EFBFBD>nea
ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, width);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- activar (true) o desactivar (false) el modo de desplazamiento de la l<EFBFBD>nea con rat<EFBFBD>n
//--- cuando el objeto gr<EFBFBD>fico se crea usando la funci<EFBFBD>n ObjectCreate, por defecto el objeto
//--- no se puede seleccionar y mover. Mientras que dentro de este m<EFBFBD>todo el par<EFBFBD>metro selection
//--- por defecto es igual a true, lo que permite seleccionar y mover este objeto
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//--- activar (true) o desactivar (false) el modo de visualizaci<EFBFBD>n de la l<EFBFBD>nea en las subventanas del gr<EFBFBD>fico
ObjectSetInteger(chart_ID, name, OBJPROP_RAY, ray);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gr<EFBFBD>fico
ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
ObjectSetString(chart_ID, name, OBJPROP_TOOLTIP, tooltip);
//--- ejecuci<EFBFBD>n con <EFBFBD>xito
return(true);
}
//+------------------------------------------------------------------+
bool TrendCreate(long chart_ID, // ID del gr<EFBFBD>fico
string name, // Nombre de la l<EFBFBD>nea
int sub_window, // <EFBFBD>ndice de subventana
datetime time1, // hora del primer punto
double price1, // precio del primer punto
datetime time2, // hora del segundo punto
double price2, // precio del segundo punto
color clr, // color de la l<EFBFBD>nea
ENUM_LINE_STYLE style, // estilo de la l<EFBFBD>nea
int width, // grosor de la l<EFBFBD>nea
bool back, // al fondo
bool selection, // seleccionar para mover
string toltip
)
{
//--- establecemos las coordenadas de los puntos de anclaje si todav<EFBFBD>a no han sido establecidas
//--- anulamos el valor del error
ResetLastError();
//--- creamos la l<EFBFBD>nea de tendencia seg<EFBFBD>n las coordenadas establecidas
if(!ObjectCreate(chart_ID, name, OBJ_TREND, sub_window, time1, price1, time2, price2))
{
Print(__FUNCTION__,
": <00>Fallo al crear la l<00>nea de tendencia! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos el color de la l<EFBFBD>nea
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, width);
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
ObjectSetString(chart_ID, name, OBJPROP_TOOLTIP, toltip);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
return(true);
}
//+------------------------------------------------------------------+
bool TrendaAngleCreate(long chart_ID, // ID del gr<EFBFBD>fico
string name, // Nombre de la l<EFBFBD>nea
int sub_window, // <EFBFBD>ndice de subventana
datetime time1, // hora del primer punto
double price1, // precio del primer punto
datetime time2, // hora del segundo punto
double price2, // precio del segundo punto
color clr, // color de la l<EFBFBD>nea
ENUM_LINE_STYLE style, // estilo de la l<EFBFBD>nea
int width, // grosor de la l<EFBFBD>nea
bool back, // al fondo
bool selection, // seleccionar para mover
string toltip
)
{
//--- establecemos las coordenadas de los puntos de anclaje si todav<EFBFBD>a no han sido establecidas
//--- anulamos el valor del error
ResetLastError();
//--- creamos la l<EFBFBD>nea de tendencia seg<EFBFBD>n las coordenadas establecidas
if(!ObjectCreate(chart_ID, name, OBJ_TRENDBYANGLE, sub_window, time1, price1, time2, price2))
{
Print(__FUNCTION__,
": <00>Fallo al crear la l<00>nea de tendencia! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos el color de la l<EFBFBD>nea
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, width);
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
ObjectSetString(chart_ID, name, OBJPROP_TOOLTIP, toltip);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
return(true);
}
//+------------------------------------------------------------------+
bool TextCreate(long chart_ID, // ID del gr<EFBFBD>fico
string name, // nombre del objeto
int sub_window, // n<EFBFBD>mero de subventana
datetime time, // hora del punto de anclaje
double price, // precio del punto de anclaje
string text, // el texto
string font, // fuente
int font_size, // tama<EFBFBD>o de la fuente
color clr, // color
double angle, // inclinaci<EFBFBD>n del texto
ENUM_ANCHOR_POINT anchor, // modo de anclaje
bool back = false, // al fondo
bool selection = false) // seleccionar para mover
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos el objeto "Texto"
if(!ObjectCreate(chart_ID, name, OBJ_TEXT, sub_window, time, price))
{
PrintFormat("Fallo al crear el texto %s, ultimo error %i", name, GetLastError());
return(false);
}
//--- ponemos el texto
ObjectSetString(chart_ID, name, OBJPROP_TEXT, text);
ObjectSetString(chart_ID, name, OBJPROP_TOOLTIP, text);
//--- establecemos la fuente del texto
ObjectSetString(chart_ID, name, OBJPROP_FONT, font);
//--- establecemos el tama<EFBFBD>o del texto
ObjectSetInteger(chart_ID, name, OBJPROP_FONTSIZE, font_size);
//--- establecemos el <EFBFBD>ngulo de inclinaci<EFBFBD>n del texto
ObjectSetDouble(chart_ID, name, OBJPROP_ANGLE, angle);
//--- establecemos el modo de anclaje
ObjectSetInteger(chart_ID, name, OBJPROP_ANCHOR, anchor);
//--- establecemos el color
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- activar (true) o desactivar (false) el modo de desplazamiento del texto con rat<EFBFBD>n
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//ChartRedraw(chart_ID);
//--- ejecuci<EFBFBD>n con <EFBFBD>xito
return(true);
}
//+------------------------------------------------------------------+
bool ArrowCreate(const long chart_ID, // ID del gr<EFBFBD>fico
const string name, // nombre de la flecha
const int sub_window, // n<EFBFBD>mero de subventana
datetime time, // hora del punto de anclaje
double price, // precio del punto de anclaje
const uchar arrow_code, // c<EFBFBD>digo de la flecha
const ENUM_ARROW_ANCHOR anchor, // posici<EFBFBD>n del punto de anclaje
const color clr, // color de la flecha
const ENUM_LINE_STYLE style, // estilo de la l<EFBFBD>nea del contorno
const int width, // tama<EFBFBD>o de la flecha
const bool back = true, // al fondo
const bool selection = false, // seleccionar para mover
const long z_order = 0) // prioridad para el clic del rat<EFBFBD>n
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos la flecha
if(!ObjectCreate(chart_ID, name, OBJ_ARROW, sub_window, time, price))
{
Print(__FUNCTION__,
": <00>Fallo al crear la flecha! C<00>digo del error = ", GetLastError(), " el nombre: ", name);
return(false);
}
//--- establecemos el c<EFBFBD>digo de la flecha
ObjectSetInteger(chart_ID, name, OBJPROP_ARROWCODE, arrow_code);
//--- establecemos el modo de anclaje
ObjectSetInteger(chart_ID, name, OBJPROP_ANCHOR, anchor);
//--- establecemos el color de la flecha
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- establecemos el estilo de la l<EFBFBD>nea del contorno
ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
//--- establecemos el tama<EFBFBD>o de la flecha
ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, width);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- activar (true) o desactivar (false) el modo de desplazamiento de la flecha con rat<EFBFBD>n
//--- cuando el objeto gr<EFBFBD>fico se crea usando la funci<EFBFBD>n ObjectCreate, por defecto el objeto
//--- no se puede seleccionar y mover. Mientras que dentro de este m<EFBFBD>todo el par<EFBFBD>metro selection
//--- por defecto es igual a true, lo que permite seleccionar y mover este objeto
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gr<EFBFBD>fico
ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
//--- ejecuci<EFBFBD>n con <EFBFBD>xito
return(true);
}
//+------------------------------------------------------------------+
bool EditCreate(const long chart_ID, // ID del gr<EFBFBD>fico
const string name, // nombre del objeto
const int sub_window, // n<EFBFBD>mero de subventana
const int x, // coordenada por el eje X
const int y, // coordenada por el eje Y
const int width, // ancho
const int height, // alto
const string text, // texto
const string font, // fuente
const int font_size, // tama<EFBFBD>o de la fuente
const ENUM_ALIGN_MODE align, // modo de alineaci<EFBFBD>n
const bool read_only, // posibilidad de edici<EFBFBD>n
const ENUM_BASE_CORNER corner, // esquina del gr<EFBFBD>fico para el enlace
const color clr, // color del texto
const color back_clr, // color del fondo
const color border_clr, // color del borde
const bool back = false, // al fondo
const bool selection = false, // seleccionar para mover
const bool hidden = true, // ocultar en la lista de objetos
const long z_order = 0) // prioridad para el clic del rat<EFBFBD>n
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos el campo de edici<EFBFBD>n
if(!ObjectCreate(chart_ID, name, OBJ_EDIT, sub_window, 0, 0))
{
Print(__FUNCTION__,
": <00>Fallo al crear el objeto \"Campo de edici<EFBFBD>n\"! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos las coordenadas del objeto
ObjectSetInteger(chart_ID, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(chart_ID, name, OBJPROP_YDISTANCE, y);
//--- establecemos el tama<EFBFBD>o del objeto
ObjectSetInteger(chart_ID, name, OBJPROP_XSIZE, width);
ObjectSetInteger(chart_ID, name, OBJPROP_YSIZE, height);
//--- ponemos el texto
ObjectSetString(chart_ID, name, OBJPROP_TEXT, text);
//--- establecemos la fuente del texto
ObjectSetString(chart_ID, name, OBJPROP_FONT, font);
//--- establecemos el tama<EFBFBD>o del texto
ObjectSetInteger(chart_ID, name, OBJPROP_FONTSIZE, font_size);
//--- establecemos el modo de alineaci<EFBFBD>n del texto dentro del objeto
ObjectSetInteger(chart_ID, name, OBJPROP_ALIGN, align);
//--- ponemos (true) o cancelamos (false) el modo s<EFBFBD>lo para lectura
ObjectSetInteger(chart_ID, name, OBJPROP_READONLY, read_only);
//--- establecemos la esquina del gr<EFBFBD>fico respecto a la cual van a determinarse las coordenadas del objeto
ObjectSetInteger(chart_ID, name, OBJPROP_CORNER, corner);
//--- establecemos el color del texto
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- establecemos el color del fondo
ObjectSetInteger(chart_ID, name, OBJPROP_BGCOLOR, back_clr);
//--- establecemos el color del borde
ObjectSetInteger(chart_ID, name, OBJPROP_BORDER_COLOR, border_clr);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- activar (true) o desactivar (false) el modo de desplazamiento de la etiqueta con rat<EFBFBD>n
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//--- ocultamos (true) o mostramos (false) el nombre del objeto gr<EFBFBD>fico en la lista de objetos
ObjectSetInteger(chart_ID, name, OBJPROP_HIDDEN, hidden);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gr<EFBFBD>fico
ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
//--- ejecuci<EFBFBD>n con <EFBFBD>xito
return(true);
}
//+------------------------------------------------------------------+
bool ButtonCreate(const long chart_ID, // ID del gr<EFBFBD>fico
const string name, // nombre del bot<EFBFBD>n
const int sub_window, // n<EFBFBD>mero de subventana
const int x, // coordenada por el eje X
const int y, // coordenada por el eje Y
const int width, // ancho del bot<EFBFBD>n
const int height, // alto del bot<EFBFBD>n
const ENUM_BASE_CORNER corner, // esquina del gr<EFBFBD>fico para el enlace
const string text, // texto
const string font, // fuente
const int font_size, // tama<EFBFBD>o de la fuente
const color clr, // color del texto
const color back_clr, // color del fondo
const color border_clr, // color del borde
const bool state = false, // pulsado/no pulsado
const bool back = false, // al fondo
const bool selection = false, // seleccionar para mover
const bool hidden = false, // ocultar en la lista de objetos
const long z_order = 0) //prioridad para el clic del rat<EFBFBD>n
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos el bot<EFBFBD>n
if(!ObjectCreate(chart_ID, name, OBJ_BUTTON, sub_window, 0, 0))
{
Print(__FUNCTION__,
": <00>Fallo al crear el bot<00>n! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos las coordenadas del bot<EFBFBD>n
ObjectSetInteger(chart_ID, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(chart_ID, name, OBJPROP_YDISTANCE, y);
//--- establecemos el tama<EFBFBD>o del bot<EFBFBD>n
ObjectSetInteger(chart_ID, name, OBJPROP_XSIZE, width);
ObjectSetInteger(chart_ID, name, OBJPROP_YSIZE, height);
//--- establecemos la esquina del gr<EFBFBD>fico respecto a la cual van a determinarse las coordenadas del punto
ObjectSetInteger(chart_ID, name, OBJPROP_CORNER, corner);
//--- ponemos el texto
ObjectSetString(chart_ID, name, OBJPROP_TEXT, text);
//--- establecemos la fuente del texto
ObjectSetString(chart_ID, name, OBJPROP_FONT, font);
//--- establecemos el tama<EFBFBD>o del texto
ObjectSetInteger(chart_ID, name, OBJPROP_FONTSIZE, font_size);
//--- establecemos el color del texto
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- establecemos el color del fondo
ObjectSetInteger(chart_ID, name, OBJPROP_BGCOLOR, back_clr);
//--- establecemos el color del borde
ObjectSetInteger(chart_ID, name, OBJPROP_BORDER_COLOR, border_clr);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- set button state
ObjectSetInteger(chart_ID, name, OBJPROP_STATE, state);
//--- activar (true) o desactivar (false) el modo de desplazamiento del bot<EFBFBD>n con rat<EFBFBD>n
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//--- ocultamos (true) o mostramos (false) el nombre del objeto gr<EFBFBD>fico en la lista de objetos
ObjectSetInteger(chart_ID, name, OBJPROP_HIDDEN, hidden);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gr<EFBFBD>fico
ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
//--- ejecuci<EFBFBD>n con <EFBFBD>xito
return(true);
}
//+------------------------------------------------------------------+
bool RectLabelCreate(const long chart_ID, // ID del gr<EFBFBD>fico
const string name, // nombre de la etiqueta
const int sub_window, // n<EFBFBD>mero de subventana
const int x, // coordenada por el eje X
const int y, // coordenada por el eje Y
const int width, // ancho
const int height, // alto
const color back_clr, // color del fondo
const ENUM_BORDER_TYPE border, // tipo del borde
const ENUM_BASE_CORNER corner, // esquina del gr<EFBFBD>fico para el enlace
const color clr, // color del contorno plano (Flat)
const ENUM_LINE_STYLE style, // estilo del contorno plano
const int line_width, // grosor del contorno plano
const bool back = false, // al fondo
const bool selection = false, // seleccionar para mover
const bool hidden = true, // ocultar en la lista de objetos
const long z_order = 0) // prioridad para el clic del rat<EFBFBD>n
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos la etiqueta rectangular
if(!ObjectCreate(chart_ID, name, OBJ_RECTANGLE_LABEL, sub_window, 0, 0))
{
Print(__FUNCTION__,
": <00>Fallo al crear la etiqueta rectangular! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos las coordenadas de la etiqueta
ObjectSetInteger(chart_ID, name, OBJPROP_XDISTANCE, x);
ObjectSetInteger(chart_ID, name, OBJPROP_YDISTANCE, y);
//--- establecemos las dimensiones de la etiqueta
ObjectSetInteger(chart_ID, name, OBJPROP_XSIZE, width);
ObjectSetInteger(chart_ID, name, OBJPROP_YSIZE, height);
//--- establecemos el color del fondo
ObjectSetInteger(chart_ID, name, OBJPROP_BGCOLOR, back_clr);
//--- establecemos el tipo del borde
ObjectSetInteger(chart_ID, name, OBJPROP_BORDER_TYPE, border);
//--- establecemos la esquina del gr<EFBFBD>fico respecto a la cual van a determinarse las coordenadas del punto
ObjectSetInteger(chart_ID, name, OBJPROP_CORNER, corner);
//--- establecemos el color del contorno plano (en modo Flat)
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
//--- establecemos el estilo de las l<EFBFBD>neas del contorno plano
ObjectSetInteger(chart_ID, name, OBJPROP_STYLE, style);
//--- establecemos el grosor del contorno plano
ObjectSetInteger(chart_ID, name, OBJPROP_WIDTH, line_width);
//--- mostramos en el primer plano (false) o al fondo (true)
ObjectSetInteger(chart_ID, name, OBJPROP_BACK, back);
//--- activar (true) o desactivar (false) el modo de desplazamiento de la etiqueta con rat<EFBFBD>n
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTABLE, selection);
ObjectSetInteger(chart_ID, name, OBJPROP_SELECTED, selection);
//--- ocultamos (true) o mostramos (false) el nombre del objeto gr<EFBFBD>fico en la lista de objetos
ObjectSetInteger(chart_ID, name, OBJPROP_HIDDEN, hidden);
//--- establecemos la prioridad para obtener el evento de cliquear sobre el gr<EFBFBD>fico
ObjectSetInteger(chart_ID, name, OBJPROP_ZORDER, z_order);
//--- ejecuci<EFBFBD>n con <EFBFBD>xito
return(true);
}
//+------------------------------------------------------------------+
bool ArrowRightPriceCreate(const long chart_ID, // ID del gr<EFBFBD>fico
const string name, // nombre de la etiqueta de precio
const int sub_window, // n<EFBFBD>mero de subventana
datetime time, // hora del punto de anclaje
double price, // precio del punto de anclaje
const color clr, // color de la etiqueta de precio
const ENUM_LINE_STYLE style, // estilo de la l<EFBFBD>nea del contorno
const int width, // tama<EFBFBD>o de la etiqueta de precio
const bool back, // al fondo
const bool selection, // seleccionar para mover
const bool hidden, // ocultar en la lista de objetos
const long z_order) // prioridad para el clic del rat<EFBFBD>n
{
//--- anulamos el valor del error
ResetLastError();
//--- creamos la etiqueta de precio
if(!ObjectCreate(chart_ID, name, OBJ_ARROW_RIGHT_PRICE, sub_window, time, price))
{
Print(__FUNCTION__,
": <00>Fallo al crear la etiqueta derecha de precio! C<00>digo del error = ", GetLastError());
return(false);
}
//--- establecemos el color de la etiqueta
2025-11-10 09:33:53 -05:00
ObjectSetInteger(chart_ID, name, OBJPROP_COLOR, clr);
2025-10-22 18:51:04 -05:00