Un ordine di compravendita per aprire una posizione nella modalità di esecuzione del mercato (Market Execution mode). Richiede la specificazione di 5 campi:
azione
simbolo
volume
tipo
tipo_riempimento
Puoi anche specificare campi magici e di commento.
Ho letto la documentazione, ho cercato nel forum... Completamente confuso. Per favore, se non ti dispiace, spiegami in N+1 volte.
1. Sto inviando una richiesta di trading usandoOrderSend. Questa funzione restituisce true.
Analizziamo ilretcode (MqlTradeResult). La variabile ha il valoreTRADE_RETCODE_DONE.
Questa situazione garantisce l'effettiva esecuzione dell'ordine sul server? O c'è ancora bisogno di eseguire alcuni controlli in OnTrade, OnTradeTransaction? Allora che senso ha analizzareil retcode se non serve a niente?
Cioè la necessità di OnTrade e OnTradeTransaction quando si usaOrderSendAsync() mi è chiara.
Sono necessari quando si usa la funzioneOrderSend()? Aspetta incondizionatamente l'esecuzione/rifiuto dell'ordine sul server prima di inviare il codice successivo all'Expert Advisor?
Sono necessari quando si usaOrderSend()? Aspetta incondizionatamente l'esecuzione/rifiuto dell'ordine sul server prima di inviare l'esecuzione del successivo codice EA?
Se non mi sbaglio, OrderSend non aspetta l'esecuzione dell'ordine, segnala solo che l'ordine era corretto ed è stato inviato al server.
Il valore restituito è
Se il controllo di base delle strutture (controllo del puntatore) ha successo, restituisce true - non indica la riuscita dell'esecuzione dell'operazione commerciale. Per ottenere una descrizione più dettagliata del risultato dell'esecuzione della funzione, analizzate i campi della struttura del risultato.
voix_kas: Mando una richiesta di compravendita usandoOrderSend. Questa funzione restituisce true.
2. analizzare ilretcode(MqlTradeResult). La variabile ha il valoreTRADE_RETCODE_DONE.
Questa situazione garantisce l'esecuzione effettiva di un ordine sul server?
retcode può restituire qualcosa di diverso da RETCODE_DONE :). Ma se un server di trade restituisce esattamenteTRADE_RETCODE_DONE (ordine eseguito), allora perché dovremmo controllare qualcos'altro? A mio modesto parere, in questa situazione le funzioni OnTrade, OnTradeTransaction duplicherebbero semplicemente il retcode.
Se non mi sbaglio, OrderSend non aspetta che l'ordine venga eseguito, ma segnala solo che l'ordine è stato vero e inviato al server delle code.
In questo caso, il solo "vero" sarebbe stato sufficiente. Ma gli sviluppatori hanno fornito un retcode che dovrebbe memorizzareil "Trade serverreturn code".
Cioè, dopo che la funzione OrderSend() funziona , vedoTRADE_RETCODE_DONEnella seconda linea dicodice e provo a cambiare, per esempio, una posizione appena aperta (che logicamente dovrebbe esistere) nella terza linea di codice. Tuttavia, PositionSelect restituisce false. L'iterazione viene ripetuta. Di conseguenza, una posizione doppia viene aperta per errore.
Come possiamo proteggerci da questa situazione?
1. Essere guidati solo dal retcode e "dimenticare"OnTrade?
2. Guidato solo daOnTrade e dimenticare il retcode?
Yedelkin: retcode può restituire non solo RETCODE_DONE :) Ma se un server di trade restituisce esattamenteTRADE_RETCODE_DONE (ordine eseguito), allora perché dovrei controllare qualcos'altro? A mio modesto parere, in questa situazione le funzioni OnTrade, OnTradeTransaction duplicherebbero semplicemente il retcode.
A giudicare dalla lista di"Trading server return codes", c'è solo un'incertezza possibile nel modo di esecuzione della richiesta di mercato:TRADE_RETCODE_LOCKED. E qui, forse, non possiamo fare a meno di OnTrade.
Mi permetta di chiederle quale connessione usa personalmente?
voix_kas: A giudicare dalla lista dei"Trade server return codes", c'è solo un'incertezza possibile nel modo di esecuzione della richiesta di mercato:TRADE_RETCODE_LOCKED. E qui, forse, non possiamo fare a meno di OnTrade.
Posso chiederti quali attacchi usi personalmente?
C'è anche "Posto". Sono loro (Placed/Done) che controllo dal punto di vista dell'invio riuscito della richiesta.
No, non posso darvi un codice specifico. In primo luogo, è stato sigillato nelle classi da un anno, e in secondo luogo, devi cercarlo... Hai chiesto - Che tipo di raccoglitore sto usando? - Ho risposto sinceramente.
I campi da riempire sono diversi da
SCAMBIO DI SIMBOLI
Esecuzione dello scambio
differiscono dai campi a
SIMBOLO_COMMERCIO_MERCATO_DI_ESECUZIONE
Esecuzione di ordini sul mercato
???
l'aiuto ha un esempio solo per il mercato
Esecuzione del mercato
Un ordine di compravendita per aprire una posizione nella modalità di esecuzione del mercato (Market Execution mode). Richiede la specificazione di 5 campi:
Puoi anche specificare campi magici e di commento.
Ho letto la documentazione, ho cercato nel forum... Completamente confuso. Per favore, se non ti dispiace, spiegami in N+1 volte.
1. Sto inviando una richiesta di trading usandoOrderSend. Questa funzione restituisce true.
Analizziamo ilretcode (MqlTradeResult). La variabile ha il valoreTRADE_RETCODE_DONE.
Questa situazione garantisce l'effettiva esecuzione dell'ordine sul server? O c'è ancora bisogno di eseguire alcuni controlli in OnTrade, OnTradeTransaction? Allora che senso ha analizzareil retcode se non serve a niente?
Cioè la necessità di OnTrade e OnTradeTransaction quando si usaOrderSendAsync() mi è chiara.
Sono necessari quando si usa la funzioneOrderSend()? Aspetta incondizionatamente l'esecuzione/rifiuto dell'ordine sul server prima di inviare il codice successivo all'Expert Advisor?
...
Sono necessari quando si usaOrderSend()? Aspetta incondizionatamente l'esecuzione/rifiuto dell'ordine sul server prima di inviare l'esecuzione del successivo codice EA?
Se non mi sbaglio, OrderSend non aspetta l'esecuzione dell'ordine, segnala solo che l'ordine era corretto ed è stato inviato al server.
Se il controllo di base delle strutture (controllo del puntatore) ha successo, restituisce true - non indica la riuscita dell'esecuzione dell'operazione commerciale. Per ottenere una descrizione più dettagliata del risultato dell'esecuzione della funzione, analizzate i campi della struttura del risultato.
2. analizzare ilretcode (MqlTradeResult). La variabile ha il valoreTRADE_RETCODE_DONE.
Questa situazione garantisce l'esecuzione effettiva di un ordine sul server?
Se non mi sbaglio, OrderSend non aspetta che l'ordine venga eseguito, ma segnala solo che l'ordine è stato vero e inviato al server delle code.
In questo caso, il solo "vero" sarebbe stato sufficiente. Ma gli sviluppatori hanno fornito un retcode che dovrebbe memorizzareil "Trade serverreturn code".
Cioè, dopo che la funzione OrderSend() funziona , vedoTRADE_RETCODE_DONE nella seconda linea dicodice e provo a cambiare, per esempio, una posizione appena aperta (che logicamente dovrebbe esistere) nella terza linea di codice. Tuttavia, PositionSelect restituisce false. L'iterazione viene ripetuta. Di conseguenza, una posizione doppia viene aperta per errore.
Come possiamo proteggerci da questa situazione?
1. Essere guidati solo dal retcode e "dimenticare"OnTrade?
2. Guidato solo daOnTrade e dimenticare il retcode?
retcode può restituire non solo RETCODE_DONE :) Ma se un server di trade restituisce esattamenteTRADE_RETCODE_DONE (ordine eseguito), allora perché dovrei controllare qualcos'altro? A mio modesto parere, in questa situazione le funzioni OnTrade, OnTradeTransaction duplicherebbero semplicemente il retcode.
A giudicare dalla lista di"Trading server return codes", c'è solo un'incertezza possibile nel modo di esecuzione della richiesta di mercato:TRADE_RETCODE_LOCKED. E qui, forse, non possiamo fare a meno di OnTrade.
Mi permetta di chiederle quale connessione usa personalmente?
Posso chiederti quali attacchi usi personalmente?
Come ci si può assicurare contro una tale situazione?
1. Usare solo il retcode e "dimenticare"OnTrade?
2. Devo usare soloOnTrade e non usare il retcode?
È più affidabile seguire OnTrade, ma si può anche farne a meno - analizzare la transazione completata (ResultDeal()).
Ci sarà presto un articolo su questo argomento.