Colore dell'indicatore standard

 

Buon pomeriggio!

Come si cambia il colore dell'indicatore standard?

Grazie, Mikhail

 
Mikalas:

Come posso cambiare il colore del programma di indicatori standard?

Non l'ho mai fatto prima, ma ecco un'idea. Dovresti aprire il codice dell'indicatore standard e trovarci le linee con indicator_color*

Qualcosa come.

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

Poi si inserisce il colore richiesto. Vedere anche MQL5 Reference / Custom Indicators / Relation between Indicator Properties and Functions e MQL5 Reference / Standard Constants, Enumerations and Structures / Indicator Constants / Drawing Styles

 

Grazie, naturalmente.

Ma si scopre che ogni volta devo correggere il codice?

Mikhail

 
Mikalas:

Grazie, naturalmente.

Ma questo significa che dovete cambiare il codice ogni volta?

Fate vostro l'indicatore "standard", - e inseriteci le vostre opzioni. Per esempio (idea pura): mettere i colori nei parametri di input, e poi elaborarli in Oninit() con la funzione PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Gli esempi nel Riferimento possono aiutare. Quindi non puoi modificare il codice stesso, ma impostare il colore desiderato attraverso le proprietà dell'indicatore quando lo avvii o lo cambi.
 
Mikalas:

Grazie, naturalmente.

Ma si scopre che bisogna correggere il codice ogni volta?

C'è qualcosa nella tua logica. La tua domanda originale era:

Mikalas:

Come cambiare il colore dell'indicatore standard in modo programmatico?

 
abolk:

C'è qualcosa nella sua logica. L'hai chiesto all'inizio:

Caro abolk!

Ovviamente, dal tuo codice.

Mikhail

 
Yedelkin:
Fate vostro l'indicatore "interno", - e inseriteci le vostre opzioni. Per esempio (idea pura): mettere i colori nei parametri di input, e poi elaborarli in Oninit() con la funzione PlotIndexSetInteger(N-1, PLOT_LINE_COLOR, nColor). Gli esempi nel Riferimento possono aiutare. Quindi non puoi modificare il codice stesso, ma impostare il colore desiderato attraverso le proprietà dell'indicatore quando lo avvii o lo cambi.

Grazie mille.

Peccato che gli sviluppatori non ci abbiano pensato.

Questo codice avrebbe dovuto funzionare, MA.... ahimè...

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:

Questo codice avrebbe dovuto funzionare, MA.... ahimè...

Non ha funzionato con la funzione IndicatorCreate() - si è rivelato più facile creare gli indicatori personalizzati. Tuttavia, dato che hai citato solo una parte del codice, una domanda: hai azzerato la variabile params prima di usarla? Per esempio, così:

MqlParam params;
ZeroMemory(params); 

E quale codice di errore reclama la sua voce?

L'hai fatto:

ArrayResize(params,5);
?

Inoltre, l'indicatore IND_MA(iMA) non ha un parametro come "Colore", e tu lo hai specificato. Date un'occhiata all'esempio di utilizzo di iMA qui: MQL5 Reference / Access to timeseries and indicators / IndicatorCreate.

 
Mikalas:

Questo codice avrebbe dovuto funzionare

Perché? Per prima cosa spiegare perché il colore è un numero reale?

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

Buon pomeriggio, Stringo e Yedelkin!

Probabilmente non hai letto attentamente il mio messaggio, che diceva

"Peccato che gli sviluppatori non ci abbiano pensato. "

Ora, lasciatemi spiegare perché ho scritto il codice di cui sopra.

Dalle impostazioni della media mobile, si può vedere chiaramente che l'indicatore ha 7 parametri (5 parametri principali + 2 linee).

Questo è quello che dice nella scheda "Parametri".

Se potete cambiare TUTTI i parametri "manualmente", significa che ci deve essere

cosa hanno fatto gli sviluppatori - per cambiare TUTTI i parametri programmaticamente!

Nella funzione IndicatorCreate, ma non alla fine (o è un BAG).

MA

La struttura MqlParam permette di inserire un colore - TYPE_COLOR(ENUM_DATATYPE);

Dal riferimento MQL5:

Il tipo di colore è progettato per memorizzare informazioni sul colore e occupa 4 byte nella memoria. Il primo byte è ignorato, i restanti 3 byte contengono componenti RGB.

......

La rappresentazione dei numeri interi è scritta come numero esadecimale o decimale. Unnumero esadecimale è 0x00BBGGRR

//--- rappresentazione di un intero
0xFFFFFFFF //bianco
16777215 //bianco
0x008000 //verde
32768 //verde

Fine della citazione.

struct MqlParam
{
ENUM_DATATYPE type; // tipo di parametro di ingresso, valore di enumerazione ENUM_DATYPE
long integer_value; // campo per memorizzare un valore intero
double double_value; // campo per memorizzare un valore doppio o float
stringa string_value; // campo per la memorizzazione del valore di tipo stringa
};

(Ho provato prima long non ha funzionato, e poi ho provato double - non ha funzionato neanche questo, che rimane nel codice).

Dovrebbe essere così:

MqlParam params[5];


.........

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

stringo, ho risposto alla tua domanda "perché diavolo no"?

Ancora una volta, è un peccato che gli sviluppatori non abbiano fatto un cambio di colore.

Rispettosamente, Mikhail

 
Mikalas:

Buon pomeriggio, Stringo e Yedelkin!

Probabilmente non hai letto attentamente il mio messaggio, che diceva

"Peccato che gli sviluppatori non ci abbiano pensato. "

Mikalas, ci sono già così tanti esperti qui che saltano alle conclusioni per gli altri che fa paura. Non aumentate il loro numero, per favore.

Poi, ti ho aiutato facendoti domande specifiche non emotive. Invece di rispondere mi dici "come sei arrivato a questo punto della tua vita", cosa vuoi? -Convincere qualcuno che ci sono bug che hai individuato, o migliorare "programmaticamente" il tuo codice? Se vedete qualche "bug" - contattate il Service Desk con una descrizione completa della situazione. Se vuoi lavorare "programmaticamente" - vai in profondità nella creazione e nel funzionamento degli indicatori.