R로 알아보는 비트코인 연도별 변동성 확인
누군가가 기업형 커뮤니티인 블라인드에 다짜고짜 올립니다. 새벽대가 항상 세력이 매집해서 가격을 올리는 순간이니, 이때 무조건 사야한다고.
우리는 말도 안되는 소문이라고 생각하지만 또 다른 한편으로는 작은 의구심이 들면서, 기회가 왔는데도 못사는것 아닌가 라는 생각이 듭니다. 뇌속에는 지금까지 어마어마하게 많이 나를 스쳐지나갔던 폭등의 기회가 흐르면서요. 저녁에 사야할까 말아야할까 고민하다가 그냥 잤는데 아침에 빨간불이 우수수 보이면, 전날 자신의 행동을 탓하고는 하던 기억들도 스쳐 지나갑니다.
이번에는 R을 이용해서 시계열 데이터를 받아와 시간별 변동성이 연도별 차이가 있는지 알아보고자 합니다. 다음에 쓸글은 시간구간별로 다른가에 대한 확인도 해볼예정이구요.
비트코인 시계열 데이터 긁어오기
다음의 API를 가지고 쉽게 데이터를 가지고 올수 있습니다.
http://api.bitcoincharts.com/v1/trades.csv?symbol=krakenEUR&start=1303100000
1303100000 은 유닉스에서 쓰는 시간 표현 방식인데, 1970년 1월 1일부터 얼마나 시간이 흘렀나에 대한 표현입니다. 이를 R에서는 다음과 같이 쉽게 변환할수 있습니다.
val <- 1400230012
as.POSIXct(val, origin="1970-01-01")
"2011-04-18 13:13:20 KST"
풀 데이터는 여기서 다운로드 할수 있습니다.
우리는 bitstamp의 USD시세 기준으로 시간단위로 잘라서 한번 살펴보겠습니다.
일단, 테이블로 쉽게 불러올수 있습니다. V2가 가격입니다.
data <- read.table('http://api.bitcoincharts.com/v1/trades.csv?symbol=krakenEUR&start=1503100000', sep=",")
head(data)
V1 V2 V3
1 1516099067 9809 0.40000000
2 1516099068 9800 0.09090000
3 1516099068 9800 0.00910000
4 1516099068 9800 0.01021141
5 1516099070 9800 0.00778859
6 1516099070 9809 0.00221141
만약, 시간을 좀더 깔끔하게 보고 싶으면 아래와같은 명령어로 쉽게 변환이 가능합니다.
data[,1] <- as.POSIXct(data[,1], origin="1970-01-01")
head 와 tail로 살펴보니, 약 세시간정도의 데이터를 한번에 끌어오는것이 가능합니다. 이정도는 사실 너무 쓸데없는 데이터가 많은 것 같습니다. 우리는, 위에서 소개한 풀 데이터를 한번에 긁어오겠습니다. 총 800메가이므로, 긴장은 하셔야 합니다. 로딩하는데 1분 넘게 걸립니다.
raw <- read.table("bitstampUSD.csv", sep=",")
raw[,1] <- as.POSIXct(raw[,1], origin="1970-01-01")
> head(raw)
V1 V2 V3
1 2011-09-13 22:53:36 5.80 1.0000
2 2011-09-13 22:53:44 5.83 3.0000
3 2011-09-13 22:53:49 5.90 1.0000
4 2011-09-13 22:53:54 6.00 20.0000
5 2011-09-13 23:32:53 5.95 12.4521
6 2011-09-13 23:35:04 5.88 7.4580
> tail(raw)
V1 V2 V3
19727009 2018-01-21 08:08:04 12808.99 0.00120991
19727010 2018-01-21 08:08:13 12810.99 0.00113173
19727011 2018-01-21 08:08:13 12810.99 0.00081959
19727012 2018-01-21 08:08:13 12811.99 0.00097545
19727013 2018-01-21 08:08:14 12821.34 0.00307323
19727014 2018-01-21 08:08:15 12821.37 0.19726491
2011년부터의 거래데이터 약 19,727,009건이 제대로 데이터에 올라와있는것을 확인할수 있습니다. 지금의 데이터건수는 너무 많기 때문에 한시간 간격으로 한번 잘라 보겠습니다.
data <- raw[endpoints(raw[,1], on="hour", k=1),]
> tail(data)
date price amount
19721509 2018-01-21 03:59:58 12968.01 0.10000000
19723255 2018-01-21 04:59:55 12795.12 1.12533016
19724605 2018-01-21 05:59:57 12784.03 0.01000000
19725457 2018-01-21 06:59:41 12933.99 0.00045875
19726755 2018-01-21 07:59:55 12874.85 0.15517074
19727014 2018-01-21 08:08:15 12821.37 0.19726491
데이터의 마지막 한시간 단위로 2011년부터 2018년까지 모두 끊어냈습니다. 다만 2011년도의 데이터는 원본데이터가 충분하지 않아서 시간단위로 기록이 되지 않았습니다. 아마 거래하는 사람이 많이 없어서 그렇겠죠? 그때 비트코인을 판 사람들은 땅을 치고 후회를 하겠군요..
한번 그래프를 한번 그려보겠습니다.
plot.ts(data[,2])
2011년부터 가격을 표시했기 때문에, 최근에 어마어마한 폭으로 가격이 오른것을 확인할수 있습니다. 2013년부터 다 잘라내겠습니다.
> data2013 <- subset(data, format(date,'%Y') == '2013')
> data2014 <- subset(data, format(date,'%Y') == '2014')
> data2015 <- subset(data, format(date,'%Y') == '2015')
> data2016 <- subset(data, format(date,'%Y') == '2016')
> data2017 <- subset(data, format(date,'%Y') == '2017')
각각의 그래프는 다음과 같습니다.
2013년
2014년
2015년
2016년
2017년
2018년 (1월 한달)
인상적인건 2017년의 급격한 상승이 느껴집니다.
이제, 길게끌건 없고 시간별로 이제 나누겠습니다. 시간은 위에서 잘라냈듯이 00:00 ~01:00 01:00 ~ 02:00 이렇게 한시간 단위로 모든 년도가 나뉘어져있습니다.
각 년도의 시간당 가격 변동성 측정
diff는 각 데이터의 차이를 알려주고, sd는 standard deviation, 즉 표준편차를 나타냅니다. 아래와같은 식으로 쉽게 연도별 시간별로 구별해서 구한 표준편차를 알수있습니다.
sd(diff(data[,2]))
무작정 측정
- 2014년 : 5.07
- 2015년 : 2.30
- 2016년 : 3.05
- 2017년 : 90.26
- 2018년 (1월) : 219.01
로그스케일 변동성 측정
로그스케일로 차트를 보라는 말이 있습니다. 위에서 언급한 차트에서는 비트코인이 최근에서야 엄청 상승한것으로 차트가 그려지고 있습니다.
가격의 변동폭은 년도별 엄청나게 튀어왔습니다. 2017년은 광기의 한해였고, 2018년은 그보다 더한 표준편차가 눈에 띄고 있습니다. 그렇지만, 이는 차이를 절대적인 값으로 측정해서 나오는 문제이기도 한데, 꾸준히 상승해 와서 높은 가격으로 변동이 일어나기 때문에, 같은 20% 등락이라도 높은 가격에서 왔다갔다 하면 변동폭도 크겠지요. 1원에서 10원으로 뛰는것도 10원 상승이고, 1000원에 1010원으로 뛰는것도 10원상승인데, 둘의 차이는 어마어마합니다.
그래서 사실 이런식으로 측정을 하면 안됩니다. 우리는 게다가 비트코인을 0.00001개 구입하기도 해서 사실 얼마인지는 중요하지가 않습니다. 1원에서 10원 상승해서 1000%의 수익을 달성하는게 좋지, 1000원에서 1010원으로 상승하면 상승률은 1%밖에 되지 않습니다. 변동성도 이런식으로 비율로 측정이 되어야합니다.
sd(diff(log(data[,2])))
- 2013년 : 0.020138221
- 2014년 : 0.009174843
- 2015년 : 0.007713680
- 2016년 : 0.005202454
- 2017년 : 0.011164222
- 2018년 : 0.016996544
그리고 그래프를 한번 그려봅니다.
ggplot(data=d, aes(x=year, y=sd, fill=year)) + geom_bar(stat="identity")
등락폭을 2011년 ~ 2-18년의 데이터를 전체를 살펴보면 다음과 같은 그래프가 나옵니다.
실제로, 2013년은 변동폭이 엄청나게 컸고, 2018년의 1월또한 마찬가지로 등락폭이 굉장히 큰걸 알수있습니다. 이의 변동성은 수익률로 구분한거구요. 2017, 2018년에 비트코인이 엄청난 등락폭을 기록한것은 맞지만, 너무나도 비싸져있는 단위당 가격때문에, 수익률로 환산하면 사실 2013년도보다는 등락폭이 크지 않네요.
그렇다면, 코인으로 돈을 벌었다는 사람들은 2017년에 몰려있는데 도대체 어디 숨어있는걸까요? 바로 알트코인이 비트코인이 초기에 가졌던 변동성보다 더한 변동성을 가지고 움직였을겁니다. 결국 사람들에게 뽕맞은 기분 혹은 식은땀이 나는 경험을 하게 한건 코인계 기축통화로 작동하는 비트코인보다는 알트코인이 주도한 결과겠습니다.
오케이 여기까지! 안녕!
저 실례지만 제가 R 공부를 시작했는데 혹시 막히는게 있으면 나중에 여쭤봐도 될까요??
네 ^^