[Logo] Spazio Aperto Sella.it
[Register] Registrati   [Login] Login    
[Search] Ricerca   [Recent Topics] Argomenti Recenti   [Hottest Topics] Argomenti vivaci  
[Banner Pubblicitario]
Inserimento Ordini e Ricezione Messaggi Ordini  XML
Indice dei Forum » Sella Trading Bridge
Autore Messaggio
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Salve,
volevo chiedere alcune delucidazioni sugli inserimenti degli ordini e i relativi messaggi che mi arrivano:

1 - Inserimento Ordini
Per inserire un ordine uso la funzionalità Session.OrderManager.ExecuteInsertOrder(order) (dopo aver fatto la PrepareInsertOrder)
A questo punto nella stessa funzione dove faccio questo mi possono ritornare vari tipi di order.ErrorLevel
ovvero potrei avere
a -ErrorLevelType.Executed
b - ErrorLevelType.Ready
c - ErrorLevelType.Error
d - ErrorLevelType.Undefined
e - ErrorLevelType.Warning

volevo chiedere la differenza tra Executed e Ready, gli altri sono errori o warning.
Executed però non significa che ho avuto l'eseguito dell'ordine immesso, giusto?
Io credo che significhi che, per esempio nel caso di un ordine di tipo limit, è stato immesso nel book.


2 - Ricezione messaggi degli ordini
A fronte di un ordine inserito nel book, dovrò ricevere un messaggio nella relativa funione (PushMessageOrder(XRemoting.Data.Message message) )
con il relativo order.statusOrder; è giusto?
in questa funzione mi arrivano anche altri eventuali stati:
order.statusOrder = W: ordine in waiting
order.statusOrder = A: ordine accettato
order.statusOrder = E: ordine eseguito
...
...

ho ricevuto anche lo stato RM (order.statusOrder = RM) , Ma non essendo documentato non so a cosa corrisponde.

3 - Sequenza di notifica
Io ho la funzione che inserisce l'ordine su un thread
e la funzione che riceve i messaggi su un altro thread

Quando faccio l'inserimento dell'ordine, dopo la Session.OrderManager.ExecuteInsertOrder(order);
vado a prendermi il relativo codice dell'ordine appena inserito e lo memorizzo in una variabile
ma nel momento in cui viene fatta la Session.OrderManager.ExecuteInsertOrder(order) mi arriva il relativo messaggio nell'altra funzione
che riceve tutti i messaggi relativi agli ordini.
Volevo chiedere qual era la sequenza delle operazioni, ovvero dopo ExecuteInsertOrder(order) che succede?
ricevo prima l'ErrorLevelType (per esempio Executed o Ready)
oppure ricevo prima l'evento nella funzione degli ordini.

Questo è molto importante perchè io dovrei prima inserire l'id dell'ordine in una variabile subito dopo aver fatto ExecuteInsertOrder(order)
e solo dopo quando mi arriva il relativo messaggio nella funzione che riceve tutti i messaggi degli ordini prendere l'id dell'ordine e andare
a capaire a cosa si riferisce, ovvero leggere la variabile che ho scritto prima.

Se invece mi dovesse arrivare prima l'evento nella funzione che riceve i messaggi degli ordini non saprei quell'id ordine a cosa è associato.
Probabilmente questo problema si risolve con la nuova versione (1.3.0) che permette di associare un id (che io posso generare in maniera univoca)
nel momento in cui genero un ordine. A questo punto è sicuro che quando ricevo il messaggio riceverò anche questo id e quindi potrò fare l'associazione.
E' giusto questo ragionamento?

Grazie.
Matteo





Davide Monte


Registrato: 18/10/2011 14:41:22
Messaggi: 248
Offline

Buongiorno tiozzo,

Per eseguire un ordine, se non viene eseguito in modalità fast, bisogna eseguire due step

· PrepareInsertORder

· ExecuteInsertOrder

Questi due step vengono coordinati dall'OrderBag che è il contenitore in cui si inseriscono i parametri dell'ordine. Questo viene completato dalla PrepareInsertOrder e poi dalla ExecuteInsertOrder

La PrepareInsertOrder completa la borsa inserendo l'OrderCode e L'errorLevel

· L'OrderCode è l'identificativo dell'ordine ed è il codice che da quel momento in poi mi identificherà l'ordine anche nei messaggi push

· L'ErrorLevel in questa fase può assumere i valori

o Ready i controlli formali sono andati bene, si può eseguire l'ExecuteInsertOrder

o Error i controlli formali sono andati male, NON si può eseguire l'ExecuteInsertOrder

o Warning i controlli formali hanno rilevato degli errori ma non bloccanti, normalmente errori Mifid, l'ExecuteInsertOrder può essere eseguita solo se eseguo il metodo AcceptWarning

La ExecuteInsertOrder completa la borsa reimpostando l'ErrorLevel

· L'ErrorLevel in questa fase può assumere i valori

o Executed l'ordine è stato inviato

o Error In fase di invio si è verificato un errore che non ha permesso l'invio dell'ordine

Lo stato RM significa "Rifiutato dal Mercato".

Buona giornata
Davide Monte
Customer Care Sella.it

This message was edited 1 time. Last update was at 30/05/2013 11:43:22

tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Grazie della risposta.
Una precisazione solamente:
la ExecuteInsertOrder serve per inviare l'ordine al Broker, in questo caso Banca Sella, giusto?
quindi se mi dà Executed significa che l'ordine è stato inviato correttamente ma verso il Broker, non è ancora stato girato all'exchange

Successivamente il broker (BS) lo invierà all'exchange e in base alla risposta dell'exchange
invierà il relativo messaggio al client (al mio sw) nella relativa funzione di notifica degli ordini.
Solo qui io potrò sapere se il mio ordine è andato a buon fine o meno, in base ai vari stati che mi verranno notificati, giusto?

Dal punto di vista della latenza (tempo che intercorre) qual è l'operazione più onerosa
la prima (invio ordine al banca sella)
la seconda (attesa ricezione messaggio a partire dall'ordine inviato)

Grazie.
Matteo
giulio.rattone


Registrato: 22/07/2009 13:07:45
Messaggi: 183
Offline

tiozzo wrote:Grazie della risposta.
Una precisazione solamente:
la ExecuteInsertOrder serve per inviare l'ordine al Broker, in questo caso Banca Sella, giusto?
quindi se mi dà Executed significa che l'ordine è stato inviato correttamente ma verso il Broker, non è ancora stato girato all'exchange

Successivamente il broker (BS) lo invierà all'exchange e in base alla risposta dell'exchange
invierà il relativo messaggio al client (al mio sw) nella relativa funzione di notifica degli ordini.
Solo qui io potrò sapere se il mio ordine è andato a buon fine o meno, in base ai vari stati che mi verranno notificati, giusto?

Dal punto di vista della latenza (tempo che intercorre) qual è l'operazione più onerosa
la prima (invio ordine al banca sella)
la seconda (attesa ricezione messaggio a partire dall'ordine inviato)

Grazie.
Matteo



Gentile Matteo,

Il metodo ExecuteInsertOrder (O InsertOrderFast nel caso in cui si volgia effettuare l'inserimento in un unico step quando possibile) le garantisce una risposta sincrona relativamente al fatto che l'ordine sia stato inserito nei nostri archivi, sia stato controllato e sia stata gestita la sua posizione contabile (margini, posizioni, vincoli ecc. ecc.).

Nella stessa transazione (ad un determinato punto prima di inviare la risposta) qualora sia necessario instradare immediatamente l'ordine sui vari mercati esso veiene immediatamente inoltrato.

La notifica sullo stato dell'ordine è come ha notato asincrona... Ma non è affatto scontato che arrivi prima o dopo l'uscita del metodo ExecuteInsertOrder. Le notifiche sono inviate in un flusso per sua natura asincrono.

Solitamente la risposta dal mercato arriva qualche istante dopo l'invocazione del metodo ma può essere anche più veloce ed arrivare in modo "contestuale" alla risposta.
La verifica dello stato dell'ordine sul flusso ORDER_STATUS risulta quindi fondamentale....

Tenga presente che l'operatività effettuata in virtual mode aggiunge dei ritardi piuttosto abbonsanti e "casuali" solo per aiutarvi nello sviluppo ma che in produzione è un'altra musica....

In merito al tempo di ritorno "totale" della notifica consideri che:

1) I messaggi di accettato, waiting sono più rapidi dei deal perchè gli eseguiti prima di essere inoltrati a lei hanno bisogno di un'uilteriore riprocessazione sui ns sitemi per modificare la sua posizione.
2) Il tempo di ritorno delle notifiche dipende anche dai mercati.... E dalla situazione di trading.....

Se vuole apporofondire con casi concreti sono a disposizone.





Giulio Rattone
Resp IT Titoli e Trading
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Grazie 1000 per la risposta.

Mi puoi indicare la differenza tra i seguenti stati:
case "W": //waiting
case "A": //accettato

e tra gli stati

case "R": //rifiutato
case "RM": //Ordine rifiutato dal mercato

Grazie.
Matteo.
giulio.rattone


Registrato: 22/07/2009 13:07:45
Messaggi: 183
Offline

Lo stato W sta per "WAITING"

Sigifica che l'ordine è stato accettato dal nostro sistema ma NON è ancora stato inoltrato al mercato. Normalmente è solo uno stato "di transito" ma gli ordini possono rimanere in waiting quando:
1) Devono essere inviati in un altra fase (ordini per lacontinua in fase d'asta, ordini per l'afterhour durante il giorno ecc. ecc.)
2) Ordini condizionati la cui condizione non è ancora attiva (stop orders, ordini a tempo ecc. ecc.)

Lo stato A sta per "ACCETTATO"
L'ordine è stato inoltrato al mercato ed è presente sul book. ATTENZIONE (!) Se l'ordine viene immediatamente eseguito sul book il messaggio di accettato potrebbe NON ESSERE GENERATO e arrivare direttamente lo stato E-Eseguito o P-Parxzialemnte eseguito

Lo stato RM
Sta per rifutato del mercato (c'è associato un messaggio di rifiuto proveniente dal mercato stesso)

Lo stato R
Sta per rifuitato. Gli ordini sono in questo stato quando li rifutiamo noi (è estremamente raro perchè quasi tutti i nostri controlli sono ex-ante e no nex-post e quindi si ha un errore solitamente PRIMA di avere un ordercode valido)

Saluti


This message was edited 1 time. Last update was at 04/06/2013 11:19:17


Giulio Rattone
Resp IT Titoli e Trading
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Grazie per la risposta.

Questo significa che in virtuale (io sto facendo dei test con la modalità virtuale) non mi arriverà mai Accettato
in quanto l'ordine non può essere girato al mercato; è giusto?
E se è così non mi arriverà mai neanche l'eseguito.

Se fosse così io potrei simulare lo stato Accettato con lo Stato Waiting,
ma come faccio a simulare lo stato Eseguito?


giulio.rattone


Registrato: 22/07/2009 13:07:45
Messaggi: 183
Offline

No. Non è così.

La modalità virtuale "simula" casi reali.

Quindi potrà ottenere sia l'accettato che l'eseguito.

Nel dettaglio il nostro sistema di simulazione genera "per convenzione" per i titoli il cui simbolo inizia per una lettera che va da A a F i messaggi di
Inserito (W)
Accettato (A)
Eseguito (E)

Per i titoli il cui simbolo inizia per una lettera che va da G a N:
Inserito (W)
Accettato (A)

Per i titoli il cui simbolo inizia per una lettera che va da O a Z:
Inserito (W)
Rifiutato (RM)

Tra i messaggi generati viene introdotto anche un ritardo "random"

Questo per consentirle di provare casi differenti

Saluti




Giulio Rattone
Resp IT Titoli e Trading
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Io ho inserito un ordine sul bond IT0004889033
e ho ricevuto solo il messaggio W (inserito)
non ricevo A (accettato) come sarebbe nel caso fossi in reale.
E' sempe così?

In virtuale qual è la differenza tra inserito e accettato?
Devo considerare sempre il caso inserito?

Per quanto riguarda l'eseguito ho visto che lo posso avere solo per alcuni titoli.
Se invio un ordine di tipo buy limit, quando ho l'eseguito? Ovvero qual è la condizione che fa scatenare l'eseguito?

Grazie 1000.
Matteo.
andrea.nicolabroglio


Registrato: 17/02/2011 16:45:37
Messaggi: 13
Offline

Buonasera,
dai ns controlli risulta che in data 04/06/2013 a fronte di un inserimento in modalità virtuale di un ordine sul titolo IT0004889033
le sono state inviate 2 notifiche:

1 notifica di Inserito (W)
1 notifica di Accettato (A)

questo perchè il simbolo del titolo da Lei selezionato inizia per la lettera I.
(Nel caso del mercato obbligazionario il simbolo corrisponde al codice ISIN)

Questo comportamento è coerente con quanto indicato dal collega Rattone.
Sempre facendo riferimento alla precedente risposta le confermo che per avere un Eseguito deve procedere con l'inserimento di un ordine virtuale selezionando un titolo il cui simbolo inizia per una lettera che va da A a F

Saluti

Andrea Nicola Broglio
IT Trading On Line
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Salve,
non ho potuto catturare il secondo evento, quello di Accettato, in quanto ho avuto un'eccezione nella funzione.
L'eccezione è stata causata dal fatto che quando arriva il secondo evento (A) il campo message.Fields["V_CLIENT_ID"]
è mancante. Anzi ho visto che sul primo evento (Waiting) i campi del message sono 32 mentre sul secondo evento
i campi sono 28.
E' normale questo comportamento?
Perchè non viene sempre inviato il campo message.Fields["V_CLIENT_ID"]?
Su quali altri eventi manca questo campo?

Grazie.
Matteo.
andrea.nicolabroglio


Registrato: 17/02/2011 16:45:37
Messaggi: 13
Offline

Buonasera,
le confermo che il campo V_CLIENT_ID è presente nel solo messaggio di Waiting.
Le consiglio di tenere sul suo client l'associazione V_ORDER_CODE (codice ordine Banca Sella) e V_CLIENT_ID in modo da poter in ogni caso riconciliare i 2 codici.
Questo perchè il campo V_ORDER_CODE è presente in tutti gli altri messaggi che riceverà.

In ogni caso terremo in considerazione per le prossime release di aggiungere il V_CLIENT_ID negli altri messaggi

Le confermo inoltre che i campi contenuti nei diversi messaggi sono differenti a seconda della tipologia di messaggio in quanto hanno finalità diverse.

Saluti

Andrea Nicola Broglio
IT Trading On Line
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Salve,
si potrebbe avere la mappatura message.field --> stato_ordine?
Ovvero per ogni tipologia di stato ordine che mi viene notificata (W, A, etc..) quali sono i campi del message che mi arrivano?
E' importante per non avere eccezioni nel codice.

Inoltre, cosa fondamentale è:
Lo stato Waiting è sempre il primo che viene notificato?
Arriva sempre lo stato Waiting?
Per esempio mi sembra che lo stato Accettato potrebbe anche non arrivare.

Grazie.
Matteo.
andrea.nicolabroglio


Registrato: 17/02/2011 16:45:37
Messaggi: 13
Offline

Buonasera
le consiglio di basare la sua logica sul campo CLASS (presente in tutti i messaggi relativi agli ordini).
Se CLASS=TRADING.ORDERS.INSERTED allora in questo messaggio troverà il campo v_client_id

Le confermo inoltre che tale messaggio viene sempre inviato e le fornisce la conferma che il suo ordine è stato inserito nei ns sistemi. Gli altri messaggi sono legati alle condizioni di mercato ed alle possibilità di invio ed esecuzione de suoi ordini

A titolo di esempio le allego il dettaglio dei campi ricevuti inserendo un ordine e ricevendo un accettato ed un eseguito, ovvero W --> A --> EXE corrispondenti a
CLASS=TRADING.ORDERS.INSERTED
CLASS=TRADING.ORDERS.ACCEPTED
CLASS=TRADING.ORDERS.EXECUTED

I campi si possono ricavare in modo semplice facendo un ToString del "message" ricevuto

Saluti


 Nome del File campi_stb.xls [Disk] Download
 Descrizione Nessuna descrizione fornita
 Dimensione del File 19 Kbytes
 Scaricato:  17 tempo(i)


Andrea Nicola Broglio
IT Trading On Line
tiozzo


Registrato: 05/10/2012 19:38:00
Messaggi: 87
Offline

Salve,
dopo aver immesso degli ordini (sono in virtuale) sto ricevendo degli Accettato senza prima aver ricevuto il relativo Waiting, è possibile?

Ci sono particolari condizioni in cui si può verificare questo evento?

Grazie.
Matteo.
 
Indice dei Forum » Sella Trading Bridge
Vai a:   
E.t.v.s.p.b WLS11G