klao (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
August 20, 2013, 10:58:46 PM |
|
I don't want to speculate about the current situation at MtGox, but I wanted to share a little research about the recent big moves on it. It definitely made me think, and I didn't see this mentioned here before. We did the research together with @errge. TL;DR: The big move on mtgoxUSD from 112 to 123 on Aug 19th was a result of a very few (about 15) very large (1000-2000 BTC) orders, which were done by a few (1-4) individuals. http://bitcoincharts.com/charts/mtgoxUSD#rg5zczsg2013-08-18zeg2013-08-20ztgSzm1g10zm2g25zvHere's how we determined this. MtGox publishes a feed of all transactions and if you look at the beginning of the first move, you see the following: 1376880909,111.999920000000,0.024069000000 1376880915,111.840100000000,0.193640000000 1376880956,111.840200000000,0.097470000000 1376880959,111.840200000000,0.010960000000 1376880984,111.999900000000,4.463718200000 1376880984,112.000000000000,4.945000000000 1376880984,112.699990000000,7.269893300000 1376880984,112.700000000000,0.031112900000 1376880984,112.700000000000,0.099900000000 1376880984,112.700000000000,5.000000000000 1376880984,112.700010000000,102.262969930000 1376880984,112.790170000000,1.330178290000 1376880984,112.992520000000,0.018122130000 1376880984,113.000030000000,1.000000000000 1376880985,113.238050000000,5.517000000000 1376880985,113.240000000000,0.883080180000
There is a transaction every few seconds and then at 1376880984 (= 2013-08-19 02:56:24 UTC) starts a long streak of transactions with an ever increasing price that immediately follow each other. We made an assumption that this was a big "buy" order and what we see is it "eating its way up through the order book". This looked very plausible, so we wanted to see how big was the order and what was its limit price. So, I wrote a script that looks for streaks like that and aggregates them. This is what we got: 2013-08-19 02:56:24 UTC: (156 ts in 6s) 2000.00 @ 114.49 BUY (min: 112.00, max: 114.91) big ts: ["102.26","99.59","98.20","97.00"]
Meaning: there were 156 transactions completed in 6 seconds, and if you add up the amounts you get exactly 2000 BTC. This can't be a coincidence! It seems this was indeed one order of size 2000. (The rest of the line is a weighted average price, the min and max price of the transactions and the amounts of a few biggest transactions within that streak.) And immediately after that we get another one: 2013-08-19 02:56:31 UTC: (111 ts in 4s) 1000.00 @ 114.97 BUY (min: 114.12, max: 115.00) big ts: ["100.00","87.22","86.19","84.48"]
Here's the order size was 1000 BTC and it ate through the asks till it got to the rich field @ 115.00 USD/BTC. Well, without further ado, here's the full list: 2013-08-19 02:56:24 UTC: (156 ts in 6s) 2000.00 @ 114.49 BUY (min: 112.00, max: 114.91) big ts: ["102.26","99.59","98.20","97.00"] 2013-08-19 02:56:31 UTC: (111 ts in 4s) 1000.00 @ 114.97 BUY (min: 114.12, max: 115.00) big ts: ["100.00","87.22","86.19","84.48"] 2013-08-19 02:57:32 UTC: (28 ts in 1s) 1500.00 @ 115.00 BUY (min: 114.70, max: 115.00) big ts: ["1293.75","90.00","43.57","30.72"] 2013-08-19 02:59:40 UTC: (42 ts in 2s) 1433.72 @ 115.00 BUY (min: 114.70, max: 115.00) big ts: ["946.69","177.43","145.00","24.00"] 2013-08-19 03:10:35 UTC: (198 ts in 6s) 1000.00 @ 116.48 BUY (min: 116.21, max: 116.95) big ts: ["222.80","117.17","52.76","44.68"] 2013-08-19 03:11:40 UTC: (250 ts in 9s) 1000.00 @ 117.30 BUY (min: 116.95, max: 117.80) big ts: ["154.00","100.00","79.69","40.00"] 2013-08-19 05:32:01 UTC: (172 ts in 7s) 1000.00 @ 117.94 BUY (min: 117.20, max: 118.40) big ts: ["112.94","100.00","96.53","78.30"] 2013-08-19 05:32:19 UTC: (111 ts in 4s) 1000.00 @ 118.68 BUY (min: 118.05, max: 119.00) big ts: ["400.00","110.00","90.50","69.12"] 2013-08-19 05:32:54 UTC: (91 ts in 4s) 1000.00 @ 119.00 BUY (min: 116.78, max: 119.08) big ts: ["152.13","150.00","147.55","74.95"] 2013-08-19 05:33:05 UTC: (125 ts in 4s) 814.90 @ 119.38 BUY (min: 119.08, max: 119.73) big ts: ["100.00","99.00","83.62","79.00"] 2013-08-19 05:34:52 UTC: (198 ts in 9s) 1000.00 @ 119.91 BUY (min: 117.50, max: 120.00) big ts: ["160.00","100.00","78.90","67.00"] 2013-08-19 06:37:50 UTC: (240 ts in 10s) 1458.41 @ 119.95 BUY (min: 118.95, max: 120.00) big ts: ["100.92","100.00","100.00","59.64"] 2013-08-19 07:47:45 UTC: (171 ts in 6s) 750.00 @ 121.11 BUY (min: 120.28, max: 121.79) big ts: ["150.00","50.00","39.23","30.78"] 2013-08-19 07:50:58 UTC: (265 ts in 9s) 1250.00 @ 122.15 BUY (min: 120.38, max: 122.76) big ts: ["148.51","129.95","127.90","90.15"] 2013-08-19 07:52:29 UTC: (104 ts in 4s) 406.50 @ 122.84 BUY (min: 122.50, max: 123.00) big ts: ["89.33","72.41","52.03","25.87"] 2013-08-19 07:53:36 UTC: (179 ts in 7s) 837.36 @ 123.12 BUY (min: 122.78, max: 123.56) big ts: ["102.14","67.92","51.42","49.60"]
In most of these the amount is very round, indicating that indeed we found one exact order that was completely filled. For the non-round ones my guess is that they actually emptied the order book up to the given limit price and were not filled immediately. The proof for this is that we can sometimes find follow-up transactions matching in price which if added to the streak produce a round number. Altogether these giant orders add up to about 17500 BTC, which is a considerable part of transaction volume during that period. And all the upward price movements happened within them. We don't know whether all these whales are from the same person. But, based on the timing, I would say it's no more than 4 different players. And they moved more than $2M into bitcoins with 16 nice round orders. Interestingly we found two big sells too (and only two): 2013-08-19 09:56:14 UTC: (24 ts in 2s) 589.56 @ 120.09 SELL (min: 120.00, max: 122.00) big ts: ["274.83","100.00","60.00","30.00"] 2013-08-19 09:57:26 UTC: (3 ts in 0s) 659.28 @ 120.00 SELL (min: 120.00, max: 121.89) big ts: ["659.26","0.01","0.01"]
Or, actually, I think this is only one order, because together with the small ones in between them, they add up to exactly 1250. Thoughs?
|
|
|
|
klao (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
August 20, 2013, 11:23:40 PM |
|
Oh, and if anyone's interested and wants to play with it, I can post my script here. But sorry, it's in Haskell.
|
|
|
|
zeroblock
|
|
August 20, 2013, 11:34:49 PM |
|
Fascinating post! Great analysis.
Hmm. Its hard to speculate on what exactly it means. You've got 3-4 whales buying up a significant volume of BTC.... and its unlikely that they would keep it on the exchange if they were buying that large of a sum..... especially with Gox's going concern.
Looks like only 1 whale wants to sell BTC for fiat. Any way we could find out what currency that trade was executed in? What are your thoughts personally?
|
|
|
|
qxzn
|
|
August 21, 2013, 12:01:50 AM |
|
Very interesting, thanks for the analysis klao. I guess we don't know whether these whales were buying in order to sell on other exchanges (where fiat withdrawals are going through), or buying in order to buy, do we?
|
|
|
|
|
errge
Newbie
Offline
Activity: 8
Merit: 0
|
|
August 21, 2013, 09:38:28 AM |
|
Very interesting, thanks for the analysis klao. I guess we don't know whether these whales were buying in order to sell on other exchanges (where fiat withdrawals are going through), or buying in order to buy, do we?
No, we most certainly don't. But if I were to buy bitcoins for 2 million USD just to invest, I probably wouldn't deposit to the exchange where the price is the highest... On the other hand, if I were to know for sure (or >60%) that my exchange will collapse, I'd most certainly buy bitcoins even if my USD at that exchange is currently priced cheaper than other USD liabilities.
|
|
|
|
errge
Newbie
Offline
Activity: 8
Merit: 0
|
|
August 21, 2013, 09:49:02 AM |
|
Looks like only 1 whale wants to sell BTC for fiat. Any way we could find out what currency that trade was executed in? What are your thoughts personally?
The big SELL was also on the BTC/USD pair.
|
|
|
|
freedomno1
Legendary
Offline
Activity: 1834
Merit: 1094
Learning the troll avoidance button :)
|
|
August 21, 2013, 10:57:02 AM |
|
Saw this in the newbie thread still interesting analysis
|
Believing in Bitcoins and it's ability to change the world
|
|
|
MPOE-PR
|
|
August 21, 2013, 11:01:22 AM |
|
Fascinating post! Great analysis.
That, with sarcasm tags.
|
|
|
|
zeroblock
|
|
August 21, 2013, 06:17:36 PM |
|
Klao, Have you analyzed the most recent price movements at Gox? Looks like they fall under the large buy orders from whales category.
|
|
|
|
klao (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
August 21, 2013, 07:21:17 PM |
|
Klao,
Have you analyzed the most recent price movements at Gox? Looks like they fall under the large buy orders from whales category.
Here's the results for today: 2013-08-21 00:04:42 UTC: (462 ts in 17s) 3471.65 @ 123.29 BUY (min: 122.34, max: 124.45) big ts: ["249.98","199.15","167.00","138.50"] 2013-08-21 01:54:53 UTC: (78 ts in 4s) 680.50 @ 124.50 BUY (min: 123.49, max: 124.70) big ts: ["166.43","115.05","72.97","43.00"] 2013-08-21 02:50:27 UTC: (36 ts in 1s) 1088.79 @ 124.90 BUY (min: 124.83, max: 124.91) big ts: ["497.85","300.00","49.75","40.00"] 2013-08-21 03:36:44 UTC: (129 ts in 6s) 1000.00 @ 121.68 SELL (min: 121.00, max: 123.04) big ts: ["140.54","124.78","112.42","69.60"] 2013-08-21 04:49:13 UTC: (95 ts in 4s) 490.00 @ 120.40 SELL (min: 120.00, max: 121.00) big ts: ["40.00","40.00","39.00","30.00"] 2013-08-21 13:27:46 UTC: (94 ts in 4s) 868.91 @ 120.23 SELL (min: 120.00, max: 121.48) big ts: ["100.00","98.00","91.65","83.33"] 2013-08-21 14:38:38 UTC: (78 ts in 4s) 1000.00 @ 121.71 BUY (min: 120.43, max: 122.50) big ts: ["100.00","100.00","65.94","60.00"] 2013-08-21 14:39:36 UTC: (146 ts in 6s) 1000.00 @ 123.32 BUY (min: 120.55, max: 123.99) big ts: ["175.51","132.73","90.00","43.12"] 2013-08-21 16:06:39 UTC: (152 ts in 5s) 1000.00 @ 123.57 BUY (min: 121.01, max: 124.23) big ts: ["133.33","60.00","46.00","40.00"] 2013-08-21 16:07:29 UTC: (225 ts in 8s) 2404.00 @ 124.75 BUY (min: 123.40, max: 125.00) big ts: ["401.16","173.58","102.18","101.00"] 2013-08-21 18:06:17 UTC: (108 ts in 4s) 1021.96 @ 124.39 BUY (min: 122.93, max: 124.91) big ts: ["250.00","71.19","60.79","40.00"] 2013-08-21 18:46:40 UTC: (44 ts in 2s) 444.98 @ 124.21 BUY (min: 123.00, max: 124.90) big ts: ["57.00","50.00","50.00","40.00"]
Again, we have several very obvious exact 1k orders. And a few even bigger. For example, the 2404 BTC one had probably limit price of 125 and exhausted the order book. Interestingly, today we had more big sells. But still, the buys dominate.
|
|
|
|
qxzn
|
|
August 21, 2013, 09:17:55 PM |
|
Very interesting, thanks for the analysis klao. I guess we don't know whether these whales were buying in order to sell on other exchanges (where fiat withdrawals are going through), or buying in order to buy, do we?
No, we most certainly don't. But if I were to buy bitcoins for 2 million USD just to invest, I probably wouldn't deposit to the exchange where the price is the highest... Actually, if you executed $2m worth of buys, you would have paid more on bitstamp than on mtgox. Bitstamp's liquidity sucks, relatively speaking. So I can see why they went to gox.
|
|
|
|
zeroblock
|
|
August 21, 2013, 10:16:27 PM |
|
Very interesting, thanks for the analysis klao. I guess we don't know whether these whales were buying in order to sell on other exchanges (where fiat withdrawals are going through), or buying in order to buy, do we?
No, we most certainly don't. But if I were to buy bitcoins for 2 million USD just to invest, I probably wouldn't deposit to the exchange where the price is the highest... Actually, if you executed $2m worth of buys, you would have paid more on bitstamp than on mtgox. Bitstamp's liquidity sucks, relatively speaking. So I can see why they went to gox. If someone wanted to execute $2M worth of buys you wouldn't do it on BitStamp or Mt.Gox. That size of order moves the market 1-3%. In reality, neither exchange has enough liquidity. You would want to place a dark order on Tradehill or a block purchase with an individual privately.
|
|
|
|
OhShei8e
Legendary
Offline
Activity: 1792
Merit: 1059
|
|
August 21, 2013, 10:56:52 PM |
|
If someone wanted to execute $2M worth of buys you wouldn't do it on BitStamp or Mt.Gox. That size of order moves the market 1-3%.
On Bitstamp it would move the market "200%", because there are only $1M in bitstamps orderbook. (Hint: $1M<$2M)
|
|
|
|
johnblaze
|
|
August 22, 2013, 08:40:29 PM |
|
good work on the script
|
|
|
|
BitCoinNutJob
Legendary
Offline
Activity: 1330
Merit: 1000
|
|
August 22, 2013, 09:04:06 PM |
|
Gox were getting up to 5 mil per day in deposits this isn't an amount which would break them. 1 litecoin pump & dump they would make this back.
|
|
|
|
Rampion
Legendary
Offline
Activity: 1148
Merit: 1018
|
|
August 23, 2013, 07:18:07 AM |
|
Very interesting, thanks for the analysis klao. I guess we don't know whether these whales were buying in order to sell on other exchanges (where fiat withdrawals are going through), or buying in order to buy, do we?
No, we most certainly don't. But if I were to buy bitcoins for 2 million USD just to invest, I probably wouldn't deposit to the exchange where the price is the highest... Actually, if you executed $2m worth of buys, you would have paid more on bitstamp than on mtgox. Bitstamp's liquidity sucks, relatively speaking. So I can see why they went to gox. If someone wanted to execute $2M worth of buys you wouldn't do it on BitStamp or Mt.Gox. That size of order moves the market 1-3%. In reality, neither exchange has enough liquidity. You would want to place a dark order on Tradehill or a block purchase with an individual privately. Nonsense. You would have an average slippage of 3% (but you would move the market MORE than 3%) on Bitstamp with just a single market order of 500 BTC. A $2M buy on a BTC exchange moves the market WAY MORE than 3%. Just check the depth: http://bitcoincharts.com/markets/bitstampUSD_depth.htmlhttp://bitcoincharts.com/markets/mtgoxUSD_depth.htmlYou couldn't execute $2M worth of buys on Bitstamp because there is no depth - you could do it on Gox, but "little by little", you need to be insane to do a $2M market order in such a tiny market as per BTC.
|
|
|
|
McGyver
Newbie
Offline
Activity: 14
Merit: 0
|
|
August 24, 2013, 01:03:08 PM Last edit: August 24, 2013, 07:50:01 PM by McGyver |
|
Oh, and if anyone's interested and wants to play with it, I can post my script here. But sorry, it's in Haskell. Yes, please be so kind and post your scrpt. [I'll happily send you a decent donation once I start mining with my (day 1) Jupiters .] Many thanks for sharing your insight.
|
|
|
|
klao (OP)
Newbie
Offline
Activity: 6
Merit: 0
|
|
August 25, 2013, 07:10:18 PM |
|
Oh, and if anyone's interested and wants to play with it, I can post my script here. But sorry, it's in Haskell. Yes, please be so kind and post your scrpt. OK, here it is: {-# LANGUAGE TemplateHaskell #-}
import Control.Applicative import Data.List import Data.List.Utils import Data.Maybe import Data.Time import HFlags import Text.Printf
defineFlag "bigs_only" True "Show only big orders."
data Trade = Trade { _time :: !Int , _price :: !Double , _amount :: !Double } deriving (Eq,Show)
readCSVFile :: FilePath -> IO [Trade] readCSVFile file = do ls <- lines <$> readFile file return $ map (\[t,p,a] -> Trade (read t) (read p) (read a)) $ map (split ",") $ ls
aggPrice :: [Trade] -> (Double,Double) aggPrice l = (avgPrice, totAmount) where totAmount = sum $ map _amount l avgPrice = (/totAmount) $ sum $ map wprice l wprice (Trade _ p a) = p * a
showTime :: Int -> String showTime s = show $ addUTCTime (fromIntegral s) epoch where epoch = UTCTime (fromGregorian 1970 01 01) 0
data GTag = LEV | BUY | SELL deriving (Eq,Show) data TGroup = Single Trade | Group GTag [Trade] deriving (Show)
groupTrades :: [Trade] -> [TGroup] groupTrades [] = [] groupTrades [t] = [Single t] groupTrades (t1:t2:ts) | withinSecond t1 t2 = go (tag t1 t2) t2 ts [t1] | otherwise = Single t1 : groupTrades (t2:ts) where withinSecond (Trade t1 _ _) (Trade t2 _ _) = abs (t2 - t1) <= 1 go t x [] res = [Group t (reverse (x:res))] go t x (y:ys) res | withinSecond x y, Just t' <- fitsTag t x y = go t' y ys (x:res) | otherwise = (Group t (reverse (x:res))) : groupTrades (y:ys)
fitsTag LEV (Trade _ p1 _) (Trade _ p2 _) | p1 == p2 = Just LEV | p1 < p2 = Just BUY | otherwise = Just SELL fitsTag BUY (Trade _ p1 _) (Trade _ p2 _) | p1 <= p2 = Just BUY fitsTag SELL (Trade _ p1 _) (Trade _ p2 _) | p1 >= p2 = Just SELL fitsTag _ _ _ = Nothing
tag t1 t2 = fromJust $ fitsTag LEV t1 t2
combinedTransactions :: [Trade] -> IO () combinedTransactions trades = do let cts = groupTrades trades
output :: TGroup -> IO () output (Single (Trade t p a)) = if flags_bigs_only && a < 400 then return () else printf "%s: %.2f @ %.2f\n" (showTime t) a p output (Group tag ts) = if amount > 400 || not flags_bigs_only then printf "%s: (%d ts in %ds) %.2f @ %.2f %s (min: %.2f, max: %.2f) big ts: %s\n" stTime count duration amount avgPrice tag minPrice maxPrice bigs else return () where ta = head ts tz = last ts count = length ts prices = map _price ts stTime = showTime $ _time ta duration = _time tz - _time ta (avgPrice,amount) = aggPrice ts minPrice = minimum prices maxPrice = maximum prices bigs :: [String] bigs = map (printf "%.2f") $ take 4 $ reverse $ sort $ map _amount ts mapM_ output cts
main :: IO () main = do $initHFlags "Analyze bitcoin trades" mtgox <- readCSVFile "mtgox.csv" combinedTransactions mtgox
It's not very compact or nice, but it works. You can download the data for it from: http://bitcoincharts.com/t/trades.csv?symbol=mtgoxUSD&start=$starttime&end=$endtime, specifying proper start and end time. Or you can get the whole history in one file from http://api.bitcoincharts.com/v1/csv/mtgoxUSD.csv
|
|
|
|
|