![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
Gracias por eso
¿Qué papel tiene esta línea SetIndexStyle(0, DRAW_LINE) en el código anterior cuando acabamos de utilizar los objetos para dibujar la línea? Entiendo el papel de los buffers, pero no sé por qué un buffer debe estar vinculado a un índice y por qué un índice debe tener estilo, ya que lo que vemos está fuera de la llamada createObject con atributos de precio.
¿Viste que usando el código anterior las velas tienen bordes curvos y no rectángulos puros como el gráfico de precios?
Ya lo he explicado.
Si quieres rectángulos dibuja rectángulos en lugar de objetos de línea de tendencia.
Hola Phy
Lo siento por ser una molestia, la opción RECTANGULO no funciona, por eso te estoy molestando, gracias por tu paciencia y por favor prueba esto y hazme saber, he arreglado los cálculos de HA.
Por favor, intente una última vez gracias, me gustaría poder conseguir que este rectángulo funcione correctamente.
#property indicator_separate_window
#property indicator_buffers 6
#propiedad indicador_color1 CLR_NONE
#propiedad indicador_color2 CLR_NONE
double high[];
double low[];
double open[];
double close[];
double haOpen1[];
double haClose1[];
//+------------------------------------------------------------------+
//| Función de inicialización de los indicadores personalizados ||.
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
SetIndexBuffer(0, alto);
SetIndexBuffer(1, low);
SetIndexBuffer(2, open);
SetIndexBuffer(3, close);
SetIndexBuffer(4, haOpen1);
SetIndexBuffer(5, haClose1);
return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador personalizada ||
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizada ||.
//+------------------------------------------------------------------+
int inicio(){
string basename = "Heikin-Ashi";
IndicatorShortName(basename);
int window = WindowFind(basename);
for (int i = Bars-100; i >= 0; i--){
// estos dos índices se utilizan para controlar el tamaño de la subventana
// no son visibles
high[i] = High[i];
low[i] = Low[i];
double haOpen, haHigh, haLow, haClose,haDiffCo;
haOpen=(haOpen1[i+1]+haClose1[i+1])/2;
haOpen1[i] = haOpen;
haClose=(Open[i]+High[i]+Low[i]+Close[i])/4;
haClose1[i] = haClose;
haHigh=MathMax(haOpen,High[i]);
haLow=MathMin(haOpen,Low[i]);
string name1 = "Heikin-Ashi-HL-"+i;
if(ObjectFind(name1) != -1) ObjectDelete(name1);
ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow);
ObjectSet(nombre1, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name1, OBJPROP_RAY, 0);
ObjectSet(nombre1, OBJPROP_WIDTH, 2);
string name2 = "Heikin-Ashi-OC-"+i;
if(ObjectFind(nombre2) != -1) ObjectDelete(nombre2);
ObjectCreate(name2, OBJ_RECTANGLE, window, Time[i], haOpen, Time[i], haClose);
ObjectSet(nombre2, OBJPROP_WIDTH, 5);
//ObjectSet(nombre2, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(nombre2, OBJPROP_RAY, 0);
si (haOpen < haClose) {
ObjectSet(nombre1, OBJPROP_COLOR, Chartreuse);
ObjectSet(name2, OBJPROP_COLOR, Chartreuse);
}else{
ObjectSet(name1, OBJPROP_COLOR, Red);
ObjectSet(name2, OBJPROP_COLOR, Red);
}
}
return(0);
}
Las velas deben ser líneas de tendencia
Ancho del cuerpo 2 o más probablemente, 3
No sé a qué te refieres con el "redondeo" de las líneas
Muestra una imagen
A veces, cuando se desplaza a la izquierda también aparece esto (mezcla de verde y rojo)
Sí, lo veo.
Creo que tienes algunas barras viejas para borrar allí.
Averigüe qué es lo que está mal y luego piense en cómo podría solucionarlo. ¿hay barras duplicadas, qué está pasando?
Hola Phy
Si estoy en lo cierto, el problema puede deberse a que hago lo siguiente
SetIndexStyle(0, DRAW_LINE);
SetIndexStyle(1, DRAW_LINE);
SetIndexStyle(2, DRAW_LINE);
SetIndexStyle(3, DRAW_LINE);
SetIndexStyle(4, DRAW_LINE);
SetIndexStyle(5, DRAW_LINE);
Hago lo anterior y hago que se dibujen los buffers y al mismo tiempo hago
if(ObjectFind(nombre1) != -1) ObjectDelete(nombre1);
ObjectCreate(name1, OBJ_TREND, window, Time[i], haHigh, Time[i], haLow);
ObjectSet(nombre1, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(name1, OBJPROP_RAY, 0);
ObjectSet(nombre1, OBJPROP_WIDTH, 2);
string name2 = "Heikin-Ashi-OC-"+i;
if(ObjectFind(nombre2) != -1) ObjectDelete(nombre2);
ObjectCreate(name2, OBJ_TREND, window, Time[i], haOpen, Time[i], haClose);
ObjectSet(nombre2, OBJPROP_WIDTH, 5);
//ObjectSet(nombre2, OBJPROP_STYLE, STYLE_SOLID);
ObjectSet(nombre2, OBJPROP_RAY, 0);
Así que tanto los datos del buffer como los objetos se dibujan uno encima del otro, ¿Estoy en lo cierto?
¿Debería quitar la configuración del código de estilo de índice ya que sólo estoy usando el buffer para el almacenamiento de datos y no quiero dibujarlo?
¿Estoy en lo cierto?