Couleur de l'indicateur standard

 

Bonjour !

Comment changer la couleur de l'indicateur standard ?

Merci, Mikhail

 
Mikalas:

Comment changer la couleur du programme indicateur standard ?

Je n'ai jamais fait ça avant, mais voici une idée. Vous devez ouvrir le code de l'indicateur standard et y trouver les lignes avec indicator_color*.

Quelque chose comme.

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

Ensuite, vous insérez la couleur souhaitée. Voir aussi Référence MQL5 / Indicateurs personnalisés / Relation entre les propriétés et les fonctions des indicateurs et Référence MQL5 / Constantes, énumérations et structures standard / Constantes des indicateurs / Styles de dessin

 

Merci, bien sûr.

Mais il s'avère qu'à chaque fois, je dois corriger le code ?

Mikhail

 
Mikalas:

Merci, bien sûr.

Mais cela signifie-t-il que vous devez changer le code à chaque fois ?

Appropriez-vous l'indicateur "standard", - et insérez-y vos options. Par exemple (idée pure) : mettre les couleurs dans les paramètres d'entrée, et ensuite les traiter dans Oninit() par la fonction PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Les exemples de la référence peuvent vous aider. Vous ne pouvez alors pas modifier le code lui-même, mais définir la couleur souhaitée par le biais des propriétés de l'indicateur lorsque vous le démarrez ou le modifiez.
 
Mikalas:

Merci, bien sûr.

Mais il s'avère que vous devez corriger le code à chaque fois ?

Il y a quelque chose dans votre logique. Votre question initiale était :

Mikalas:

Comment changer la couleur de l'indicateur standard de manière programmatique ?

 
abolk:

Il y a quelque chose dans votre logique. Vous avez demandé à l'origine :

Cher abolk !

Évidemment, à partir de votre code.

Mikhail

 
Yedelkin:
Appropriez-vous l'indicateur "interne" et insérez-y vos options. Par exemple (idée pure) : mettre les couleurs dans les paramètres d'entrée, et ensuite les traiter dans Oninit() par la fonction PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Les exemples de la référence peuvent vous aider. Vous ne pouvez alors pas modifier le code lui-même, mais définir la couleur souhaitée par le biais des propriétés de l'indicateur lorsque vous le démarrez ou le modifiez.

Merci beaucoup.

Dommage que les développeurs n'y aient pas pensé.

Ce code aurait dû fonctionner, MAIS.... hélas...

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:

Ce code aurait dû fonctionner, MAIS.... hélas...

Je n'ai pas travaillé avec la fonction IndicatorCreate() - il s'est avéré plus facile de créer vos indicateurs personnalisés. Néanmoins, puisque vous n'avez cité qu'une partie du code, une question : avez-vous remis à zéro la variable params avant de l'utiliser ? Par exemple, comme ceci :

MqlParam params;
ZeroMemory(params); 

Et quel code d'erreur votre entrée récupère-t-elle ?

Tu l'as fait :

ArrayResize(params,5);
?

De plus, l'indicateur IND_MA(iMA) n'a pas de paramètre tel que "Couleur", et vous l'avez spécifié. Regardez l'exemple d'utilisation de iMA ici : Référence MQL5 / Accès aux séries temporelles et aux indicateurs / IndicatorCreate.

 
Mikalas:

Ce code aurait dû fonctionner

Pourquoi ça ? Expliquez d'abord pourquoi la couleur est un nombre réel ?

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

Bonjour, stringo et Yedelkin !

Vous n'avez probablement pas lu attentivement mon message, qui disait

" Dommage que les développeurs n'y aient pas pensé. "

Maintenant, laissez-moi vous expliquer pourquoi j'ai écrit le code ci-dessus.

A partir des paramètres de la Moyenne Mobile, vous pouvez clairement voir que l'indicateur a 7 paramètres (5 paramètres principaux + 2 lignes).

C'est ce qui est indiqué dans l'onglet "Paramètres".

Si vous pouvez modifier TOUS les paramètres "manuellement", cela signifie qu'il doit y avoir

ce que les développeurs ont fait - changer TOUS les paramètres de manière programmatique !

Dans la fonction IndicatorCreate, mais pas jusqu'à la fin ( ou c'est un BAG).

MA

La structure MqlParam vous permet d'entrer une couleur - TYPE_COLOR(ENUM_DATATYPE) ;

De la référence MQL5 :

Le type de couleur est conçu pour stocker des informations sur la couleur et occupe 4 octets en mémoire. Le premier octet est ignoré, les 3 octets restants contiennent les composantes RVB.

......

La représentation des nombres entiers s'écrit en hexadécimal ou en décimal. Unnombre hexadécimal est 0x00BBGGRR

//--- représentation des nombres entiers
0xFFFFFFFF //blanc
16777215 //blanc
0x008000 //vert
32768 //vert

Fin de la citation.

struct MqlParam
{
ENUM_DATATYPE type; // type de paramètre d'entrée, valeur de l'énumération ENUM_DATYPE
long integer_value; // champ permettant de stocker une valeur entière
double double_value; // champ pour le stockage d'une valeur double ou flottante
string string_value; // champ pour le stockage de la valeur de type string
};

(J'ai d'abord essayé long, mais ça n'a pas marché, puis j'ai essayé double, mais ça n'a pas marché non plus, ce qui reste dans le code).

Ça devrait être comme ça :

MqlParam params[5] ;


.........

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

stringo, j'ai répondu à votre question "pourquoi pas" ?

Encore une fois, il est dommage que les développeurs n'aient pas fait un changement de couleur.

Respectueusement, Mikhail

 
Mikalas:

Bonjour, stringo et Yedelkin !

Vous n'avez probablement pas lu attentivement mon message, qui disait

" Dommage que les développeurs n'y aient pas pensé. "

Mikalas, il y a déjà tellement d'experts ici qui sautent aux conclusions pour les autres que c'est effrayant. N'augmentez pas leur nombre, s'il vous plaît.

Ensuite, je vous ai aidé en posant des questions spécifiques sans émotion. Au lieu d'y répondre, vous me dites "comment vous en êtes arrivé là dans votre vie". Que voulez-vous ? -Convaincre quelqu'un qu'il y a des bugs que vous avez détectés, ou améliorer "programmatiquement" votre code ? Si vous constatez un "bug", contactez le Service Desk avec une description complète de la situation. Si vous voulez travailler de manière "programmatique" - approfondissez la création et le fonctionnement des indicateurs.

Raison: