트레이드 전략 - 위꼬리가 긴 하루 #4
'트레이드 전략 - 위꼬리가 긴 하루'의 마지막 글입니다.
제목에 비해 별 내용이 없는데라고 생각하실 분들도 있을듯 싶네요.
다양한 방법의 하나로 봐주시면 감사하겠습니다.
앞에서 2020년 10월 한달 데이터에 대해서 위꼬리 전략을 적용했을때, TE(Trading Edge)를 구해보니 좋지 않았습니다.
여기서는 기간 조건을 제거하고 모든 데이터에 대해 위꼬리 전략을 적용해봅니다.
간단합니다. 앞의 글의 SQL에서 일자 조건만 제거하면 됩니다. (불행히도, 현재 사용하는 데이터에는 2019년 부터 2021년까지의 데이터만 존재합니다.)
아래와 같이 SQL을 작성하고 실행해봅니다.
WITH R01 AS(
SELECT T2.STK_CD ,T2.DT BUY_DT ,T2.C_PRC BUY_PRC ,T2.H_L ,T2.UP_TAIL ,T2.H_L_CHG ,T2.UP_TAIL_RT
,T3.DT SELL_DT ,T3.C_PRC SELL_PRC
,ROUND((T3.C_PRC - T2.C_PRC) / T2.C_PRC * 100,2) PROF_RT # 3일후 매도시 수익률
FROM (
SELECT T1.STK_CD
,T1.DT
,T1.C_PRC
,T1.H_PRC - T1.L_PRC H_L # 고가-저가 길이
,T1.H_PRC - GREATEST(T1.C_PRC,T1.O_PRC) UP_TAIL # 위꼬리 길이
,ROUND((T1.H_PRC - T1.L_PRC) / T1.L_PRC * 100,2) H_L_CHG # 위꼬리 등락률
,ROUND((T1.H_PRC - GREATEST(T1.C_PRC,T1.O_PRC))
/ (T1.H_PRC - T1.L_PRC) * 100,2) UP_TAIL_RT # 위꼬리 비율
,T1.STK_DT_NO
FROM MYSTKDB.HISTORY_DT T1
WHERE 1=1
# AND T1.DT >= STR_TO_DATE('20201001','%Y%m%d') # 일자 조건 제거
# AND T1.DT < STR_TO_DATE('20201101','%Y%m%d') # 일자 조건 제거
) T2
INNER JOIN MYSTKDB.HISTORY_DT T3 # 위꼬리 발생 3일 후 주가 데이터를 조인
ON (T3.STK_CD = T2.STK_CD AND T3.STK_DT_NO = T2.STK_DT_NO + 3)
WHERE T2.H_L_CHG >= 10 # 고가-저가 등락률이 10% 이상
AND T2.UP_TAIL_RT >= 90 # 위꼬리 비율이 90% 이상
ORDER BY PROF_RT DESC
)
SELECT T2.*
,ROUND((T2.W_PROF_RT * T2.W_RT) - (ABS(T2.L_PROF_RT)* T2.L_RT),2) TE
FROM (
SELECT DATE_FORMAT(T1.BUY_DT, '%Y') YY # --> 년별
,COUNT(*) TRD_CNT
,SUM(CASE WHEN T1.PROF_RT >= 1 THEN 1 END) W_CNT
,ROUND(AVG(CASE WHEN T1.PROF_RT >= 1 THEN T1.PROF_RT END),2) W_PROF_RT
,ROUND(SUM(CASE WHEN T1.PROF_RT >= 1 THEN 1 END) / COUNT(*) * 100, 2) W_RT
,SUM(CASE WHEN T1.PROF_RT < 1 THEN 1 END) L_CNT
,ROUND(AVG(CASE WHEN T1.PROF_RT < 1 THEN T1.PROF_RT END),2) L_PROF_RT
,ROUND(SUM(CASE WHEN T1.PROF_RT < 1 THEN 1 END) / COUNT(*) * 100, 2) L_RT
FROM R01 T1
GROUP BY DATE_FORMAT(T1.BUY_DT, '%Y') # --> 년별
) T2
ORDER BY T2.YY ASC
;
YY TRD_CNT W_CNT W_PROF_RT W_RT L_CNT L_PROF_RT L_RT TE
------ --------- ------- ----------- ------- ------- ----------- ------- --------
2019 333 176 8.68 52.85 157 -3.67 47.15 285.70
2020 382 166 8.90 43.46 216 -6.75 56.54 5.15
2021 291 132 8.16 45.36 159 -5.60 54.64 64.15
결과를 보기 좋게, 년별로 집계헀습니다.
결과를 보면, 2019년에는 TE가 매우 높았으나, 2020년에는 다소 낮은 것을 알 수 있습니다.
비록 3년간의 데이터지만, 년별로 TE를 보면 마이너스가 아니기 때문에, 해당 전략은 좀 더 다듬고 연구해 볼 필요가 있지 않나 생각이 듭니다.
아래와 같은 내용을 추가로 고려해 볼 필요가 있습니다.
- 종목의 주가(저가주를 제외할까? 저가주만 노릴까?)
- 거래량(거래량이 폭발적이었는가)
- 추세(이평선이 상승 추세인가?)
- 시장의 추세(지수가 상승 중인가?)
- 손절과 익절
- 보유 기간을 늘리면? 줄이면?
- 위꼬리의 비율을 조절한다면?
위와 같은 내용을 추가하는 과정에서 너무 과최적화가 되지 않도록 주의가 필요합니다.
조건이 많아질수록 이도 저도 아닌 결과가 나오는 경우가 많드라고요.
적절하게 조건을 추가해서 더 좋은 TE가 만들어지도록 노력을 해보고, 가능성이 있다면, 파이썬으로 정밀하게 트레이딩을 시뮬레이션 해봐야겠죠.
그리고, TE가 높다고 해서 항상 수익이 아니죠. 마이너스. 구간이 언제나 존재합니다. 그러한 구간에 대한 대응 전략과, 생존 전략이 없다면 트레이드는 금기가 아닐까 싶습니다.
준비한 글은 여기까지입니다. 마지막으로 한 번더!^^;;;
절대 주식 투자나 종목 매매를 권장하는 글이 아닙니다. 기술적인 설명을 위한 글이며, 이 글을 참고해 발생한 투자 손실에는 그 누구도 절대 책임지지 않습니다.
감사합니다.
'데이터분석 > TradeOptimizer' 카테고리의 다른 글
볼린저밴드 트레이드-Ver01 전략 (0) | 2023.08.14 |
---|---|
ATR(Average True Range)을 이용한 손절(Stop Loss) 설정 (0) | 2023.08.11 |
트레이드 전략 - 위꼬리가 긴 하루 #3 (0) | 2022.12.02 |
트레이드 전략 - 위꼬리가 긴 하루 #2 (0) | 2022.12.02 |
트레이드 전략 - 위꼬리가 긴 하루 #1 (0) | 2022.12.02 |
PyKRX - 주가 이력 정보 DB화하기 (0) | 2022.11.29 |
PyKRX - 주가 이력 정보 가져오기 (0) | 2022.11.25 |
Python 기초 - 날짜 다루기(문자에서 날짜로, 날짜에서 문자로, 날짜 계산) (0) | 2022.11.24 |