I think there is a result that some generalizations of the Vickrey auction to two sided trading do not have balanced budgets: i.e. require additional incentives from the market maker. It occurs as a consequence of avoiding any participant's price being dependent on their own input. The "Vickrey" approach would be to make someone's price equal to the decrease in surplus of everyone else that is involved in accepting their bid or ask. But that means buyers all pay marginal cost of the most costly traded unit and sellers all receive marginal value of the lowest valued traded unit. Obviously there is a gap there and thats what the market maker has to pay to get traders individually to tell the truth. Also, it can be manipulated by groups of traders. Milgrom, "Putting Auction Theory To Work" http://www.amazon.com/Putting-Auction-Churchill-Lectures-Economics/dp/0521536723/ref=sr_1_1?ie=UTF8&qid=1314177894&sr=8-1 would be a good place to start reading for an understanding of these issues.
A more practical approach perhaps is the UPDA.
Consider using a uniform price double auction if you need a two-sided trading institution -- for buying or selling -- but want something like the kind of truth-telling incentive found in the Vickrey auction.
In the Uniform Price Double Auction, truth-telling bids/asks are incentive compatible if you are not the price setter because pricing is an order statistic (like a median, but not literally the median) not a mean. And, you can't know if you are the price setter if all the bids and asks are processed simultaneously and in secret. Like the Vickrey auciton, with the UPDA, strategic under pricing or over pricing by a participant exposes that specific participant to either lost opportunities that would have made money or to actual deals with losses.
If your single resource type consists of identical units of a commodity, then a reasonable approach is the uniform price double auction, as follows:
- All bids (quotes from buyers) and asks (quotes from sellers) are for single units of a well-defined commodity good or service. To bid for multiple units, just send more than one bid or ask. Collect all the bids and asks from everyone in two arrays b[], and a[]. Thats two arrays for the entire market, not for each participant.
- Sort the bids in b[] by price from high to low.
- Sort the asks in a[] by price from low to high.
- Find q*>0, perhaps incrementally, such that
b[q*]>=a[q*] AND b[q*+1]<a[q*+1]
- Make every bid/ask corresponding to an array index q, q<=q* a trade. q>q* does NOT trade
- Set price the same for all traders, p can be set anywhere from as low as max(a[q*],b[q*+1]) to as high as min(b[q*],a[q*+1]) and the result will be consistent with all the bids and asks. It is common to calculate both and choose the midpoint.
You might also want to do some reading on Experimental Economics, where many variations of auctions and markets have been studied with prototype software in human subject laboratories where the human subjects trade for profit. I have also done some work in this area.
See:
Vernon L. Smith, Economics in the Laboratory, Journal of Economic Perspectives, Vol 8, no.1, 1994.
You can find a few examples of uniform price double auctions in Smith's collected works, which can be had on Amazon:
http://www.amazon.com/Papers-Experimental-Economics-Vernon-Smith/dp/052102465X/ref=sr_1_7?ie=UTF8&qid=1314072760&sr=8-7