Funzione OrderSendAsync() - pagina 2

 
hrenfx:

Dovrebbe essere chiarito:

TRADE_RETCODE_PLACED per OrderSend è la risposta del server.

TRADE_RETCODE_PLACED per OrderSendAsync è una risposta terminale.

Anche se i codici sono identici, hanno un significato molto diverso. Gli sviluppatori correggeranno molto probabilmente questa ambiguità.

Ecco perché dovreste capirlo:

deve essere compreso nel contesto appropriato.

Allora spiegatemi in quali condizioni il server deve restituire il codice TRADE_RETCODE_PLACED quando invia una richiesta di compravendita utilizzando la funzione OrderSend? Perché secondo il commento della funzione OrderSendAsync e la risposta di Roche, proprio questo codice TRADE_RETCODE_PLACED indica solo l'invio riuscito di una richiesta dal terminale al server. Quindi, risulta che non appena la richiesta raggiunge il server e inizia la sua elaborazione/verifica, il server sarà costretto a generare altri codici "reali" del server "in base ai risultati dell'elaborazione". Quindi non capisco davvero perché il server (cioè il server) deve restituire il codice TRADE_RETCODE_PLACED se questo codice si riferisce alla fase di vita della richiesta, prima che la richiesta sia apparsa sul server? O il codice TRADE_RETCODE_PLACED ha qualche altro significato in relazione alla funzionalità OrderSend?
 

OrderSend può ricevere una risposta sia dal server che dal terminale (nel caso in cui i filtri del terminale falliscano).

OrderSendAsync riceve sempre la risposta solo dal terminale. Per ricevere la risposta dal server è necessario catturare gli eventi appropriati in onTrade.

 
hrenfx:

OrderSend può ricevere una risposta sia dal server che dal terminale (nel caso in cui i filtri del terminale falliscano).

Ho capito bene la seguente idea:

Il terminale ha controllato la richiesta di OrderSend e l'ha inviata con successo al server, con il retcode che riceve un valore intermedio di TRADE_RETCODE_PLACED. A questo punto la connessione si interrompe e tutto ciò che OrderSend può restituire è il codice TRADE_RETCODE_PLACED bloccato nel campo retcode? Sarebbe questo l'esempio in cui OrderSend restituisce TRADE_RETCODE_PLACED?

 
Yedelkin:

Ho capito bene l'idea seguente:

Il terminale ha controllato la richiesta di OrderSend e l'ha inviata con successo al server, con il retcode che riceve il valore intermedio TRADE_RETCODE_PLACED. A questo punto la connessione si interrompe e tutto ciò che OrderSend può restituire è il codice TRADE_RETCODE_PLACED bloccato nel campo retcode? Sarà questo l'esempio in cui OrderSend restituisce TRADE_RETCODE_PLACED?

Forse sì, ma ne dubito. Molto probabilmente sarebbe TRADE_RETCODE_TIMEOUT tramite TimeOut-time per una tale interruzione della comunicazione.

Onestamente, non capisco a cosa serva questo nerfing nel caso di OrderSend. Forse gli sviluppatori spiegheranno di più nell'aiuto.

P.S. Non ho scritto una sola riga in MQL5. Pertanto, tutti i miei pensieri sull'argomento possono essere ignorati.

 

...Tuttavia, è una sciocchezza. La guida per l'utente di Client Terminal (gennaio 2012) dice che una delle fasi dell'ordine è la fase "set(placed) - dealer accepted order".

Cioè, secondo il manuale, l'ordine sta segnalando la fase di vita di una richiesta di scambio, quando ha già raggiunto con successo il server. E la descrizione della funzione OrderSendAsync() dice esattamente il contrario: il codice TRADE_RETCODE_PLACED non dipende dall'arrivo al server.

 
hrenfx:

Onestamente, non vedo perché questa nerdaggine sia necessaria nel caso di OrderSend.

Personalmente, mi piaceva l'idea di aver bisogno di "elaborare il codice di ritorno" ai miei tempi. Ma per scrivere correttamente tale elaborazione, bisogna sapere di cosa si tratta. Ho cercato a lungo di capire a cosa si riferisce esattamente il codice TRADE_RETCODE_PLACED.
 

In generale, chiunque può scrivere un MyOrderSend seriale tramite OrderSendAsync:

  1. Chiamato OrderSendAsync.
  2. Attendere la risposta appropriata dal server in onTrade.
  3. Uscito da MyOrderSend con questa risposta.

Con questa implementazione MyOrderSend sarà completamente identico al normale OrderSend (che può essere semplicemente eliminato dall'API implementando via OrderSendAsync nella libreria regolare).

 
hrenfx:

Con questa implementazione MyOrderSend sarà completamente identico al normale OrderSend (che può essere semplicemente eliminato dall'API implementando OrderSendAsync nella libreria normale).

Un'idea interessante per l'autosviluppo. Ma finché onTrade non è parametrizzato, qualsiasi controllo che utilizza onTrade nella libreria del personale sarà probabilmente molto più lento della funzione OrderSend stessa. Potrei sbagliarmi.
Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
 

Generalmente, l'input OrderSendAsync è un evento storico per Metatrader. In tutto il tempo in cui è esistita l'API di trading (a partire da Metatrader3 (non ho visto quelle precedenti) Metatrader, anche se implementato attraverso un proprio linguaggio, è rimasto praticamente invariato nella sua essenza. OrderSendAsync è il primo cambiamento sostanziale all'API di trading di Metaquotes.

Mi congratulo sinceramente con gli sviluppatori per questo evento e auguro di portare il modello asincrono a funzionalità adeguate!

 

Messaggio tecnico. Raccogliendo dichiarazioni interessanti in un unico thread.

Renat:

Si noti che ci sono e ci saranno limiti al numero di ordini simultanei nella coda di esecuzione da un conto. In questo momento sono 16 domande, se non mi sbaglio.

Le operazioni asincrone lavoreranno attentamente con la "finestra del numero di ordini ammissibili", aspettando che una parte del lotto precedente venga eseguita prima di inviare il lotto successivo. Inoltre, ci saranno protezioni contro gli allagamenti stupidi/test. Finora si riceve un errore quando il numero di applicazioni permesse è in eccesso.

Il nuovo metodo di operazioni asincrone attraverso OrderSendAsync risolve il problema principale - permette di fare una dozzina di operazioni istantaneamente. Questo è uno strumento molto potente e dovrebbe essere usato con attenzione e sempre con un occhio alla possibilità di un ban dal server e dal broker.