¿Cómo puedo aprender a crear objetos gráficos? MQL4. - página 3

 
Integer:

Si el indicador crea objetos gráficos y luego obtiene sus parámetros, no.

Pero sigue siendo más fácil resolver todo mediante el uso de un indicador. Los cálculos se realizan en el indicador y sus resultados se muestran a través de los buffers del indicador.

Hay una alternativa más. Crear variables globales con parámetros de la línea en lugar de líneas, pero en este caso, la función GetValueByShift() no funcionará, debe escribir su análogo.

Ya veo. Pero, ¿cómo dibujar una línea de tendencia en un indicador sin ningún dibujo gráfico?

Si se conocen dos índices de barras, deben conectarse con una línea y dibujarse a la derecha.

 
forexman77:

Ya veo. Pero, ¿cómo puedo dibujar una línea de tendencia en el indicador sin ningún dibujo gráfico?

Si se conocen dos índices de barras, deben estar conectados por una línea y dibujados a la derecha.

Yo tenía un indicador de este tipo en mi base de código. Ahora no lo tengo.

Deberíamos utilizar los cálculos. Conociendo las coordenadas de dos puntos podemos calcular simplemente las coordenadas del tercero.

 
Integer:

Solía tener un indicador de este tipo en mi código base. Ahora se ha ido, se ha ido.

Hay que usar cálculos para hacer todo. Conociendo las coordenadas de dos puntos, basta con calcular las coordenadas del tercero.

¿Dónde encontrar una fórmula para este cálculo?

En general, parece un poco nouveau. El terminal tiene todo tipo de canales, fibos y otros índices geométricos, pero son inútiles en el probador.

 
forexman77:

¿Dónde puedo encontrar la fórmula para este cálculo?

En general, es una especie de nuevo rico. Hay un montón de canales, Fibos y otros indicadores geométricos en el terminal, pero son inútiles en el probador.

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - números de barra. y1, y2 - valores de precio. x3 - número de barra para la que se realiza el cálculo.

 
Integer:

x1, x2 - números de barra. y1, y2 - valores de precio. x3 - número de barra para la que se realiza el cálculo.

Bien. Gracias. Seguiré investigando.
 
Integer:

x1, x2 - números de barra. y1, y2 - valores de precio. x3 - número de barra para la que se realiza el cálculo.

Indicador realizado en base a los cálculos, las lecturas son las mismas que para el indicador en los objetos gráficos.

La optimización está en marcha. El único problema es que las operaciones no se abren correctamente.

Cuando aplico el indicador al gráfico la línea es plana al principio, pero luego se convierte en lo que debe ser y se queda así cuando lo coloco en un nuevo tick.

 
forexman77:

Realizado un indicador basado en los cálculos, las lecturas son las mismas que el indicador en los objetos gráficos.

La optimización está en marcha. El único problema es que las operaciones no se abren correctamente.

Cuando aplico el indicador al gráfico la línea es plana al principio, y luego con un nuevo tick se convierte en lo que debe ser y se queda así.

Intenta probarlo en modo visual. Utilizando la impresión, busque la diferencia.
 
Integer:
Intenta hacer la prueba en modo visual. Utilizando la impresión, comente, busque la diferencia.

El modo visual no ayudará. He podido hacer que el indicador muestre sólo el patrón actual.

El propio indicador imprime el valor del primer índice (MQL4), la primera impresión sale con un valor incorrecto, y las otras son correctas en los nuevos ticks.

Si no te importa ver el código, te lo envié en tu mensaje personal.

 

De todos modos, he transferido todos los cálculos de la línea de tendencia al EA. Parece que es correcto.

No puedo hacer un indicador, que mostraría en todo el rango de la línea. No tengo suficiente experiencia.

En realidad necesito un indicador para ver visualmente que las operaciones se abren correctamente.

He decidido utilizar objetos gráficos para la visualización.

El problema es el error 4200 (el objeto ya existe).

He intentado dar un nuevo nombre al objeto cada vez. El mismo error.

¿Es posible llamar a varios objetos? Si es así, ¿cómo puedo recortar las partes innecesarias del rayo?

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         ResetLastError();
         //--- создадим трендовую линию по заданным координатам
         if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
           {
            Print(__FUNCTION__,
                  ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
            return(0);
           }
         ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
         ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
         ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
         ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

 
forexman77:

De todos modos, he transferido todos los cálculos de la línea de tendencia al EA. Parece que es correcto.

No puedo hacer un indicador, que mostraría en todo el rango de la línea. No tengo suficiente experiencia.

En realidad necesito un indicador para ver visualmente que las operaciones se abren correctamente.

He decidido utilizar objetos gráficos para la visualización.

El problema es el error 4200 (el objeto ya existe).

He intentado dar un nuevo nombre al objeto cada vez. El mismo error.

¿Es posible llamar a varios objetos? Si es así, ¿cómo puedo recortar las partes innecesarias de un rayo?

Antes de la creación, se puede comprobar si el objeto existe, función ObjectFind(). No hay que hacer nada, existe y no pasa nada, no es un mal error.

Un conjunto de objetos. Puedes añadir la hora del bar al nombre del objeto, tendrá un nombre único.

Recorta la viga. Propiedad ObjectSet(Nombre,OBJPROP_RAY,false);