Surely this is a solved problem in the finance industry?
I think I like 3 the best but I'm still not entirely sure what the problem with it is.
The problem with 3 is that you can only buy/sell a specific quantity in 1 currency in the pair.
So lets say we use GBP/BTC, you could only sell a specific amount of GBP or buy a specific amount of GBP.
This problem is fixed in the financial industry in a pretty convoluted way. You get a quote from a broker, who has added a spread, the quote is only good for a certain time period, but since the quote is locked in you can calculate the exact amount you end up buying.
So to make it possible to buy an exact amount at an exact rate you pay a broker a spread above market.