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

 
Vitaly Muzichenko #:

Perché prima registra i dati e poi li sposta?

  Buffer1[0]=b;
  Buffer2[0]=a;
  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }

Questo non corrisponde al grafico a tick reale!

Questo è il modo giusto per farlo.

  for(int j=H; j>0; j--) {
    Buffer1[j]=Buffer1[j-1];
    Buffer2[j]=Buffer2[j-1];
  }
  Buffer1[0]=b;
  Buffer2[0]=a;
 
Vitaly Muzichenko #:

Di nuovo, c'è un ciclo dentro ArrayCopy() e probabilmente più di uno. Quindi il codice difficilmente diventerà più semplice e veloce grazie a questa sostituzione.

L'ho già detto molte volte sopra: non si può fare a meno di un loop!

 
Mihail Matkovskij #:

Perché prima registra i dati e poi li sposta?

Questo non corrisponde al grafico a tick reale!

Questo è il modo giusto per farlo.

kasher naturalmente, ma lo stesso).

Sì, e un breve ciclo di fino a 1000 iterazioni con un paio di confronti di assegnazioni è facile. quindi non dovrebbe essere scoraggiante.

 
EVGENII SHELIPOV #:

Un frattale è formato se non c'è un nuovo estremo e dopo tre barre quelle 0, 1, 2.

Non è cambiato nulla.

O qualcosa è di nuovo sbagliato

Esegui l'indicatore frattale su D1 e vedi se il frattale c'è o no.
 
Valeriy Yastremskiy #:

kasher naturalmente, ma lo stesso).

Non è lo stesso. Se prima scriviamo un tick e poi spostiamo l'array, questo viene spostato di 1 barra a sinistra, insieme al resto dei tick che abbiamo spostato. Ma se spostiamo prima l'array e poi scriviamo il valore del tick all'indice zero, prima facciamo spazio per il tick e poi lo scriviamo lì. E, di conseguenza, non viene spostata da nessuna parte.

 
Mihail Matkovskij #:

L'ho già detto molte volte: non si può fare a meno di un ciclo!

Credo di aver capito bene.


Cercando di scambiare le otturazioni, ottengo un errore


 
Vitaly Muzichenko #:

Ho provato a scambiare il riempimento, ottengo un errore


Strano, perché è così...? Sembra che tutto dovrebbe funzionare, solo che le zecche saranno al loro posto, non spostate a sinistra.

P.S. L'array extra avrebbe dovuto comunque essere aggiunto (come ho detto all'inizio). Altrimenti, quando appare una nuova barra, tutti i tick si spostano automaticamente a sinistra, perché sono buffer di indicatori! Oppure possiamo tracciare il momento in cui appare una nuova barra e spostare i buffer, ma già a destra.
 
E se non spostate l'array, ma lo usate come un buffer circolare, ricordando la posizione attuale del primo elemento?
 
Mihail Matkovskij #:

Non è lo stesso. Se prima scriviamo un tick e poi spostiamo l'array, questo viene spostato di 1 barra a sinistra, insieme al resto dei tick che abbiamo spostato. Ma se spostiamo prima l'array e poi scriviamo il valore del tick all'indice zero, prima facciamo spazio per il tick e poi lo scriviamo lì. E, di conseguenza, non è stato spostato da nessuna parte.

Sì, nel mio caso dovremmo iniziare con il primo, non con lo zero). buon punto.

SZY, anche se sì. prima devi spostare e poi assegnare null. non importa in che modo.

SZZY Sovrascrivendo il valore di zero prima dello spostamento, si perde il valore dell'indice zero.

 
JRandomTrader buffer circolare, ricordando la posizione attuale del primo elemento?

Cos'è il ring buffer in µl