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

 
Vitaly Muzichenko #:

Copiare in un array

Come ottenere il massimo alto in un array?

Inoltre copiare CopyHigh e ottenere il massimo da questo array. Capisco che attraverso ...esso... ma l'unico altro modo è quello di riprovare nel loop.

 
Alexey Viktorov #:

Inoltre, copiare CopyHigh e ottenere il massimo da questo array. Capisco che attraverso ...it... ma l'altra opzione è solo il looping.

L'ho fatto, ma è una copia aggiuntiva. Anche l'uso di un loop non è un'opzione.

Lo lascio aCopyHigh.

 
Vitaly Muzichenko #:

L'ho fatto, ma è una copia extra. Neanche attraverso il loop è un'opzione.

Lo lascerò attraversoCopyHigh allora.

Ci ho pensato a lungo. E sono giunto alla conclusione che se abbiamo bisogno di cercare il minimo/massimo dall'array MqlRates, è meglio copiare i dati richiesti in diversi array doppi.

 
Vitaly Muzichenko #:

Copiare in un array

Come si ottiene il massimo in un array?

CopySymb[i].high
 
Vitaly Muzichenko #:

Copiare in un array

Come faccio a ottenere il massimo alto nell'array?

Potete scriverlo direttamente nel codice:

MqlRates CopySymb[];
double maxHigh;
int iMaxHi, len;  

if((len = CopyRates(mSymbol,PERIOD_CURRENT,0,6,CopySymb))<0) return;

iMaxHi = 0;
maxHigh = CopySymb[0].high;

for (int i = 1; i < len; i++)
  if(CopySymb[i].high > maxHigh) {
    maxHigh = CopySymb[i].high;
    iMaxHi = i;
  }

Print(iMaxHi, ": ", maxHigh);

E va bene che ArrayMaximum non funziona con gli array MqlRates.

 
Mihail Matkovskij #:

Potreste scriverlo direttamente nel codice:

ma se ci pensate?

anche in questo breve codice ci sono errori brutali

 
Maxim Kuznetsov #:

cosa succede se ci pensi?

anche in questo breve codice ci sono errori brutali

Ha scritto il codice online. L'ha esaminato e ha risolto tutti i bug, credo. Incolla il codice nello script e il compilatore mostrerà gli errori se ce ne sono.

 
Mihail Matkovskij #:

Ha scritto il codice online. L'ho rivisto e ho corretto tutti gli errori, credo. Inserisci il codice nello script e il compilatore mostrerà gli errori se ce ne sono.

Non c'è rimedio con il compilatore, dovete solo sapere: ci possono essere 0 e EMPTY_VALUE nel risultato di CopyXXX. Molto raramente ma bene. EMPTY_VALUE è DBL_MAX, cioè il valore massimo. Ecco cosa troverete.

non c'è alcun controllo della correttezza dei valori ricevuti dall'esterno.

 
Maxim Kuznetsov #:

Questo non può essere risolto con il compilatore, basta sapere: i risultati di CopyXXX possono contenere 0 e EMPTY_VALUE. Raramente ma spesso. EMPTY_VALUE è DBL_MAX, cioè il valore massimo. Ecco cosa troverete.

Non c'è un controllo della correttezza dei valori ricevuti dall'esterno.

Vi aspettate che CopyRates restituisca 0,EMPTY_VALUE oDBL_MAX in un array alto? Dici sul serio? :)

Forse puoi mostrarmi un esempio in cui ciò accade?

 
Mihail Matkovskij #:

Pensate che CopyRates restituisca 0,EMPTY_VALUE oDBL_MAX in un array alto? Dici sul serio? :)

Forse puoi mostrarmi un esempio in cui ciò accade?

E cosa farà ArrayMaximum quando colpisce0,EMPTY_VALUE oDBL_MAX in array doppio riempito con CopyHigh?

Dov'è la logica nella sua affermazione?