2017년 수익을 내고서도 실패로 평가되었던 투자가 있습니다.
돌이켜 보면 여유있게 수익을 낼 수 있었던 상황을 놓쳤던 것 같습니다.
당시 이마트는 전국 맛집의 음식을 즉석식품화한 '피코크'로 인기를 끌고 있었습니다.
( 출처 : 비즈니스 와치 )
2회에 걸친 투자를 진행하였는데, 적당한 가격에 매수를 하여 10~30% 정도의 수익을 내고 파는 전략을 세웠습니다. 1차 투자는 1월에 18만원에 매수하여, 4월에 23만 5천원에 매도하여 약 30%의 수익을 냈습니다. 그리고 2차 투자는 매도 후 20만5천원 근처에 걸어둔 자동감시에 의해 9월 매수가 되면서 시작되었습니다. 2차 투자시에는 작게 10%만 수익을 보겠다는 생각 (아마도 지난번 고점을 생각했던 것 같습니다.)으로 10월~11월경에 22만 5천원 근처에 매도로 마무리지었습니다. 약 9% 정도의 수익이었습니다.
그런데, 그후 주가는 계속상승하여 2018년 초에는32만 3500원으로 최고점을 찍었습니다. 2차 투자에서 최고점까지 보유했다면 약 58%의 수익이었습니다.
'니콜라스 다비스'의 박스이론 의 방식으로 매도시점을 확인해봤습니다.
주가의 5일 이동평균(MA - Moving Average) 대비 2*(표준편차) 이상 하락한 날을 찾았습니다.
2018년 1월 29일(월)에 7.4% 하락하여 29만 9천원에 마감하였습니다.
이 가격에 매도를 했다면 (299000 - 205000)/205000 = 45.9(%) 수익이었습니다.
40%에 가까운 수익을 놓친 아까운 경험이었습니다.
매도 시점을 시각화해 봤습니다.
윗쪽 녹색선은 주가 변동을 나타냅니다. 그리고, 아랫쪽 선은 이동평균 대비 주가변동을 표시하였습니다. 선이 빨간색이면 하락, 파란색이면 상승을 의미합니다. 위에서 계산된 29일의 주가는 최고치의 약 94%에 해당하는 것으로 좋은 매도시점이 될 수 있었던 것 같습니다.
이마트의 경우를 보면 주식의 매수는 '기본적 분석', 매도는 '기술적 분석'에 의해 결정하는 것이 좋은 것 같습니다.
2019년에는 매도시점 결정에 대한 규칙을 정해볼까 합니다. 참고로 매도시점 확인을 위해 사용한 R 프로그램을 아래에 적습니다.
( 매도 시점 확인을 위한 R 스크립트 )
---------------------------------------------------------
################# Trailing Stop 유효성 검사
library(quantmod)
library(dplyr)
my_symbol <- "139480.KS" ## 이마트
src_loc <- "yahoo"
from_day <-"2017-01-01"
to_day <- "2018-12-30"
# Yahoo 에서 이마트 주가 정보 가져오기
output <- getSymbols(Symbols=my_symbol, src = src_loc, from = from_day, to = to_day, auto.assign = FALSE)
str(output)
output
# 컬럼명 변경
names(output) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")
# 고점 대비 변화
output$Change <- output$High - output$Low
output$Change_r <- output$Change/output$High
# NA 제거
output_clean <- na.omit(output)
# 최고변화 확인
max(output_clean$Change_r)
y <- output_clean
# 변화의 평균과 표준편차 구하기
mu <- mean(y$Change_r)
sd <- sd(y$Change_r)
# 최소 매도 가격
min_emart <- 220000
################ moving average test
library(stats)
ma <- function(x, n=5){
stats::filter(x, rep(1/n,n), sides = 1)
}
y <- data.frame( output )
# 컬럼 이름 변경
names(y) <- c("Open", "High", "Low", "Close", "Volume", "Adjusted")
str(y)
rownames(y)
# Moving Average 계산 : 5일 ==> 1주일 거래일 수
m_day <- 5
y$ma <- ma(y$Close, n= m_day)
y <- data.frame( na.omit(y) )
str( y )
# MA(Moving Average) 대비 저점의 변화 확인 ==> 매도를 위함..
# 매수를 위해서는 고점과 비교해야 할 듯.
y$Change_ma <- y$ma - y$Low
y$Change_r_ma <- abs( y$Change_ma/y$ma)
y <- na.omit( y)
# MA 대비 변화량의 평균과 분산 구하기
mu <- mean(abs(y$Change_r_ma))
sd <- sd(y$Change_r_ma)
# 시계열의 rowname 은 날짜...
y$date <- rownames(y)
y_close_max <- y[which.max(y$Close),]$Close
y$price_r_2_max <- y$Close/y_close_max
# 2 * (표준편차 )
y %>% filter( Open > min_dzon & y$Change_ma < 0 & Change_r_ma > mu + 2 * sd) %>%
select("date", "Close", "ma", "Change_ma", "Change_r_ma", "price_r_2_max")
### 시각적으로 확인해 보자~~
library(ggplot2)
library(reshape2)
y %>% ggplot(aes(x = as.Date(date), y= Change_r_ma, color=Change_ma)) +
geom_line() +
scale_colour_gradientn(colours=rainbow(2)) +
geom_line(aes(y=y$Close/(10* max(y$Close))), color="green")
------------------------------------------------------------------------