Color del indicador estándar

 

¡Buenas tardes!

¿Cómo se cambia el color del indicador estándar?

Gracias, Mikhail

 
Mikalas:

¿Cómo puedo cambiar el color del programa indicador estándar?

Nunca he hecho esto antes, pero aquí hay una idea. Debe abrir el código del indicador estándar y encontrar allí las líneas con indicator_color*

Algo así como.

//--- японские свечи будут рисоваться цветом clrDodgerBlue
#property indicator_color1  clrDodgerBlue

A continuación, introducirá el color deseado. Ver también Referencia MQL5 / Indicadores Personalizados / Relación entre Propiedades y Funciones de los Indicadores y Referencia MQL5 / Constantes, Enumeraciones y Estructuras Estándar / Constantes de los Indicadores / Estilos de Dibujo

 

Gracias, por supuesto.

Pero resulta que cada vez que tengo que corregir el código...

Mikhail

 
Mikalas:

Gracias, por supuesto.

Pero, ¿significa eso que hay que cambiar el código cada vez?

Haga suyo el indicador "estándar" e introduzca en él sus opciones. Por ejemplo (pura idea): poner los colores en los parámetros de entrada, y luego procesarlos en Oninit() mediante la función PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Los ejemplos de la Referencia pueden ayudar. Entonces no se puede editar el código en sí, sino establecer el color deseado a través de las propiedades del indicador al iniciarlo o modificarlo.
 
Mikalas:

Gracias, por supuesto.

¿Pero resulta que hay que corregir el código cada vez?

Hay algo en tu lógica. Su pregunta original era:

Mikalas:

¿Cómo cambiar el color del indicador estándar mediante programación?

 
abolk:

Hay algo en tu lógica. Usted preguntó originalmente:

¡Querida abolk!

Obviamente, por su código.

Mikhail

 
Yedelkin:
Haz tuyo el indicador "interno", - e introduce en él tus opciones. Por ejemplo (pura idea): poner los colores en los parámetros de entrada, y luego procesarlos en Oninit() mediante la función PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Los ejemplos de la Referencia pueden ayudar. Entonces no se puede editar el código en sí, sino establecer el color deseado a través de las propiedades del indicador al iniciarlo o modificarlo.

Muchas gracias.

Lástima que los desarrolladores no hayan pensado en eso.

Este código debería haber funcionado, PERO.... por desgracia...

params[0].type = TYPE_INT;
        params[0].integer_value = 10;
        
        params[1].type = TYPE_INT;
        params[1].integer_value = 0;
        
        params[2].type = TYPE_INT;
        params[2].integer_value = MODE_SMA;
        
        params[3].type = TYPE_INT;
        params[3].integer_value = PRICE_MEDIAN;
        
        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
        
        ma_handle = IndicatorCreate( NULL, PERIOD_CURRENT, IND_MA, 5, params );
        if ( ma_handle != INVALID_HANDLE )
      {
        ChartIndicatorAdd( 0, 0, ma_handle );
      }
 
Mikalas:

Este código debería haber funcionado, PERO.... por desgracia...

No funcionó con la función IndicatorCreate() - resultó ser más fácil crear sus indicadores personalizados. No obstante, como sólo has citado una parte del código, una pregunta: ¿has puesto a cero la variable params antes de utilizarla? Por ejemplo, así:

MqlParam params;
ZeroMemory(params); 

¿Y qué código de error reclama su entrada?

Lo hiciste:

ArrayResize(params,5);
?

Además, el indicador IND_MA(iMA) no tiene el parámetro "Color", y tú lo tienes especificado. Vea un ejemplo de uso de iMA aquí: MQL5 Reference / Access to timeseries and indicators / IndicatorCreate.

 
Mikalas:

Este código debería haber funcionado

¿Por qué? Explica primero por qué el color es un número real.

        params[4].type = TYPE_COLOR;
        params[4].double_value = clrBlue;
 

¡Buenas tardes, stringo y Yedelkin!

Seguramente no has leído bien mi mensaje, que decía

"Lástima que los desarrolladores no hayan pensado en eso. "

Ahora, permítanme explicar por qué escribí el código anterior.

Desde la configuración de la Media Móvil, se puede ver claramente que el indicador tiene 7 parámetros (5 parámetros principales + 2 líneas).

Esto es lo que dice la pestaña "Parámetros".

Si puede cambiar TODOS los parámetros "manualmente", significa que debe haber

lo que han hecho los desarrolladores: ¡cambiar TODOS los parámetros de forma programada!

En la función IndicatorCreate, pero no hasta el final (o es un BAG).

MA

La estructura MqlParam permite introducir un color - TYPE_COLOR(ENUM_DATATYPE);

De la referencia MQL5:

El tipo de color está diseñado para almacenar información de color y ocupa 4 bytes en la memoria. El primer byte se ignora, los 3 bytes restantes contienen los componentes RGB.

......

La representación de números enteros se escribe como número hexadecimal o decimal. Unnúmero hexadecimal es 0x00BBGGRR

//--- representación de enteros
0xFFFFFFFF //blanco
16777215 //blanco
0x008000 //verde
32768 //verde

Fin de la cita.

struct MqlParam
{
ENUM_DATATYPE type; // tipo de parámetro de entrada, valor de enumeración ENUM_DATYPE
long integer_value; // campo para almacenar un valor entero
double double_value; // campo para almacenar el valor de double o float
string string_value; // campo para almacenar el valor de tipo string
};

(Primero probé con el largo no funcionó, y luego probé con el doble - tampoco funcionó, lo que queda en el código).

Debería ser así:

MqlParam params[5];


.........

params[4].type = TYPE_COLOR;
params[4].integer_value = clrBlue; // - color azul 0x00FF0000 (16711680)

stringo, he respondido a tu pregunta "¿por qué no?

Una vez más, es una pena que los desarrolladores no hayan hecho un cambio de color.

Respetuosamente, Mikhail

 
Mikalas:

¡Buenas tardes, stringo y Yedelkin!

Seguramente no has leído bien mi mensaje, que decía

"Lástima que los desarrolladores no hayan pensado en eso. "

Mikalas, aquí ya hay tantos expertos sacando conclusiones por los demás que da miedo. No aumenten su número, por favor.

A continuación, te ayudé haciendo preguntas concretas y no emocionales. En lugar de contestarles me dices "cómo has llegado a este punto de tu vida" ¿Qué quieres? -¿Convencer a alguien de que hay errores que has detectado, o mejorar "programáticamente" tu código? Si ves algún "bug" - ponte en contacto con el Service Desk con una descripción completa de la situación. Si quieres trabajar de forma "programada", profundiza en la creación y el funcionamiento de los indicadores.