Sto costruendo un mercato e voglio creare un meccanismo di corrispondenza per gli ordini dei partecipanti al mercato.Miglior algoritmo per ordini di compensazione
Per esempio ricevo questi ordini:
A buys 50
B buys 100
C sells 50
D sells 20
che può essere rappresentato come un List<Orders>
, dove Order
è una classe con Participant
, BuySell
, e Amount
Voglio creare una funzione Match
, che emette 2 elementi:
- Un set di unmatche d ordini (
List<Order>
) - Un insieme di ordini abbinati (
List<MatchedOrder>
doveMatchOrder
haBuyer
,Seller
,Amount
Il vincolo è quello di ridurre al minimo il numero di ordini (accoppiati e non accoppiati), mentre non lasciando possibile corrispondenza annullata (vale a dire, alla fine, non ci può essere solo acquistare o vendere gli ordini che sono senza pari)
Quindi, nell'esempio sopra il risultato sarebbe:
A buys 50 from C
B buys 20 from D
B buys 80 (outstanding)
Questo sembra un algoritmo abbastanza complesso da scrivere ma molto comune nella pratica. Qualche suggerimento su dove guardare?
potresti voler prendere in considerazione gli algoritmi del flusso di rete – Mox
@Mox: grazie darò un'occhiata. A prima vista però sembra che gli algoritmi di flusso risolvano un caso molto generale del problema che sto cercando di risolvere. –
Non sei obbligato ad onorare il principio del primo, prima servito? Se non lo sei, vuol dire che un altro ordine in arrivo può modificare arbitrariamente la corrispondenza dei precedenti ordini di acquisto e di vendita, così ad es. un ordine di acquisto precedentemente abbinato a un ordine di vendita ora torna a essere in sospeso. –