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

 

Ciao!

Potete per favore mostrarmi come un EA basato sulla Tripla Media Esponenziale può essere proibitoper aprire una posizione se l'ultimo trade è uscito su SL?

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

MQL5
Non ho problemi in modalità normale, ma appena inizio l'ottimizzazione l'errore viene stampato ad ogni esecuzione e non c'è alcun output.

Ma il fatto è che non esegue nemmeno il codice. Ho messo Prints intorno al programma, nessun output, solo un errore ad ogni esecuzione che esce.

Perché la stampa non funziona?

 
Roman Sharanov:

MQL5
L'Expert Advisor funziona senza problemi in modalità normale, ma appena inizio l'ottimizzazione, si lamenta ad ogni passaggio di essere entrato nei limiti dell'array.

Ma il fatto è che non esegue nemmeno il codice. Ho messo Prints intorno al programma, nessun output, solo un errore ad ogni esecuzione che esce.

Perché la stampa non funziona?

Dovete controllare la dimensione dell'array. Vi viene mostrata una linea in cui c'è un'uscita fuori dall'array. Qui, dovete inserire Print prima di questa linea, in cui scrivete l'output della dimensione e dell'indice dell'array, con cui state cercando di accedere ai dati dell'array - la dimensione e l'indice dell'array saranno stampati nel log, e poi il programma uscirà con un errore.

MA! Fate tutto questo nel tester in modalità visiva, non nell'ottimizzatore - nell'ottimizzatore (e nel tester in modalità non visiva) tutte le stampanti sono disabilitate per l'accelerazione.

 
Artyom Trishkin:

Uscire fuori dall'array prima di raggiungere Print().

Controlla la dimensione dell'array. Vi viene mostrata una linea in cui l'output è fuori dall'array. Prima di questa linea, dovete inserire Print, in cui scrivete l'output della dimensione e dell'indice dell'array, con cui state cercando di accedere ai dati dell'array - la dimensione e l'indice dell'array saranno stampati nel diario, e poi il programma andrà in crash.

MA! Fate tutto nel tester in modalità visiva, non nell'ottimizzatore - nell'ottimizzatore (e nel tester in modalità non visiva) le stampanti sono tutte spente per accelerare.

Questo è il problema, tutto funziona con qualsiasi parametro nella visuale, ma con qualsiasi ottimizzazione va fuori dai limiti

 
Roman Sharanov:

Questo è il problema che con qualsiasi parametro nella visualizzazione tutto funziona, ma con qualsiasi ottimizzazione è fuori dai limiti

Cosa c'è nella matrice? Posso solo immaginare che o non ci sono ancora dati nell'array, o è più piccolo di quanto pensi. Ci sono controlli nel programma per la dimensione dell'array?

 
Artyom Trishkin:

Cosa c'è nella matrice? Posso solo immaginare che o non ci sono ancora dati nell'array, o è più piccolo di quanto pensi. Ci sono controlli nel programma per la dimensione dell'array?

Ultimo N, ho 500, valori macd, e i limiti di ciclo sono strettamente limitati e non possono mai essere inferiori a 0 e superiori a N, l'ho sia debuggato che contato sulla carta

 
Roman Sharanov:

L'ultimo N, ho 500, valori macd, e i limiti del ciclo sono strettamente limitati e non possono mai essere meno di 0 e più di N, l'ho sia debuggato che contato sulla carta

Sei sicuro che l'array sia pieno di dati quando vi accedi? C'è un controllo della disponibilità dei dati e che l'array abbia il valore giusto?

Solo perché è scritto e calcolato su un pezzo di carta non significa che corrisponde a ciò che l'EA ha ricevuto (non ha ricevuto).

 
Artyom Trishkin:

Siete sicuri che l'array sia pieno di dati quando vi accedete? C'è un controllo che i dati siano disponibili e che l'array abbia la giusta dimensione?

Solo perché è scritto e calcolato su un pezzo di carta non significa che corrisponda a ciò che l'Expert Advisor ha ricevuto (non ha ricevuto).

Sì, all'inizio, prima di tutte le operazioni, viene copiato dal buffer.

 
Qual è la formula universale per calcolare il prezzo di pareggio se ci sono commissioni e swap nella transazione?

C'è una semplice formula che funziona per quotazioni con 5 cifre e deposito in usd

Lotto x profitto in pip = profitto in $.

Se è comprare, e ci sono swap e commissioni nell'affare, allora il prezzo di pareggio sarà un po' più alto del prezzo aperto
(Se non ci sono swap e commissioni, il breakeven è il prezzo di apertura)

Ma se lo strumento è esotico o la quotazione è a 4 o 2 cifre o la valuta di deposito è la sterlina. La formula di cui sopra non è utile.
Esiste una formula universale?
 
Roman Sharanov:

Sì, all'inizio, prima di tutte le operazioni, copiate dal buffer

Copiato. E quanto viene copiato viene controllato?

Se stai usando un indicatore con smoothing, richiede qualche barra in più di quanto ti aspetti. Pertanto, solo perché avete copiato non significa che i dati siano stati copiati e siano disponibili in tutte le loro dimensioni.

È più facile per voi controllare la dimensione dell'array e, se non ha la dimensione richiesta, uscire da OnTick()

Motivazione: