Funzione OrderSendAsync()

 

La descrizione dice chela funzione OrderSendAsync() è progettata per eseguire operazioni asincrone senza aspettare che il server risponda alla richiesta inviata. Se l'esecuzione ha successo, il codice di risposta nella variabile di risultato contiene il valore TRADE_RETCODE_PLACED ( codice 10008) - "ordine effettuato". Il successo dell'esecuzione di . non ci dà alcuna garanzia che la richiesta abbia raggiunto il server commerciale e sia stata accettata per l'elaborazione.

Da un lato, sappiamo che il campo retcode contiene il codice di ritorno del server commerciale - cioè si presume che questo codice sia generato dal server, non dal terminale dell'utente. D'altra parte, il Manuale di Riferimento afferma che per lafunzione OrderSendAsync() può essere restituito uno dei codici che deve essere generato dal server (codice 10008), anche se la richiesta di compravendita stessa non ha raggiunto il server di compravendita.

Domanda 1: Dove esattamente (in quale fase) viene generato il codice 10008 per lafunzione OrderSendAsync? [Supponendo che questo codice possa essere restituito senza che il server commerciale sia coinvolto].

Domanda 2: Il codice 10008 è il codice del server di compravendita o questo codice è generato dal lato del terminale client prima che la richiesta di compravendita sia ricevuta dal server?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 

1. terminale, su un'operazione di spedizione riuscita (l'ordine è sceso con successo dall'aereo, ma non sappiamo cosa c'è dopo)

2. Mi scuso per la tautologia, ma risponderò allo stesso modo: Sì, il codice 10008 è il codice di risposta del server commerciale. Sì, questo codice è impostato dal terminale al momento della... prossimo punto 1.

Perché cercate di trovare tra le righe quello che è già scritto esplicitamente?

 

Il modello di ordine commerciale asincrono presuppone eventi e stati d'ordine multipli:

Diagramma degli stati degli ordini di mercato

Diagramma degli stati dell'ordine condizionale

Attualmente in MT5:

  1. CREATED - il fatto stesso che la funzione OrderSendAsync e OrderSend sia chiamata (questo stato dell'ordine in MT5 non è in alcun modo identificabile dall'esterno).
  2. Se l'ordine è ANNULLATO (il terminale stesso lo ha tagliato attraverso i suoi filtri. Per esempio, il prezzo limite è peggiore del prezzo corrente), la risposta è negativa da OrderSend e OrderSendAsync.
  3. OPENED è il risultato di TRADE_RETCODE_PLACED (l'ordine passa con successo attraverso i filtri interni del terminale e viene inviato al server) per OrderSendAsync.
  4. SUBMIT_OK - il server ha accettato il tuo ordine di compravendita. Se si tratta di un ordine in sospeso, OrderSend completerà la sua esecuzione. Se Mercato - continua ad aspettare.
  5. FILLED - il tuo ordine è in stato di esecuzione (per esempio, l'hai inviato tramite STP e stai aspettando una risposta). Continuare ad aspettare.
  6. FILL_OK - l'ordine è stato eseguito. Se mercato - OrderSend completerà la sua esecuzione.

Si prega di fare riferimento ai diagrammi di cui sopra per maggiori dettagli.

 
Rosh:

1. terminale, su un'operazione di spedizione riuscita (l'ordine è sceso con successo dall'aereo, ma non sappiamo cosa c'è dopo)

2. Mi scuso per la tautologia, ma risponderò allo stesso modo: Sì, il codice 10008 è il codice di risposta del server commerciale. Sì, questo codice è impostato dal terminale al momento della... prossimo punto 1.

Perché cercate di trovare tra le righe di ciò che è già scritto esplicitamente?

Non sto cercando "tra le righe", ma di nuovo, sto cercando di capire le fasi di due funzioni commerciali (ora).

Nel tuo commento alla funzione OrderSendAsync, dici che"la funzione è simile a OrderSend() nello scopo e nei parametri". Ma, a giudicare dalla tua risposta, la funzione OrderSendAsync non è proprio la stessa della funzione OrderSend. Quest'ultimo è destinato a controllare la richiesta di compravendita sul server, quindi i codici restituiti da OrderSend() sono i codici generati dal server stesso, non qualche altra sostanza. Nel caso di OrderSendAsync() il codice di ritorno è generato dal terminale, quindi questo codice (codice 10008) non può essere considerato come codice di ritorno del server. Questo è "codice generato dal terminale" anche se lo si include formalmente nella lista dei codici del server.

In altre parole, le due funzioni sono due approcci: "codice generato dal server" contro "codice generato dal terminale". In questo senso, le funzioni non sono uguali. Conoscere questa sottigliezza è necessario per capire correttamente se il "codice di ritorno" proviene dal server o dal terminale.

 
hrenfx:

OPENED è il risultato di TRADE_RETCODE_PLACED per OrderSendAsync.

    Possiamo concludere che TRADE_RETCODE_PLACED (10008) è del tutto inutile in termini di aspettativa quando si usa la funzione OrderSend originale?

    Gracias per il diagramma!

    Come si traduce correttamente "Order condition gets met"?

     
    Yedelkin:

    Possiamo concludere che TRADE_RETCODE_PLACED (10008) è del tutto inutile in termini di aspettativa quando si usa la funzione OrderSend originale?

    TRADE_RETCODE_PLACED non ha niente a che vedere con OrderSend sequenziale.

    Come si traduce correttamente "Order condition gets met"?

    Il prezzo corrente soddisfa la condizione dell'ordine. Invece di FILLED può essere CANCELLATO, per esempio se non c'è abbastanza margine per eseguire l'ordine.

    Di nuovo, per lavorare in modo asincrono, abbiamo bisogno di un potente sistema di eventi, dove all'arrivo c'è un'opzione per ricevere:

    • Il messaggio di testo dell'evento.
    • Il tempo della sua creazione.
    • A quale ordine si riferisce.
    • Il tipo di messaggio (notizie, ordine, stato della comunicazione, ecc.)

    L'architettura della piattaforma stessa dovrebbe essere molto ben pensata. Se ci sono lacune nella fase di progettazione dell'architettura, è estremamente difficile aggirarle per raggiungere l'universalità.

    IMessage (JForex API 2.9.6.1 API)
    • www.dukascopy.com
    FRAMES    NO FRAMES
     

    hrenfx:

    Yedelkin:

    Possiamo concludere che TRADE_RETCODE_PLACED (10008) è del tutto inutile in termini di aspettativa quando si usa la funzione OrderSend originale?

    TRADE_RETCODE_PLACED non ha niente a che vedere con OrderSend sequenziale.

    Ecco! Sono arrivato a questo intuitivamente circa mezzo anno fa, e tu in un certo senso lo confermi :) Già buono :)
     
    hrenfx:

    Di nuovo, per lavorare in modo asincrono, avete bisogno di un potente sistema di eventi dove c'è un'opzione per ricevere all'arrivo:

    • Il messaggio di testo dell'evento.
    • Il tempo della sua creazione.
    • A quale ordine si riferisce.
    • Tipo di messaggio (notizie, ordine, stato della comunicazione, ecc.)
    Si tratta, tra le altre cose, della necessità di dettagliare l'evento OnTrade?
     
    Yedelkin:
    Ecco! Sono arrivato a questo intuitivamente circa mezzo anno fa, e tu in un certo senso lo confermi :) Già buono :)
    Un uomo è sempre felice quando qualcuno conferma la correttezza del suo ragionamento. Non importa quanto corrisponda alla realtà.
     
    Rosh:
    Una persona è sempre felice quando qualcuno conferma la correttezza del suo ragionamento. Non importa quanto sia vero.
    Bene, negli ultimi otto mesi nessuno ha mai confutato la conclusione pubblica dell'uomo. Né teoricamente né in base ai risultati dei test. Ma grazie per aver seminato il dubbio :)
     

    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:

    TRADE_RETCODE_PLACED к последовательной OrderSend не имеет никакого отношения.

    deve essere compreso nel contesto appropriato.