Il mio EA fa una doppia entrata - pagina 8

 
angevoyageur:

1) Non credo che sia legato al problema di questo argomento. Il problema che otteniamo è nel caso in cui una richiesta è stata riempita con successo e viene aperta una posizione. Ma questa posizione è aperta sul server commerciale, il problema che abbiamo riscontrato è quando c'è un ritardo più importante del solito e il terminale MT5 viene notificato di questa nuova posizione DOPO che un nuovo tick è già stato elaborato.

2) ... a mio parere è un povero progettato per una piattaforma che permettono esplicitamente richieste di trading sincrone e asincrone ...

3) ... il ResultRetCode è sincrono, è l'aggiornamento del database MT5 sulla posizione (operazione e ordine) che è asincrono ...

1) Non sono d'accordo, e scusa l'ignoranza, ma come fai ad essere così sicuro che la posizione sia aperta dopo PositionOpen() nel trade server senza controllare due volte il ResultRetcode()?

2) 100% d'accordo.

3) Sicuramente ResultRetCode() è sincrono, voglio dire che per controllare il codice di risultato tu (master) devi interrogare il server (slave) con diversi messaggi "asincroni".

 
figurelli:

1) Non sono d'accordo, e scusate l'ignoranza, ma come siete così sicuri che la posizione sia aperta dopo PositionOpen() nel server di trading senza controllare due volte il ResultRetcode()?

2) 100% d'accordo.

3) Sicuramente ResultRetCode() è sincrono, voglio dire che per controllare il codice di risultato tu (master) devi interrogare il server (slave) con diversi messaggi "asincroni".

1) Questo argomento riguarda una doppia entrata, quindi stiamo parlando di una richiesta di ordine che ha avuto successo. Non ho mai scritto che non è necessario controllare due volte il ResultRetCode(), ho scritto esattamente il contrario. Ma questo NON è legato alla doppia entrata, per definizione. Non è ovvio?

3) Probabilmente è un dettaglio(incomprensione ?) ma quello che hai scritto non ha senso. Nella prima parte della tua frase hai detto che ResultRetCode() è sincrono, nella seconda hai detto che il "codice di risultato" che è lo stesso di ResultRetCode() è ottenuto in modo asincrono. Non c'è alcuna comunicazione tra il server e il terminale per ottenere questo valore (Retcode).

CTrade.PositionOpen() di default è sincrono, ciò significa che la classe sottostante usa OrderSend(). Che invia la richiesta di ordine e aspetta la risposta dal server. Il server restituisce il risultato al terminale, e il codice EA continua (con il valore restituito vero o falso). La comunicazione master/slave è finita. Dopo di che è possibile controllare il ResultRetcode, che è già disponibile localmente.

Documentation on MQL5: Trade Functions / OrderSend
Documentation on MQL5: Trade Functions / OrderSend
  • www.mql5.com
Trade Functions / OrderSend - Documentation on MQL5
 
@figurelli: Congratulazioni per essere diventato moderatore... .
 
C'è un timeout per la posizione aperta?
 
doshur:
C'è un timeout per la posizione aperta?
Ciao doshur, cosa intendi esattamente con timeout?
 
Malacarne:
Ciao doshur, cosa intendi esattamente con timeout?
Come nessuna risposta dal server
 
angevoyageur:

1) Questo argomento riguarda una doppia entrata, quindi stiamo parlando di una richiesta di ordine che ha avuto successo. Non ho mai scritto che non è necessario controllare due volte il ResultRetCode(), ho scritto esattamente il contrario. Ma questo NON è legato alla doppia entrata, per definizione. Non è ovvio?

3) Probabilmente è un dettaglio(incomprensione ?) ma quello che hai scritto non ha senso. Nella prima parte della tua frase hai detto che ResultRetCode() è sincrono, nella seconda hai detto che il "codice di risultato" che è lo stesso di ResultRetCode() è ottenuto in modo asincrono. Non c'è alcuna comunicazione tra il server e il terminale per ottenere questo valore (Retcode).

CTrade.PositionOpen() di default è sincrono, ciò significa che la classe sottostante usa OrderSend(). Che invia la richiesta di ordine e aspetta la risposta dal server. Il server restituisce il risultato al terminale, e il codice EA continua (con il valore restituito vero o falso). La comunicazione master/slave è finita. Dopo di che è possibile controllare il ResultRetcode, che è già disponibile localmente.

Alain,

Riguardo 1) non sono ancora d'accordo, poiché per me il codice originale di
doshur non controlla ResultRetCode() e lui sta cercando una soluzione alla "doppia entrata", e per me dobbiamo affrontare questo è il suo codice (come proposto da Malacarne). Quindi per me non è così ovvio.

Riguardo 3) Hai scritto "Comunque il ResultRetCode è sincrono, è l'aggiornamento del database MT5 sulla posizione (operazione e ordine) che è asincrono", quindi la mia risposta riguardava questa frase.

Comunque, ilnostro dibattito assomiglia alla storia del mezzo bicchiere d'acqua: alcuni lo vedranno mezzo pieno e altri mezzo vuoto, ma è una questione di se si considera il bicchiere mezzo pieno, o mezzo vuoto ;-)))

Quindi, ad essere onesti, non credo che questa discussione sia produttiva e/o debba continuare (almeno qui in questo topic), dato che possiamo tornare a soluzioni workaround, quindi per favore scusate per aver creato tale polemica e per favore andate avanti con la vostra linea di pensiero, che penso sarà più adatta ad aiutaredoshur e altri ragazzi con lo stesso problema.

 
Ubzen:
@figurelli: Congratulazioni per essere diventato moderatore... .
Ubzen, grazie mille, ma continuo a credere che questo sia solo un bug serio di mql5.com ;-))
 

Bene, tutti i workaround postati sono molto buoni. Lo apprezzo e imparo alcune idee lungo la strada.

Voi ragazzi siete utili.

Il mio EA sembra essere più resistente ora.

 
figurelli:
...

Quindi, ad essere onesti, non credo che questa discussione sia produttiva e/o debba continuare (almeno qui in questo topic), dato che possiamo tornare a soluzioni workaround, quindi per favore scusate per aver creato tale polemica e per favore andate avanti con la vostra linea di pensiero, che penso sarà più adatta ad aiutaredoshur e altri ragazzi con lo stesso problema.

Sono totalmente d'accordo con questo. Non preoccuparti e vai avanti.