주식에서 일정 주기로 시세가 변동 하는 주식은 박스를 그려서 분석 할 수 있다. 하지만, 박스를 그려서 분석 할 수 있는 주식이 그다지 많지 않다.
시작에서 충격(Ex 코로나 팬더믹) 받지 않은 이상은 박스를 그려서 분석 할 수 있는 주식이 있는데, "대상"이라는 주식이 내가 찾은 유일한 주식인 것 같다.
히든 마르코프는 그리프 구간별로 state(상태) 값을 구분 지을 수 있는데, 이것에 대한 도메인 지식을 확실 하게 알면, 상태 값과, 상태의 구간 별 숫자를 알 수 있다.
히든 마르코프는 목적을 어디냐 에 따라 다른데, 주식이라면 수익이 목적일 것이다.
그러면, 어느 구간 때 구입 할 것이고, 팔 것 인지, 본인이 정하면 된다. 물론 여기에서는 가격과 주기가 있는데, 가격도 봐야 하고 주기도 봐야 한다.
지금 포스트에서는 가격적인 측면만 보고 다음 포스트에서는 주기를 보고 시뮬레이션 하는 방법에 대해 살펴 보겠다.
본 포스트는 통계 패키지 R에서 제공하는 "depmixS4" 위주로 설명할 것이기 때문에, 별도의 이론적인 지식을 보려면 아래 페이지를 클릭 하여야 한다.
https://rdmkyg.blogspot.com/2021/08/blog-post_25.html
앞에서와 같이 주식을 불러온다. 주식을 불러올때는 "tqk" 패키지에서 불러온다. "tqk"는 한국주식을 가져오는 패키지로서 주로 팍스넷을 크롤링 하기 때문에 속도가 늦다.
# 패키지 불러오기
set.seed(1004)
require(depmixS4)
require(ggplot2)
require(dplyr)
require(tqk)
require(forecast)
require(stats)
# 주식 가져오는 함수
data_get_fun <- function(days, stock_code){
# Data get from tqk
stock <- tqk_get(stock_code, from= days)
stock$종목코드 <- stock_code
# R은 데이터를 가져와 전저리 할때 단순함
stock <- stock %>%
arrange(date) %>%
mutate(전일비 = c(NA, diff(adjusted))) %>%
filter(!is.na(전일비)) %>%
mutate(전일시세 = adjusted - 전일비) %>%
mutate(등락율 = round((adjusted - 전일시세)/전일시세 * 100, 2))
return(stock)
}
# 분석 시작하고 싶은 일자
days = as.Date("2020-06-01")
# 대상 분석
daesang <- data_get_fun(days ,"001680")
# HMM 상태 코드 찾기
hmm.model <- depmix(adjusted ~1, family = gaussian(),
nstates = 5, data = daesang
)
model.fit <- fit(hmm.model)
post_probs <- posterior(model.fit)
# 모델 결과 보기
attr(model.fit, "response")
## [[1]] ## [[1]][[1]] ## Model of type gaussian (identity), formula: adjusted ~ 1 ## Coefficients: ## (Intercept) ## 26214.43 ## sd 341.936 ## ## ## [[2]] ## [[2]][[1]] ## Model of type gaussian (identity), formula: adjusted ~ 1 ## Coefficients: ## (Intercept) ## 25369.94 ## sd 133.1958 ## ##
## [[3]] ## [[3]][[1]] ## Model of type gaussian (identity), formula: adjusted ~ 1 ## Coefficients: ## (Intercept) ## 24861.77 ## sd 308.4827
## ## ## [[4]] ## [[4]][[1]] ## Model of type gaussian (identity), formula: adjusted ~ 1 ## Coefficients: ## (Intercept) ## 27376.15 ## sd 462.7684 ## ##
## [[5]] ## [[5]][[1]] ## Model of type gaussian (identity), formula: adjusted ~ 1 ## Coefficients: ## (Intercept) ## 28768.2 ## sd 659.8739
# group 그리프를 그리기 위한 데이터 프레임 작업
df <- data.frame( date = daesang$date,
adjusted = daesang$adjusted,
state = post_probs$state)
# 그래프 모양 보기
df %>%
ggplot(aes(x = date, y = adjusted, color = state)) +
geom_line()
대상 은닉 마르코프 그래프 (HMM) |
state가 5일 때 팔고, 중간색인 state가 3일 때 팔고, 1%의 세금과 수수료를 떼고, 11% 이상되는 수준에서, 매도 포지션을 취하는 것이 제일 좋다고 생각된다.
댓글 없음:
댓글 쓰기