I was just thinking about how order books work and was considering how more obscure markets (eg. LTC/NMC) might be handy if volume on them could be made high enough to be useful.
Consider the following scenario:
User A:
Offering 1 XXX for 1 YYY XXX/YYY
User B:
Offering 1 YYY for 1 XXX YYY/XXX
In a normal order book, these two orders would balance each other and both get triggered and settled.
Now consider the following scenario:
User A:
Offering 1 XXX for 1 YYY XXX/YYY
User B:
Offering 1 YYY for 1 ZZZ YYY/ZZZ
User C:
Offering 1 ZZZ for 1 XXX ZZZ/XXX
In a traditional exchange engine, none of the above orders would get triggered, despite the fact that everyone's desired currency and amount is on the table. A better system would allow this kind of situation to be triggered and settled for all three participants.
If we think of the above as BTC, LTC, NMC (and keep the inter-currency exchange rates at 1:1 to make the maths easier), then indeed the choice most exchanges seem to make, is to not offer a LTC/NMC market at all, and only let users choose BTC/LTC or BTC/NMC. If a user wants to change LTC to NMC, he has to go via BTC.
Even if an exchange makes an 'obscure' market available, lack of volume in that market (eg an LTC/NMC market) could make using it impractical anyway, and force users into doing two trades (via BTC) just because those two main markets have more volume.
What I propose, is a system where volume for the smaller market is automatically generated from orders in the first two, and orders in it are dynamically connected to the orders in the higher volume markets.
For example, consider again:
User A:
Offering 1 XXX for 1 YYY XXX/YYY
User B:
Offering 1 YYY for 1 ZZZ YYY/ZZZ
User C:
Offering 1 ZZZ for 1 XXX ZZZ/XXX
Now, these would normally stay untriggered, but what if upon the first two orders coming in, the system automatically created a 'ghost' order:
System:
Offering 1 XXX for 1 ZZZ
This would not only satisfy User C's order when it came in, but would then have to be automatically connected to the original two orders in order to settle all three.
User A --> 1 XXX --> User C --> 1 ZZZ --> User B --> 1 YYY --> User A
The specific logic for this is yet to be worked out and obviously this will be incredibly more complicated when we take different rates and different order amounts into consideration, not to mention partial orders will need to work too.
Please discuss