728x90
[R] Bitcoin Trend 제거하기
1 시작
과거 금융공학자들은 금융 상품에서 트랜드를 제거하여 변동성을 분석했다고 한다.
이에 비트코인 그래프도 Trend를 찾고 이를 제거하는 과정을 정리하려한다.
2 비트코인 그래프(11/02 ~ 11/03)
먼저 일정 시간의 비트코인 그래프를 그려보자.
source(paste0(getwd(),'/../../bitcoin/config/formarkdown_config.R'))
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
res<-callBTCWON(callConnection(), "2018-11-02","2018-11-03")
res[['candleDT']]<-1:nrow(res) # index
res[['candleDateTime2']]<-as.POSIXct(res$candleDateTime, format = "%Y-%m-%dT%H:%M") # character to date
breaks_n<-length(unique(substr(res$candleDateTime,1,10)))
head(res)
## code candleDateTime timestamp unit
## 1 CRIX.UPBIT.KRW-BTC 2018-11-02T00:00:00+00:00 1541116859934 1
## 2 CRIX.UPBIT.KRW-BTC 2018-11-02T00:01:00+00:00 1541116916663 1
## 3 CRIX.UPBIT.KRW-BTC 2018-11-02T00:02:00+00:00 1541116979084 1
## 4 CRIX.UPBIT.KRW-BTC 2018-11-02T00:03:00+00:00 1541117039281 1
## 5 CRIX.UPBIT.KRW-BTC 2018-11-02T00:04:00+00:00 1541117099731 1
## 6 CRIX.UPBIT.KRW-BTC 2018-11-02T00:05:00+00:00 1541117158516 1
## candleDateTimeKst openingPrice highPrice lowPrice tradePrice
## 1 2018-11-02T09:00:00+09:00 7186000 7189000 7183000 7188000
## 2 2018-11-02T09:01:00+09:00 7188000 7189000 7184000 7188000
## 3 2018-11-02T09:02:00+09:00 7188000 7188000 7184000 7188000
## 4 2018-11-02T09:03:00+09:00 7188000 7188000 7182000 7185000
## 5 2018-11-02T09:04:00+09:00 7183000 7184000 7182000 7183000
## 6 2018-11-02T09:05:00+09:00 7184000 7185000 7181000 7183000
## candleAccTradeVolume candleAccTradePrice candleDT candleDateTime2
## 1 7.3204 52608784 1 2018-11-02 00:00:00
## 2 5.9614 42835977 2 2018-11-02 00:01:00
## 3 1.5492 11132489 3 2018-11-02 00:02:00
## 4 2.5430 18270120 4 2018-11-02 00:03:00
## 5 1.6415 11789150 5 2018-11-02 00:04:00
## 6 1.4798 10629456 6 2018-11-02 00:05:00
gg<-ggplot(res)
gg+geom_line(aes(x=candleDateTime2, y=openingPrice), color="black")+
# scale_x_datetime(labels = date_format("%Y-%m-%d %HH:%MM:%SS"), breaks=pretty_breaks(n = breaks_n)(as_datetime(c(min(unique(substr(res$candleDateTime,1,10))),max(unique(substr(res$candleDateTime,1,10)))))))+
labs(x = "Date", y = "Open Price")+
theme(axis.text.x = element_text(angle = 40, hjust = 1))
3 비트코인 그래프와 선형 트랜드 plot 결합
위 그래프에 선형 트랜드 Plot 을 합쳐보자. 빨간 줄이 잘 구해진 것 같다. 추세가 잘 반영된 듯 하다.
##회귀선을 구해보자
lm.res<-lm(data=res, formula=openingPrice ~ candleDateTime2)
#트랜드 파악
predicted_df <- data.frame(pred = predict(lm.res, res), time=res$candleDateTime2)
gg<-ggplot(res)
gg+geom_line(aes(x=candleDateTime2, y=openingPrice), color="black")+
## 트랜드 그래프
geom_line(color='red',data = predicted_df, aes(x=time, y=pred))+
labs(x = "Date", y = "Open Price")+
theme(axis.text.x = element_text(angle = 40, hjust = 1))
#트랜드를 제거한 비트코인 그래프 다음은 트랜드를 제거하는 것인데 res 에서 predicted_df 의 각각의 y 값을 빼보자.
res[['removed_trend']]<-res$openingPrice-predicted_df$pred
gg<-ggplot(res)
gg+ geom_line(aes(x=candleDateTime2, y=removed_trend), color="blue")+
labs(x = "Date", y = "Open Price")+
theme(axis.text.x = element_text(angle = 40, hjust = 1))
성공했다. 위처럼 트랜드를 제거하면 일반적인 변동성을 파악 할 수 있게 된다. 하지만 조심해야 할게 있다고 한다. 추세를 제거한 뒤 선형 분석을 하는 것은 ’허구적 상관관계’에 의해 각 변인끼리 높은 상관성을 보이기도 하므로 잘못된 의사결정을 초래 할 수 있다.
4 남은 과제
단일 트랜드를 제거하는 것이 아닌 복수의 트랜드를 찾아내 제거하는 작업이 남아있다. 이는 다음 포스팅에서 해보려 한다.
'정리 > 데이터 분석' 카테고리의 다른 글
[R] 비트코인 볼린져 밴드, 존버 Back Test (0) | 2019.10.27 |
---|---|
[R] 비트코인의 변동성을 분석해보자 (0) | 2018.11.11 |
[R] R과 C연동 (Rcpp 패키지 사용. R 속도 개선.) (0) | 2018.11.03 |
[R] R 초보도 할 수 있는 Selenium을 이용한 크롤링 (0) | 2018.10.25 |
[R] 극값 Local Maximum(Minimum) Point With R (0) | 2018.10.24 |