Discussione sull’articolo "Eventi di Trade in MetaTrader 5"

 

Il nuovo articolo Eventi di Trade in MetaTrader 5 è stato pubblicato:

Un monitoraggio dello stato corrente di un account di trading implica il controllo delle posizioni e degli ordini aperti. Prima che un segnale di trading diventi un deal, deve essere inviato dal client terminal come richiesta al server di trading, dove verrà inserito nella coda degli ordini in attesa di essere elaborato. Accettando una richiesta dal server di trading, cancellandola mentre scade o conducendo un deal sulla sua base - tutte queste azioni vengono seguite da eventi di trading, e il server di trading informa il terminale su di essi.

Un altro esempio di più eventi è l'esecuzione di più operazioni sulla base di un unico ordine, nel caso in cui il volume richiesto non possa essere ottenuto da un'unica offerta opposta. Il server di trading crea e invia i messaggi su ciascun evento al client terminal. Ecco perché la funzione OnTrade() può essere chiamata più volte per un evento apparentemente singolo. Questo è un semplice esempio della procedura di elaborazione dell'ordine nel sottosistema di trading della piattaforma MetaTrader 5.

Ecco un esempio: mentre un ordine in sospeso per l'acquisto di 10 lotti di EURUSD attende di essere eseguito, compaiono offerte opposte per la vendita di 1, 4 e 5 lotti. Queste tre richieste insieme danno il volume richiesto di 10 lotti, quindi vengono eseguite una per una, se la politica di riempimento consente di eseguire operazioni di trading in parti.

A seguito dell'esecuzione di 4 ordini, il server eseguirà 3 operazioni di 1, 4 e 5 lotti sulla base delle richieste opposte esistenti. Quanti eventi di trading verranno generati in questo caso? La prima richiesta contraria di vendita di un lotto comporterà l'esecuzione dell'operazione di 1 lotto. Questo è il primo evento di Trading (1 lotto deal). Ma cambia anche l'ordine in sospeso per l'acquisto di 10 lotti; ora, è l'ordine per l'acquisto di 9 lotti di EURUSD. La variazione di volume dell'ordine in sospeso è il secondo evento di Trading (modifica del volume di un ordine in sospeso).

Generazione di Eventi di Trading

Autore: MetaQuotes

 

Vorrei chiarire alcuni punti.

1. l'articolo implica che la funzione OrderCheck() è destinata al controllo primario di una richiesta, e il controllo primario con l'aiuto della funzione OrderCheck() viene eseguito direttamente dal server (sul lato server), non nel terminale. È corretto?

Документация по MQL5: Торговые функции / OrderCheck
Документация по MQL5: Торговые функции / OrderCheck
  • www.mql5.com
Торговые функции / OrderCheck - Документация по MQL5
 

2. Il libro di riferimento afferma che per la funzione OrderSend() "in caso di successo della verifica della struttura di base, viene restituito true". Da ciò si può concludere che true viene restituito subito dopo aver verificato la correttezza della richiesta.

Ma un po' più in basso nella nota si aggiunge che "se l'ordine viene accettato con successo dal server commerciale, la funzione OrderSend() restituisce true". Questa nota implica che true viene restituito solo dopo che il server ha accettato l'ordine.

Nel frattempo, potrebbero verificarsi situazioni in cui la richiesta è già stata controllata per la correttezza, ma non è ancora stata accettata dal broker. Pertanto, si prega di chiarire in quale momento la funzione OrderSend() restituisce true: subito dopo aver verificato la correttezza della richiesta o solo dopo che il server ha accettato l'ordine?

Документация по MQL5: Торговые функции / OrderSend
Документация по MQL5: Торговые функции / OrderSend
  • www.mql5.com
Торговые функции / OrderSend - Документация по MQL5
[Eliminato]  
Yedelkin:

Vorrei chiarire alcuni punti.

1. l'articolo implica che la funzione OrderCheck() è destinata al controllo primario di una richiesta, e il controllo primario con l'aiuto della funzione OrderCheck() viene eseguito direttamente dal server (sul lato server), non nel terminale. È corretto?

Per quanto ne so, l'elaborazione viene eseguita sul lato del terminale client.

Ciò è confermato anche dal seguente post.

 

3. L'articolo afferma che "le richieste ricevute dal server di negoziazione vengono memorizzate sotto forma di ordini, che possono essere in attesa di esecuzione o ad esecuzione immediata ai prezzi di mercato".

Come sappiamo, l'esecuzione immediata è una delle tre modalità di esecuzione degli ordini di mercato. Sorge quindi la domanda: cosa succede agli ordini di mercato nelle modalità Market Execution e Request Execution? Possiamo generalizzare che "le richieste ricevute dal server di negoziazione sono memorizzate come ordini, che possono essere in sospeso o ordini di mercato immediati a prezzi di mercato"?

 
Interesting:

Per quanto ne so, l'elaborazione viene eseguita sul lato del terminale client.

Ciò è confermato anche dal seguente post.

OK, suggerisco di attendere una risposta ufficiale. Grazie, come sempre, per le informazioni aggiuntive. È quello che pensavo anch'io prima.

Aggiunta. Ho anche capito cosa potrebbe avermi confuso in questa domanda. Nell'articolo l'espressione "elaborazione primaria" fa riferimento alla funzione OrderCheck() e io ho preso questo riferimento al valore nominale, senza il senno di poi.

 
Yedelkin:

Vorrei chiarire alcuni punti.

1. l'articolo implica che la funzione OrderCheck() è destinata al controllo primario di una richiesta, e il controllo primario con l'aiuto della funzione OrderCheck() viene eseguito direttamente dal server (sul lato server), non nel terminale. È corretto?

L'articolo dice che il controllo interno primario viene eseguito nel terminale. OrderCheck() funziona anche nel terminale, non viene inviato nulla al server.
 
Rosh:
L'articolo dice che il controllo iniziale viene eseguito nel terminale. Anche OrderCheck() funziona nel terminale, non viene inviato nulla al server.

L'articolo dice: "dopo aver inviato una richiesta, questa arriva al server e subisce un controllo iniziale".

Mi ha confuso anche il fatto che nell'articolo l'espressione "elaborazione primaria" sia riferita alla funzione OrderCheck(), quindi ho preso questo riferimento al valore nominale, senza pensarci due volte.

 
Yedelkin:

2.

Nel frattempo, possono verificarsi situazioni in cui la richiesta è già stata verificata per correttezza, ma non è ancora stata accettata dal broker. Pertanto, si prega di chiarire in quale momento esatto la funzione OrderSend() restituisce true: subito dopo aver verificato la correttezza della richiesta o solo dopo che il server ha accettato l'ordine?

La richiesta corretta viene accettata dal server e la risposta viene inviata al terminale nel campo retcode della struttura MqlTradeResult - https://www.mql5.com/it/docs/constants/errorswarnings/enum_trade_return_codes.

Codice

Identificatore

Descrizione

10008

TRADE_RETCODE_PLACED

Ordine effettuato

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

La richiesta corretta viene accettata dal server e la risposta è inviata al terminale nel campo retcode della struttura MqlTradeResult - https://www.mql5.com/it/docs/constants/errorswarnings/enum_trade_return_codes.

Codice

Identificatore

Descrizione

10008

CODICE_COMMERCIALE_POSTO

L'ordine è stato inviato

Quindi si intende dire che la funzione OrderSend() restituisce true solo dopo che il server accetta (piazza) l'ordine?
 
Yedelkin:


Inoltre, sono stato confuso dal fatto che l'articolo riporta la frase "elaborazione iniziale" come riferimento alla funzione OrderCheck(), e ho preso questo riferimento al valore nominale, senza il senno di poi.

Anche tu mi hai confuso. Ho rimosso il riferimento dalla combinazione "controllo primario".