Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 115

 
sss20192:

L'indicatore ha diversi dati nella finestra dei dati. Attacco l'EA al grafico H1 e copia i dati dai timeframe M5 M15 e H1.


int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );
I buffer (hai degli zeri) e gli array dove copiamo sono tutti uguali, si inizia con 1 elemento, si copia 1 elemento, forse anche la direzione dell'array ha importanza.

 
zfs:
I buffer (hai degli zeri) e gli array dove copi sono tutti uguali, inizi con 1 elemento, copi 1 elemento, forse conta anche la direzione dell'array.

Beh, sì, il primo indicatore buffer, su tre diversi tamframe. E finora sto usando lo stesso array per la registrazione dei dati.

Ho provato a impostare ArraySetAsSeries true e false. Tuttavia, a volte appaiono nel log dati strani come -4.53e-32.

 

Signori, potete dirmi come implementare questo?

C'è una matrice, vi si scrive un valore, e se contiene un valore simile, c'è un botto.

 
sss20192 A volte strani dati come -4.53e-32 appaiono comunque nel log
Dal lato positivo, dovremmo inserire dei controlli sia per il successo della creazione degli handle che per il successo della funzione CopyBuffer(). Altrimenti non sappiamo ancora se questo valore spazzatura è il risultato dell'esecuzione corretta della funzione CopyBuffer() o se la funzione non ha funzionato correttamente.
 
Top2n: C'è un array, vi si scrive un valore, e se contiene un valore simile, c'è un crash.
Gli elementi dell'array devono essere cercati per trovare le corrispondenze con il valore richiesto. Se non vengono trovate corrispondenze, il valore viene scritto nell'array.
 
Yedelkin:
Dovresti provare a cercare gli elementi dell'array per vedere se corrispondono al valore richiesto. Se non viene trovata nessuna corrispondenza, scrive il valore nell'array.
E come confrontare due indici in un array?
 
Top2n:
E come confrontare due indici in un array?

Vuoi leggere attentamente l'articolo? >> Basi di programmazione MQL5 - Array

Ha tutti i dettagli per tutti i casi che hanno a che fare con gli array. Dovrebbe essere sufficiente per voi. ))

 
tol64:

Vuoi leggere attentamente l'articolo? >> Basi di programmazione MQL5 - Array

Ha tutti i dettagli per tutti i casi che hanno a che fare con gli array. Dovrebbe essere sufficiente per voi. ))

Grazie a tutti per il vostro aiuto)! Non ti dirò addio)))
 
Yedelkin:
Friendly, dovremmo inserire nel codice i controlli per il successo della creazione degli handle e per il successo della funzione CopyBuffer(). Altrimenti non sappiamo nemmeno se questo valore trash è il risultato di un'esecuzione riuscita della funzione CopyBuffer() o se la funzione non ha funzionato correttamente.

Controllato. I manici sono creati normalmente, gli indici sono 10, 11, 12. Ma la funzione CopyBuffer genera l'errore ERR_INDICATOR_DATA_NOT_FOUND. Perché può verificarsi questo errore, le coppie selezionate sono nella finestra Market Watch, i grafici di queste coppie di valute sono aperti.

Inoltre, creo una variabile che mostra il risultato dell'esecuzione di CopyBuffer,

int aaa = CopyBuffer..., mostra il valore 1, come se un valore fosse stato copiato, come definito nella funzione.


Quando si copia il buffer MA viene mostrato lo stesso errore, ma il valore viene scritto correttamente nell'array.

Per favore, mostrateci un esempio di copia corretta del buffer

 
sss20192: Controllato. Le maniglie sono create normalmente e hanno gli indici 10, 11 e 12. Ma la funzione CopyBuffer genera l'errore ERR_INDICATOR_DATA_NOT_FOUND. Perché può verificarsi un tale errore, le coppie selezionate sono nella finestra Market Watch, i grafici di queste coppie di valute sono aperti.

Inoltre, creo una variabile che mostra il risultato dell'esecuzione di CopyBuffer,

int aaa = CopyBuffer..., mostra il valore 1, come se un valore fosse stato copiato, come definito nella funzione.

Quando si copia il buffer MA, viene mostrato lo stesso errore, ma il valore viene scritto correttamente nell'array.

Per favore, mostratemi un esempio di come copiare correttamente il buffer

Sì, l'esempio di copia del buffer è giusto nella descrizione della funzione CopyBuffer(). Si prega di prestare attenzione alle linee

//--- check if all data calculated
    if(BarsCalculated(ma_handle)<rates_total) 

//--- try to copy
    if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);