Aiuto: Perché l'EA non chiude un trade - pagina 2

 
crossy:


Grazie onewithzachy,

Per prima cosa penso che tu abbia un piccolo errore con:

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

Devi aggiungere la correzione in verde e in grassetto.

Ma non capisco come la seguente linea possa aiutarci?

#include "..\libraries\stdlib.mq4"

Grazie, Y.

Hai ragione con il conteggio, tuttavia, se lo scriviamo come ho scritto, OrderSelect() restituirà false, e il ciclo for continuerà al prossimo conteggio.

Che includerà la stampa dell'errore in questo codice ...

Print("failed to close buy position ", ErrorDescription(GetLastError())  ); 

... così sapremo perché il tuo EA non chiude nessun ordine :(.

Puoi anche scrivere quell'include in questo modo ...

#include <stdlib.mqh>

C'è un esempio nella cartella degli script di MetaEditor intitolato trade.mq4.


Suppongo che tu sappia dove mettere l'include, giusto? Mettetelo in cima al vostro EA (proprio come una variabile globale o proprio come quel trade.mq4).

Lo stdlib.mq4 si trova in MetaEditor > Finestra di navigazione (Ctrl + D) > scheda file > cartella librerie > stdlib.mq4.

Wow, spero che non ti dispiaccia se sono andato nel dettaglio, perché non so se lo sai già o non lo sai :)

 
onewithzachy:

Hai ragione con il conteggio, tuttavia, se lo scriviamo come ho scritto, OrderSelect() restituirà false, e il ciclo for continua al prossimo conteggio.

Questo includerà la stampa dell'errore in questo codice ...

... così sapremo perché il tuo EA non chiude nessun ordine :(.

Puoi anche scrivere quell'include in questo modo ...

C'è un esempio nella cartella degli script di MetaEditor intitolato trade.mq4.


Suppongo che tu sappia dove mettere l'include, giusto? Mettetelo in cima al vostro EA (proprio come una variabile globale o proprio come quel trade.mq4).

Lo stdlib.mq4 si trova in MetaEditor > Finestra di navigazione (Ctrl + D) > scheda file > cartella librerie > stdlib.mq4.

Wow, spero che non ti dispiaccia se sono andato nel dettaglio, perché non so se lo sai già o non lo sai :)


Grazie onewithzachy,

Ho fatto come hai suggerito, e aspetto la stuazione corretta. Aggiornerò.

 
crossy:


Grazie onewithzachy,

Ho fatto come hai suggerito e aspetto la stuazione corretta. Aggiornerò.

Mmm...., non sono un grande fan del backtesting, tuttavia, RaptorUK suggerisce in un altro thread(clicca qui), che possiamo eseguire il debug del nostro codice utilizzando il backtesting.
 
onewithzachy:
Mmm...., non sono un grande fan del backtesting, tuttavia, RaptorUK suggerisce in un altro thread(clicca qui), che possiamo eseguire il debug del nostro codice utilizzando il backtesting.


L'EA è multipair, quindi il backtesting è impossibile.

Comunque, posso ottenere la situazione rilevante molto velocemente. E ho già dei risultati. Aggiornerò...

Grazie

 
crossy:


L'EA è multipair, quindi il backtesting è impossibile.

Non il backtesting... il debugging... anche con un EA basato sul portafoglio il debugging potrebbe essere ancora possibile.
 

Grazie Raptor,

Ho notato che l'ORDERSELECT è una variabile bool, e a volte l'MT4 non riesce

a farlo. A causa di questo onewithzachy ha raccomandato di fare:

for(int cnt=0; cnt<OrdersTotal(); cnt++)
{
if(OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
OrderSymbol()==Pair &&
OrderType()==OP_BUY)
{
// codice per chiudere
}
}

La mia domanda è: se l'ORDERSELECT è falso come posso fare il LOOP "cnt" di nuovo, senza perdere...?

Spero che tu mi capisca.

Y.

 
crossy:

Grazie Raptor,

Ho notato che l'ORDERSELECT è una variabile bool, e a volte l'MT4 non riesce

a farlo. A causa di questo onewithzachy ha raccomandato di fare:

for(int cnt=0; cnt<OrdersTotal(); cnt++ )

La mia domanda è: se l'ORDERSELECT è falso come posso fare il LOOP "cnt" di nuovo, senza perdere...?

Spero che tu mi capisca.

Y.

Se state chiudendo gli ordini dovete contare alla rovescia... NON verso l'alto.
 
RaptorUK:
Se stai chiudendo gli ordini devi contare alla rovescia... NON verso l'alto.


Scusa Raptor, ho solo fatto un Copy_paste da un post precedente, ma l'ho cambiato nel mio codice.

Comunque, hai qualche idea sulla mia domanda preliminare?

 
crossy:


Scusa Raptor, ho solo fatto un Copy_paste da un post precedente, ma l'ho cambiato nel mio codice.

Comunque, hai qualche idea sulla mia domanda precedente?

Mostra il tuo codice e posso dare un parere.
 
RaptorUK:
Mostra il tuo codice e posso dare un parere.


Rap, sono 4016 linee di codice....

Comunque, la mia domanda è una domanda tecnica. Una volta ho imparato il FORTRAN, e lì c'erano dei numeri per le linee di codice desiderate, quindi si poteva fare

"GO to 120", e il codice andava di nuovo a quella linea.

Qui se Orderselect è FALSO come l'EA può tornare alla linea di codice: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???