Pages:
Author

Topic: Building a great Bitcoin exchange, part I: transaction fees (Read 3029 times)

hero member
Activity: 499
Merit: 500
Sounds good in practice, but the logic behind the system might be hard to keep track of.

Taking what you've stated in the OP and what btc-e.com does, I think it would be a good idea to charge a small trade fee 0.1% or less and charge a withdrawal fee as well.

Understandably, brokers have to make a profit from somewhere too.

I would also charge a licencing fee for anybody who wants to use the API as developers using these API's are the ones that place the most strain on the system. Thinking out aloud, free for basic use would be a good idea but then $10 or so a month for trade placing will put off kids running 1 cent scalping bots.

An API fee is definitely another way to go.  Maybe as well as or instead of some of the other measures.
donator
Activity: 848
Merit: 1078
bitfloor did it correctly

limit orders should get a fee RETURNED

market orders should pay the fee

Or at least passive limit orders (ie. won't execute immediately) are free.

On top of that, order fees should be flat + % (eg. BTC0.01 per trade, plus 0.5%).  That will kill the micro-trading bots.

On top of that, there should be a fee for cancelling short-lived orders.  Say, any order that lived in the book less than 1 minute gets charged BTC0.01 cancellation fee.  You get five free cancels per 24 hours (plenty for fat finger fix-ups), plus for each execution you get a free cancel (so people can actually do trading if they want).  Or something similar that would stop quote-stuffing.

Sounds good in practice, but the logic behind the system might be hard to keep track of.

Taking what you've stated in the OP and what btc-e.com does, I think it would be a good idea to charge a small trade fee 0.1% or less and charge a withdrawal fee as well.

Understandably, brokers have to make a profit from somewhere too.

I would also charge a licencing fee for anybody who wants to use the API as developers using these API's are the ones that place the most strain on the system. Thinking out aloud, free for basic use would be a good idea but then $10 or so a month for trade placing will put off kids running 1 cent scalping bots.
hero member
Activity: 499
Merit: 500
bitfloor did it correctly

limit orders should get a fee RETURNED

market orders should pay the fee

Or at least passive limit orders (ie. won't execute immediately) are free.

On top of that, order fees should be flat + % (eg. BTC0.01 per trade, plus 0.5%).  That will kill the micro-trading bots.

On top of that, there should be a fee for cancelling short-lived orders.  Say, any order that lived in the book less than 1 minute gets charged BTC0.01 cancellation fee.  You get five free cancels per 24 hours (plenty for fat finger fix-ups), plus for each execution you get a free cancel (so people can actually do trading if they want).  Or something similar that would stop quote-stuffing.
sr. member
Activity: 252
Merit: 250
bitfloor did it correctly

limit orders should get a fee RETURNED

market orders should pay the fee
hero member
Activity: 499
Merit: 500
nice post..   but I do think all these extra 'financial instruments' can lead to more problems than their worth

what's next?  naked short selling? 30x leveraged ETFs? 

I think the less wizardry introduced into an exchange will be more stable.  Even if just to bore the degenerates to go back to their casino exchanges



IMO naked shorting is nothing short of fraud.  On the plus side, it's not possible with bitcoin - because to sell bitcoin you have to deliver bitcoin.  So if an exchange allowed "naked shorting" then effectively it would be the exchange loaning the bitcoins for sale.

As for leverage and ETFs, nothing is stopping someone today offering ETFs and leverage.  If I'm not mistaken IG markets has just started offering 'something' (CFDs?) on bitcoin prices.

The benefit of bitcoin is the reduced ability for fraud.  If you have a 30x ETF that trades bitcoin and loses, then the only losers are the investors in that ETF and those who loaned funds to that ETF.  I don't see how something like that going broke could affect the wider Bitcoin.  In fact, it could be a positive - the fact that the losses are quarantined to those directly invested surely is a positive in the favour of Bitcoin.
sr. member
Activity: 462
Merit: 250
nice post..   but I do think all these extra 'financial instruments' can lead to more problems than their worth

what's next?  naked short selling? 30x leveraged ETFs? 

I think the less wizardry introduced into an exchange will be more stable.  Even if just to bore the degenerates to go back to their casino exchanges

hero member
Activity: 499
Merit: 500
I just had a lightbulb moment.  Sorry for the long post.

I think one of the reasons we're having these sorts of troubles with exchanges is that people (in general) think "exchange" when they really mean "e-trade".  Let me explain (and if you already know what I mean, skip to the last paragraph).

An exchange doesn't deal with everyone and anyone.  It only deals with registered participants (a.k.a. members).  It costs a _lot_ of money to be an exchange member, and it's a lot of work.  The only people that can execute on the exchange are members.  For every order a member executes, that member has to guarantee settlement to the exchange (failure to settle is a big deal).  Members are responsible for _all_ orders they send to the exchange - including orders sent on behalf of that member's clients, including if that member lets someone else "borrow" their exchange connection.  Exchanges take a very dim view on things like market manipulation.  Exchanges usually provide a fairly limited set of order types, for example:
- FOK/IOC (fill or kill/immediate or cancel).  Execute entire order immediately or cancel the order
- Day order (order will be cancelled at the end of the day)
- GTC (good 'til cancelled).  Order lives forever
- Market orders (fill at whatever price necessary)
- Limit orders (fill at a price no worse than that specified)

Anything above and beyond those simple order types is _usually_ provided by the member as a service to their clients, for example:
-  Stop loss orders (you set an order that is inactive until a trigger (eg. trade price) is hit).  Can be used to automatically bail if trend moves against, or automatically take profits if target is hit
- one-cancels-other (two linked orders, the execution of one cancels the other)
- short selling (borrowing stock and selling it)
- algorithmic trading (automatically trading a large order over a period of time to avoid adversely moving the market is one use case)
- dark orders (trading big orders at the mid point of the current bid/offer spread)
[sometimes some of these features are exchange-provided - depends very much on the exchange]

Exchanges hit their members with a range of fees.  Firstly there is just the fee for being a member.  Then there are feeds for the privilege of connecting to the exchange.  In some places a member will be hit with a fee per market action (add/cancel/ammend order).  Of course there are per-execution fees (sometimes flat fees, sometimes % of trade value).   Some places have market maker/taker pricing (ie. if your order is sitting in the book and is taken out by an aggressive order, you get charged differently than if you were the one who crossed the spread and executed) - normally market makers get a discount (or even rebate).  And the exchanges I know of (I work in the field) limit the message (order) rate their members are allowed to do stuff.  If a member wants to send more messages to the market per second, they need to pay more.

The interface (and fees) to the market seen by the member is _very_ different to the interface (and fees) the member presents to their client (eg. your e-trade) account.  And there are good reasons for this - the simpler the exchange interface, the faster it will be, the less prone to errors it will be, the easier it will be to keep track of what's going on, the cheaper it will be (for everyone involved).  Although the "simplicity" of the exchange interface would likely be viewed as complexity by most people who actually want to trade in the market, which is why the exchange members provide their own interfaces that are tailored to their clients (the interface e-trade provides is very different to the one Merrill Lynch provides). 

So now we come to the crux - I believe these exchanges are built and run by people who think that the way e-trade works is the way an exchange works.  If you've ever watched the mtgox ticker and book, the sheer volume of spam trades (BTC0.01 trades) is a symptom of this, as is the sometimes hectic updating of the order book several dollars away from the BBO.  And it's not just gox - they are just the biggest so easiest to pick on.  I believe that building an exchange the way that someone who's only used e-trade thinks an exchange works is why things are so fragile.

So - I commend anyone trying to set up another exchange, and I urge you to do your research and "do it properly".
sr. member
Activity: 462
Merit: 250
Perhaps it's a good thing to incentivize the liquidity providers.
Also, I think you should welcome professional traders and bots, as that is probably the fastest and best way to achieve high volume and liquidity on the exchange. Sure, that will require you to provision extra network/computing capacity and a good API, but I'm pretty sure that cost is easily outweighed by the "services" they provide to regular users.

All liquidity on financial markets is provided by Professionals...
These are highly skilled people that expect to get paid for providing a valuable social service...
That's why being a trader is an honorable profession... unlike, say, being a poker player.

No Pros = No Liquidity = No Exchange...
Also, when the Pros stop trading you have a "liquidity crunch"... and prices crash.

This whole idea that tiered fees "discriminate" against amateurs is juvenile...
It's the other way around... you must have incentives to attract Professionals.

wow..  way to talk up your game..  I guess you will expect to front run all orders in the name of 'liquidity'

you are doing 'god's work' right?

being a pro trader is not honorable mr moneychanger.. it is a zero sum game where the only money you make is what you take.  You produce nothing.


sr. member
Activity: 280
Merit: 250
Perhaps it's a good thing to incentivize the liquidity providers.
Also, I think you should welcome professional traders and bots, as that is probably the fastest and best way to achieve high volume and liquidity on the exchange. Sure, that will require you to provision extra network/computing capacity and a good API, but I'm pretty sure that cost is easily outweighed by the "services" they provide to regular users.

All liquidity on financial markets is provided by Professionals...
These are highly skilled people that expect to get paid for providing a valuable social service...
That's why being a trader is an honorable profession... unlike, say, being a poker player.

No Pros = No Liquidity = No Exchange...
Also, when the Pros stop trading you have a "liquidity crunch"... and prices crash.

This whole idea that tiered fees "discriminate" against amateurs is juvenile...
It's the other way around... you must have incentives to attract Professionals.
sr. member
Activity: 364
Merit: 250
How about:

1. You give 0.005 * 200 USD = 1 USD in fees and it's taken from the order.  A buy order of 2 BTC at 101.0 USD is created.  You're left with 200 USD in your wallet.  After the order is executed, you'll have 2 BTC and 200 USD.

I think that one would be great.

While I appreciate the elegance of this method (when money comes in or out, the sum is always what you specified), I feel that it can give the user a wrong impression of what is happening. Imagine the outcry if someone had placed a sell order at $255 during the latest bubble, which wouldn't have been executed simply because actually the sum was $255 + 0.5% = 256.275 (and the bubble popped at $256).

With immediate order, it wouldn't matter - but in the case of a limit order, I want to have precise control of the price .


Just have a little 2-way calculator included in the order form.
You can fill in on both sides, so you could set the amount of money with fee or without, the other part will be calculated automatically (and is visble of course).

member
Activity: 66
Merit: 10
How about:

1. You give 0.005 * 200 USD = 1 USD in fees and it's taken from the order.  A buy order of 2 BTC at 101.0 USD is created.  You're left with 200 USD in your wallet.  After the order is executed, you'll have 2 BTC and 200 USD.

I think that one would be great.

While I appreciate the elegance of this method (when money comes in or out, the sum is always what you specified), I feel that it can give the user a wrong impression of what is happening. Imagine the outcry if someone had placed a sell order at $255 during the latest bubble, which wouldn't have been executed simply because actually the sum was $255 + 0.5% = 256.275 (and the bubble popped at $256).

With immediate order, it wouldn't matter - but in the case of a limit order, I want to have precise control of the price.

I'm beginning to think that it's best to always include an explicit fee (in USD/EUR/whatever fiat you're trading against) when the user is about to submit an order. It needs some UI work to make it work understandably and beautifully in all cases, though. (There are at least 3 variables: buy X BTC/spend X USD, limit/market order, and buy/sell.)
sr. member
Activity: 364
Merit: 250
Conversely, if you have 400 USD in your wallet, and want to buy 2 bitcoins at 100.0 USD. Where is the 0.5% fee taken?

1. You give 0.005 * 200 USD = 1 USD in fees and it's taken from the order.  A buy order of 1.99 BTC at 100.0 USD is created.  You're left with 200 USD in your wallet.  After the order is executed, you'll have 1.99 BTC and 200 USD.

2. You give 0.005 * 200 USD = 1 USD in fees and it's taken from your wallet.  A buy order of 2.00 BTC at 100.0 USD is created.  You're left with 199 USD in your wallet.  After the order is executed, you'll have 2.00 BTC and and 199 USD.

3. A buy order of 2.00 BTC at 100.0 USD is created.  You're left with 200 USD in your wallet.  When the order is executed, you'll receive 99.5% of the BTC, leaving you with 1.99 BTC and 200 USD.

4. Something else?


How about:

1. You give 0.005 * 200 USD = 1 USD in fees and it's taken from the order.  A buy order of 2 BTC at 101.0 USD is created.  You're left with 200 USD in your wallet.  After the order is executed, you'll have 2 BTC and 200 USD.

I think that one would be great.
member
Activity: 66
Merit: 10
Fixed fees make bots performing micro-transactions untenable. Blending it with a percent fee is easy enough (x%, minimum of y BTC)

That lets you marginalize the impact of bots flooding your engine (GOXXED) by making it much more expensive (and thus, less likely) for manipulators to flood your market.

Good point. Though, I'd like to keep things as simple as possible - as a customer, I'm annoyed when I see a fee structure such as "0.20%, minimum of 9 EUR" (which is the starting fee of nordnet.fi, a Finnish stock trading firm), because I feel that I'm being unjustly punished for small transactions, and I feel the need to calculate the point after which I'm "not being cheated" any more (in this case, 9 EUR / 0.20% = 4500 EUR). That's just a hassle. Perhaps not such a big hassle with smaller transactions, but a hassle nonetheless.

How about just having a minimum order quantity, which effectively guarantees a minimum fee? For instance, a transaction fee of 0.5% and a minimum order quantity of 0.1 BTC would guarantee a minimum of 0.0005 BTC / transaction, which will probably be a big enough to prevent bots from overwhelming the exchange with orders.

Then again, the exchange should definitely be prepared to be overwhelmed.
newbie
Activity: 14
Merit: 0
On the topic of fixed fees:

Fixed fees make bots performing micro-transactions untenable. Blending it with a percent fee is easy enough (x%, minimum of y BTC)

That lets you marginalize the impact of bots flooding your engine (GOXXED) by making it much more expensive (and thus, less likely) for manipulators to flood your market.
legendary
Activity: 2142
Merit: 1010
Newbie
All in all, I'd like to hear your opinions as to what kind of features you're looking in an exchange and where the current exchanges are lacking.

Decentralization.
member
Activity: 66
Merit: 10
My thoughts, after doing some thinking on the matter, are roughly:

1. fees should be only collected after the transaction
2. it would be easiest for the exchange to always collect the fee in USD (should make bookkeeping, paying taxes, etc. easier)
3. on the other hand, there is some beautiful symmetry in collecting the fee in both BTC and USD (either "buyers pay BTC, sellers pay USD" or vice versa, whichever seems to make more sense)
4. the rules should be simple and transparent
5. the rules should work also in situations where someone converts their whole balance to another type

There's interesting interplay between these requirements and I suspect that the solution is not that simple.
member
Activity: 66
Merit: 10
Conversely, if you have 400 USD in your wallet, and want to buy 2 bitcoins at 100.0 USD. Where is the 0.5% fee taken?

1. You give 0.005 * 200 USD = 1 USD in fees and it's taken from the order.  A buy order of 1.99 BTC at 100.0 USD is created.  You're left with 200 USD in your wallet.  After the order is executed, you'll have 1.99 BTC and 200 USD.

2. You give 0.005 * 200 USD = 1 USD in fees and it's taken from your wallet.  A buy order of 2.00 BTC at 100.0 USD is created.  You're left with 199 USD in your wallet.  After the order is executed, you'll have 2.00 BTC and and 199 USD.

3. A buy order of 2.00 BTC at 100.0 USD is created.  You're left with 200 USD in your wallet.  When the order is executed, you'll receive 99.5% of the BTC, leaving you with 1.99 BTC and 200 USD.

4. Something else?
member
Activity: 66
Merit: 10
Another question of transaction fees:

If you have 4 BTC in your wallet and want to sell 2 BTC on an exchange at the price of 100.0 USD, and there's a 0.5% transaction fee, which one would you prefer:

1. You give 0.005 * 2 BTC = 0.01 BTC in fees and it's taken from the order. A sell order of 1.99 BTC at 100.0 USD is created. You're left with 2.00 BTC in your wallet.

2. You give 0.005 * 2 BTC = 0.01 BTC in fees and it's taken from your wallet. A sell order of 2 BTC at 100.0 USD is created. You're left with 1.99 BTC in your wallet.

3. A sell order of 2 BTC at 100.0 USD is created. You're left with 2 BTC. When the order is executed, you receive 99.5% of the USD, leaving your with 2 BTC and 199 USD in your wallet.

4. Something else, what?

Why does this question occupy my mind? During the weekend I tried to benefit from the price volatility at Mt. Gox - especially during the zero fee period - and I noticed how nice it is when the BTC values stay nice and clean. For example, I had 5 BTC in my wallet, and kept selling and buying 2 or 3 BTC, and the profits would accrue to my USD balance. When the transaction fees returned, keeping the BTC numbers nice and round became harder.
rta
newbie
Activity: 18
Merit: 0
Perhaps it's a good thing to incentivize the liquidity providers.

I would say it most certainly is a good thing. Liquidity and (narrow) spreads are very important to users (not up there with trust, but still pretty important). At the ideal(ized) exchange, users wouldn't need to worry about these things, and even big orders wouldn't cause the market to swing. From what I can tell Bitfloor usually have a very narrow spread, but volume/liquidity is somewhat lacking.

Also, I think you should welcome professional traders and bots, as that is probably the fastest and best way to achieve high volume and liquidity on the exchange. Sure, that will require you to provision extra network/computing capacity and a good API, but I'm pretty sure that cost is easily outweighed by the "services" they provide to regular users.

Good luck with your project. In order for Bitcoin to survive its own popularity, more and better exchanges are needed. Not to mention the irony of the Bitcoin world having all but a single centralized exchange...
member
Activity: 66
Merit: 10
I think MtGox charges too much, but Bitfloor is a good example of a fair fee system. They actually have a negative fee if your offer is not immediately accepted, which inventivizes offers not likely to be accepted right away so people get a better picture of the market.

Thanks for the reference. I didn't know that they actually pay you for executed limit orders. Intersango also seems to have a 0.6% difference between immediate and limit orders (https://intersango.com/fees.php). Perhaps it's a good thing to incentivize the liquidity providers.
Pages:
Jump to: