Abbina compratori e venditori in base a intervalli di date e quantità di azioni

2

NOTA: Questo è in riferimento alla domanda I chiesto su Stack Overflow , ma è stato detto di postare questo qui

Sto costruendo un'applicazione di trading che corrisponde a compratori / venditori che possiedono un abbonamento. Gli abbonamenti hanno una certa quantità di quantità per un certo periodo di tempo. Ci sono 8 tipi di ordine che sono:

  • Acquista / vendi abbonamento (può essere parzialmente compilato in relazione alla quantità o al tempo)
  • Compra / vendi tutto l'abbonamento alla quantità (può essere riempito solo parzialmente in base al tempo)
  • Acquista / vendi abbonamento a tempo indeterminato (può essere riempito solo parzialmente in relazione alla quantità)
  • Compra / vendi tutto l'abbonamento per quantità e tempo (non può essere riempito parzialmente, tutto o niente)

Ogni utente che riempie il

Esempio 1

Supponendo che tutti gli ordini in questo esempio possano essere parzialmente riempiti per quanto riguarda la quantità e il tempo consenta di dire che l'utente A effettua un ordine di acquisto chiedendo 100 azioni tra 1/2/2014 - 1/3/2014 (gg / mm / aaaa) .

Al momento sono presenti 4 ordini di vendita nel book degli ordini

  • L'utente B vende 25 azioni tra 1/1/2014 - 5/1/2014
  • L'utente C vende 50 azioni tra 1/1/2014 - 15/2/2014
  • L'utente D vende 70 azioni tra il 10/2/2014 e il 1/7/2014
  • L'utente E vende 5 azioni tra il 15/2/2014 e il 25/2/2014

Quale apparirebbe

User A                 |--------------100-----------|
User B    |----------------------------25-----------------------|
User C    |-------------------50---|
User D                       |--------------70------------------|
User E                             |--5--|

Dopo aver eseguito la corrispondenza, ogni ordine degli utenti nel libro degli ordini sarà simile a

User A                 |-25--|           |----5-----|
User B    |------25----|                            |----25-----|
User C    |------50----|
User D                                              |----70-----|
User E has no open orders

Dopo tutto quello che è stato detto e fatto il libro degli ordini sarebbe stato:

  • L'utente A acquista 25 azioni tra 1/2/2014 - 10/2/2014
  • L'utente A acquista 5 azioni tra il 15/2/2014 e il 1/3/2014
  • L'utente B vende 25 azioni tra 1/1/2014 - 1/2/2014
  • L'utente B vende 25 azioni tra il 1/3/2014 e il 05/1/2014
  • L'utente C sta vendendo 50 azioni tra 1/1/2014 - 1/2/2014
  • L'utente D vende 70 azioni tra 1/3/2014 - 1/7/2014
  • L'utente E non vende nulla

Esempio 2

Questo esempio è esattamente lo stesso eccetto che l'utente B è di vendere tutto il tipo di abbonamento di quantità e orario. In altre parole, l'utente B vuole vendere la sua intera posizione.

Dopo aver eseguito la corrispondenza, ogni ordine degli utenti nel libro degli ordini sarà simile a

User A                 |-50--|     |--25-|----30----|
User B    |----------------------------25-----------------------|
User C    |------50----|
User D                       |-20--|                |----70-----|
User E has no open orders

Dopo tutto quello che è stato detto e fatto il libro degli ordini sarebbe stato:

  • L'utente A acquista 50 azioni tra 1/2/2014 - 10/2/2014
  • L'utente A acquista 25 azioni tra il 15/2/2014 e il 25/3/2014
  • L'utente A acquista 30 azioni tra il 25/2/2014 e il 1/3/2014
  • L'utente B vende 25 azioni tra 1/1/2014 - 5/1/2014 (non corrisponde nemmeno perché questo ordine non consente il riempimento parziale)
  • L'utente C sta vendendo 50 azioni tra 1/1/2014 - 1/2/2014
  • L'utente D vende 70 azioni tra il 15/2/2014 e il 25/2/2014
  • L'utente D vende 70 azioni tra 1/3/2014 - 1/7/2014
  • L'utente E non vende nulla

Processo

Un altro requisito è che devo essere in grado di tenere traccia di come gli ordini sono compilati nel database. Quando entra in gioco l'ordine di acquisto dell'utente A, corrisponderà innanzitutto a quello dell'utente B, che risulterebbe in:

User A                 |--------------75------------|
User B    |------25----|                            |----25-----|

Entrambi questi stati dovrebbero essere salvati nel database. Una volta completato, l'ordine dell'Utente C viene confrontato, che assomiglia a:

User A                 |-----25----|------75--------|
User B    |------25----|                            |----25-----|
User C    |------50----|

Continua:

User A                 |--25-|     |-------5--------|
User B    |------25----|                            |----25-----|
User C    |------50----|
User D                                              |----70-----|

Domanda

Esiste un algoritmo esistente per fare ciò che sto chiedendo?

EDIT : dopo alcune ricerche, sembra che io sia in cerca di un albero ad intervalli o di un segmento in cui posso riassumere ciò che c'è nell'albero per un determinato intervallo di tempo. Tuttavia, devo essere in grado di memorizzare le modifiche all'albero in un database con l'inizio e le date. Ci sono implementazioni là fuori di questo fatto con LINQ o SQL?

EDIT 2: nella mia prima modifica ho pensato che fosse un albero ad intervalli, ma ora sembra più algoritmo di compressione bin

    
posta user12345 25.01.2014 - 02:57
fonte

0 risposte

Leggi altre domande sui tag