Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 114

 
Yedelkin:
Trovo difficile rispondere. Ho riletto i vostri messaggi ma non ho capito l'idea di cambiare la dimensione dell'array. La vostra risposta al codice dipende anche dalla comprensione del concetto. Forse qualcun altro risponderà.

Non mi interessa molto cambiare la dimensione dell'array, gli darò 20, per esempio.

 double masCenPoc[20]; 

 for(int i=0; i<20; i++){
 
   if((cena_poc < high && cena_poc < low)||(cena_poc > high && cena_poc > low))

//как вот дальше обозначить чтоб он запомнил значение цены уровня Рос?
    
    masCenPoc[i] = cena_poc;

else 

//и удалил значение из массива, если нашлось пересечение с ценой этого уровня Рос?
 
Top2n: Non mi interessa molto cambiare la dimensione dell'array; la imposterò, per esempio, a 20.

Qui avete un array di 20 elementi. Supponiamo che la condizione if sia valida - assegniamo un valore di prezzo al primo elemento dell'array: masCenPoc[0] = cena_poc;

Cosa assegneremo al secondo elemento dell'array?

 
Yedelkin:

Qui avete un array di 20 elementi. Supponiamo che la condizione if sia valida - assegniamo un valore di prezzo al primo elemento dell'array: masCenPoc[0] = cena_poc;

Cosa dovremmo assegnare al secondo elemento dell'array?

Il prossimo valore di Ros, che sarà in n numero di volte. Le linee Ros appaiono all'inizio di ogni giorno, in base ai risultati del giorno precedente. Se il prezzo non tocca il livello, il valore di questo livello Ros sarà memorizzato nell'array.
 
Top2n: Il prossimo valore di Ros, che sarà tra n tempo. Le linee Ros appaiono all'inizio di ogni giorno, in base ai risultati del giorno precedente. Se il prezzo non tocca il livello, allora il valore di questo livello Ros sarà memorizzato nell'array.
Capisco. Io farei quanto segue. Creerei un array di 20 elementi e assegnerei il valore -1 a tutti loro. All'inizio di ogni giorno, eseguirei il ciclo for(int i=0; i<20; i++) e cercherei il primo elemento con valore -1 nell'array. Dopo aver trovato un tale elemento, controllerebbe le condizioni commerciali(if((cena_poc < alto && cena_poc < basso)||(cena_poc > alto && cena_poc > basso)) e, in caso di successo, assegnerebbe il valore di cena_poc all'elemento di array trovato. Questo riempirebbe gradualmente l'array con i valori richiesti.
 
Top2n: Capisco, grazie.
Sì, se usate un array non dinamico (come nel vostro ultimo esempio), non avete nemmeno bisogno di questa funzione. Se avete bisogno di un array dinamico, dichiaratelo e dimensionatelo nelle prime righe di codice, prima del ciclo.
 
Top2n:

Non mi interessa molto cambiare la dimensione dell'array, gli darò 20, per esempio.

Deve avere un senso. In questo caso, un array può non essere necessario. In un ciclo con ulteriori calcoli, forse 1 variabile è sufficiente. Penso che tu voglia ottenere dati storici, quindi sarebbe più logico fare un ciclo da qualche barra a 0. E poi i tuoi dati saranno costruiti. Se avete bisogno di un array, nel vostro caso dovrebbe accumularsi come uno stack.

Se volete costruire con le quotazioni online, sarà ancora secondo le regole dello stack.

//Удачи!
 

Salve. Quando provo a copiare i dati dell'indicatore in un array usando la funzione CopyBuffer ottengo valori come -6.99999999999999999e-005

Quale può essere la ragione?


Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
Доступ к таймсериям и индикаторам / CopyBuffer - Документация по MQL5
 
sss20192:

Salve. Quando provo a copiare i dati dell'indicatore in un array usando la funzione CopyBuffer ottengo valori come -6.99999999999999999e-005

Quale può essere la ragione?


Forse i valori sono gli stessi dell'originale. Sarebbe una buona idea postare il codice.
 

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 MacdHandleTf1 = iMACD(_Symbol, Timeframe1, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf2 = iMACD(_Symbol, Timeframe2, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

int MacdHandleTf3 = iMACD(_Symbol, Timeframe3, FastEMA, SlowEMA, SignalMA, AppliedPrice); 

CopyBuffer(MacdHandleTf1, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf2, 0, 1, 1, MacdArray);

Print(NormalizeDouble(MacdArray[0], 5)); 

CopyBuffer(MacdHandleTf3, 0, 1, 1, MacdArray); 

Print(NormalizeDouble(MacdArray[0], 5));