Arbitrage is the process of purchasing an item in one market and selling it another for a small profit. Making 0.5% per action could add up, especially if automated. Bitcoin markets are an interesting space to explore and understand Arbitrage due to the wealth of information and transparency. Questions of the invisible hand at play are coming into focus the more you watch it. Questions such as how exchanges attempt to keep their rates as close to Mtgox’ (the market currently with the highest volume).
I built a Google Apps/Scripts library Bitcoin Utlitilities (documentation) that provides functions to grab orderbook data directly from exchanges (not from bitcoincharts.com). Based on this i’ve built a public Bitcoin Arbitrage Google Spreadsheet that updates once a minute showing the spread between the major exchanges. Note, the table does not take into account exchange fees but for now use your own knowledge to gauge this (most exchanges charge between 0.5% and 1%). Also note that table is bias towards EUR and will convert opps to EUR whenever the currency differs.
The percentages shown in the table are based on the absolute lowest ask and highest bid for each exchange. This table is based on Arbitrage where you buy BTC based at the lowest ask (lowest price someone will sell at) and sell the BTC in another market for the higest bid (the most someone is willing to pay for BTC). The code goes further however to try to calculate the maximum profit by going into the order book. When you hover over each item with your mouse you will see the volume and maximum profit calculations.
What one quickly sees is that the opportunities where the lowest ask / highest bid are greatest do not always equal the best profit. For example the table shows a %3.03 difference between the ask price at btc24EUR (bitcoin24.com) and btceEUR (btc-e.com) but the code found that the profit margin was so low (lower than a few eurocent) that buy adding further orders in the orderbook one could get higher profit (0.04 cents) at a lower spread (1.43%).
Compare this to the other opportunities such as the 0.61% when buying at btceUSD and selling at mtgoxEUR and you will see that this lower spread on the first ask/bid in the order books yields greater profits when adding more ask/bids. The bot found that 121BTC could be purchased at btceUSD and sold at mtgoxEUR for a 11.40eu profit totally 0.63% of cost.
Of course after you take into account the 0.6% fee for mtgox and 0.2% fee on btceUSD the opportunity isnt worth it. But this illustrates that buyers and sellers should not look as much at the spread between highest/lowest ask/bid and instead look at an aggregate.
More interesting still is looking into the Arbitrage Log in the spreadsheet. Here one sees that some opportunities are alive for extended periods of time. It also shows that the spread and potential can change drastically and gives one an overview of total potential for a given period of time. One should notice that the potential yield over all is not that great. But in exploring the topic it brings up a lot of questions i’d like to look at further:
- If I’m an exchange is there a negative or positive benefit to having my lowest ask and highest bid differ or match MTGox? In either case an exchange could adapt and manipulate their order books (buy placing bids automatically)
- I know that some exchanges do have their own order bots running, I’ve gone as far to reverse engineer the metrics some use. Is the issue of spread from MTGox one of the reasons for running such a bot? If an exchange bot provides advantage, even slight, to an exchange, can the bot itself be gamed to provide advantage to someone else?