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

 
JRandomTrader #:

Questo è stato utilizzato nella trasmissione dei dati da tempo immemorabile.

Conveniente. Non si può non essere d'accordo con questo. Ma come ho detto prima, si dovrebbe sempre considerare quanti dati si possono rollbackare.

 
Vitaly Muzichenko #:

Facciamo un esempio, sarà in tema

C'èun codice per aggiornare

Non funzionerà in questo codice perché il buffer degli indicatori vive indipendentemente da noi e non organizziamo un ring buffer in esso - non c'è modo di spiegare questo MT.

 
Mihail Matkovskij #:

Con ArrayCopy, potete solo trasferire dati da un altro array. Ma non potete spostarli.

Chi vi ha detto queste sciocchezze?

Leggete attentamente come si fa.

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4 e MQL5, qualsiasi aiuto e discussione su algoritmi e codici

Alexey Viktorov, 2022.02.13 18:21

In questo codice, è necessario specificare un array

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );

Da quale indice scrivere e quale copiare dipende dalla direzione dell'offset dell'array. Quindi, se l'indice 0 deve sempre contenere dati nuovi e freschi, copiate da 0 e scrivete da 1. Così, i valori nell'indice 0 e 1 saranno identici, e dopo un nuovo valore sarà copiato in 0.

E dubito molto che ArrayCopy() abbia al suo interno lo stesso ciclo di quello dell'utente. Così, avendo una matrice con una certa dimensione, viene spostata di 1 ad ogni tick e poi copiata nel buffer dell'indicatore che viene visualizzato come una linea...


 
JRandomTrader #:

Non funzionerà in questo codice perché il buffer dell'indicatore vive indipendentemente da noi e non organizziamo un ring buffer in esso - non c'è modo di spiegare questo MT.

Capisco.

Beh, funziona - lasciamolo lavorare finora, nessun risultato ancora, dobbiamo aspettare i nostri "amici" del Pindo fino a quando il mercato si apre, e non è presto.

Vedrò cosa posso arbitrare.

 
JRandomTrader #:

o anche

E nessuno ha notato la canna!

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   -if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
   +if(++i>=ArraySize(A))i=0;
  }
 
JRandomTrader #:

E nessuno ha notato la canna!

Ancora non lo vedo.

 
Vitaly Muzichenko #:

Ancora non vedo.

i dovrebbe essere incrementato alla fine del ciclo, dopo l'uso.

Ma potete anche controllare gli overrun dell'array alla fine del ciclo e all'inizio di quello successivo.

 
Alexey Viktorov #:

Chi ti ha detto queste sciocchezze?

Leggete attentamente come si fa.


Non sapevo che questa funzione fosse così universale. Ma anche se lo fosse, che differenza fa? ArrayCopy sposterà i dati più velocemente di un normale ciclo?

 
Vitaly Muzichenko #:

Il codice ora funziona, ma ci sono dubbi sulla velocità a causa del ciclo.

Cosa sarà?

Voglio testare alcune cucine per la possibilità di arbitraggio, l'indicatore disegnerà la differenza di valori, lavora su un timer una volta ogni 100ms. I ritardi nell'esecuzione del codice sono critici per questa situazione.

Allora non lo so. Prova ArrayCopy. La funzione sembra essere in grado di spostare i dati. Ma difficilmente lo farà più velocemente di un ciclo normale. Beh, chi lo sa... Dovete provarlo.

 
Mihail Matkovskij #:

Allora non lo so. Prova ArrayCopy. La funzione sembra essere in grado di spostare i dati. Ma è improbabile che lo faccia più velocemente di un ciclo normale. Beh, chi lo sa... Dovete provarlo.

Non so da dove cominciare