Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 886

 
Sergey Voytsekhovsky:

Sì, infatti, non l'avevo notato. Ha un aspetto migliore, ci sono meno lettere.

Non c'è modo di mettere tre versioni (non so come dirlo correttamente) sotto un operatore?

Solo le parentesi graffe - limitano la condizione.

 
int a,b,c,d,e,f,g,j;
a=10;
b=5;
d=3;
f=4;
j=1;
a>b?{c=d;e=f;g=j}:{c=0;e=0;g=0};
Print("c=",c," e=",e," g=",g);

Ho provato a disegnare un disegno come questo e il compilatore mi ha schizzato addosso qualcosa di maleodorante. Dov'è l'errore?

 
Sergey Voytsekhovsky:

UURRAA, e l'anima ha cantato. Alexey, grazie mille !!!!!

Ha funzionato tutto, non capisco bene come sia possibile fare a meno dell'array

perché la sua descrizione è stata cancellata. Quindi si può fare a meno dell'array extra qui a tutti?


#property indicator_color3  clrGreen,clrRed

Questo è l'array.

 
Sergey Voytsekhovsky:

Sì, infatti, non l'avevo notato. Ha un aspetto migliore, ci sono meno lettere.

Non c'è modo di mettere tre versioni (non so come dirlo bene) sotto un operatore?

Sì, possiamo. Crea due funzioni definite dall'utente e chiamale.

int m = 5;//0;//
m = m == 0 ? f1 : f2;

int f1()
 {
  return(1);
 }
int f2()
 {
  return(2);
 }
 
Konstantin Nikitin:

Questo è quello che sto dicendo. Va bene, abbiamo finito. Finché sa cosa sta succedendo...

Ho capito, grazie.
Sono solo confuso. Tutto questo è nuovo per me.

 
Alexey Viktorov:

È possibile. Creare due funzioni personalizzate e chiamarle.

Ho capito bene?

ColorHistogram_2Colors[i]=ExtMainBuffer[i]>=50?ColorUp(i):ColorDown(i);
//+------------------------------------------------------------------+ 
int ColorUp(int i)
 {
   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
  return(0);
 }
int ColorDown(int i)
 {
   ColorHistogram_2Buffer1[i]=ExtMainBuffer[i];
   ColorHistogram_2Buffer2[i]=50;
  return(1);
 }

L'ho fatto nell'indicatore - funziona.

 
Sergey Voytsekhovsky:

Ho capito bene?

L'ho prescritto così nell'indicatore - funziona.

Se funziona, è giusto. Ma io non lo farei in questo modo.

Prima di tutto, non farei cambiamenti di buffer. È sufficiente metterne sempre 50 in uno di essi senza alcuna condizione.

E nel secondo buffer mettere il valore maggiore o minore di 50. Allora alla condizione <=> solo il colore dovrebbe essere nominato. E nessuna funzione separata.

 
Alexey Viktorov:

Se funziona, è giusto. Ma non è così che farei io.

Prima di tutto, non farei un cambio fantasioso di buffer in cui =50. È sufficiente scrivere sempre 50 in uno di essi senza alcuna condizione.

E nel secondo buffer per impostare il valore maggiore o minore di 50. Poi alla condizione <=> si dovrà solo assegnare il colore. E nessuna funzione separata.

Sarei d'accordo con te se la condizione <>50 definisse solo il colore, ma è anche l'inizio/fine della candela dell'istogramma. Perciò non discuterò, cercherò di controllare, anche se probabilmente avete ragione.

 
Alexey Viktorov:

Se funziona, è giusto. Ma non è così che farei io.

Sì, infatti, uno dei due buffer DRAW_COLOR_HISTOGRAM2 che definiscono l'inizio e la fine della candela può essere sia l'inizio che la fine. Tutto è molto più semplice ora:

   ColorHistogram_2Buffer1[i]=50;
   ColorHistogram_2Buffer2[i]=ExtMainBuffer[i];
   ColorHistogram_2Colors [i]=ExtMainBuffer[i]>=50?0:1;

Grazie per la scienza.

 

Come resettare i valori INDICATOR_MAXIMUM e INDICATOR_MINIMUM quando si cambia modalità?

Il punto è che questi valori sono usati in una modalità e non nell'altra. Quando si passa alla modalità in cui questi massimi e minimi non sono necessari, vengono salvati per qualche motivo. Questo problema esiste sia in MQL4 che in MQL5.

Per esempio, quando si esegue l'indicatore nella prima modalità i confini non sono necessari e tutto funziona correttamente

La seconda modalità imposta i limiti di massimo e minimo della finestra dell'indicatore. Tutto funziona correttamente quando si passa dalla prima alla seconda modalità


Ma quando si passa dal secondo al primo modo (i confini non sono usati nel primo modo) questi massimi e minimi sono salvati e l'utente non può vedere i valori reali dell'indicatore


Il codice in MQL4 è nei file allegati

Qualcuno ha avuto questo problema? Qualcuno ha qualche idea su come risolvere il problema?

File:
test.mq4  4 kb