[퀀트] n일 고가 돌파 후 추이/고가 돌파는 유효한가?
주식 고가 돌파
일반적으로 많은 사람들이 주식 고가 돌파에 거래를 시작한다. 예를 들면 터틀 전략은 20일 고가 돌파시 매수하고 n일 저가 하양 돌파시 매도한다. 이는 돌파가 유효하기 때문일 것이다. 그런데 나는 주가 데이터를 직접 분석할 수 있다는 것을 알게 된 이후 모든 정보의 진실 여부를 판단하는 데에 관심을 가지기 시작했다.
이를테면 일반적으로 진실이라 여겨지는 주가-이동평균선 돌파는 검토상 모든 환경에서 적용되는 사실이 아니라는 것을 알게 되었다. 다시 말해서 아무 이동평균선 돌파에 매수했다가 매도하기를 반복하면 햄스터한테 매매를 시키거나, 동전을 던져서 홀짝으로 매매 하는 것과 큰 차이가 없다는 것이다.
이것에 충격을 받아 이번에는 n일 고가 돌파 후 추이를 검토해봤다.
물론 나는 아직(아마 평생) 전문가가 아닐 것이기 때문에 그저 프로그래밍을 조금 아는 사람의 재미 정도로 봐주길 바라며, 검토에 사용하는 데이터가 적기에 흐름을 파악하는 데에만 유용할 뿐 실질적 전략을 세우기에는 미미하리라는 것을 미리 밝히는 바이다.
사용한 주가 데이터는 50개이며, 검토한 기간은 2년이다. 사실상 내가 짠 코드로 더 큰 기간과 더 많은 데이터를 확인 할 수는 있으나, 내 CPU가 감당하지 못했다.
만일 실질적으로 이것으로 무언가 전략을 세워보기를 원한다면 직접 코드를 돌려보거나(설치해야 할 것이 많기에 꽤나 번거로울 것이다.) 댓글을 적으면 입맛에 맞게 코드를 재작성하여보겠다.(이 과정에서 나는 공부가 되고, 댓글 작성자는 단 몇 글자로 몇 시간을 아낄 수 있으니 상부상조(?)일 것이다.)
https://doompa.tistory.com/328
아래는 내가 작성한 파이썬 코드이다. 잘못된 점이 있을 시 댓글로 알려주기를 간곡히 부탁하는 바이다.
https://github.com/fkthfvk112/quant/tree/main/n%EC%9D%BC_%EA%B3%A0%EA%B0%80%EB%8F%8C%ED%8C%8C
고가 돌파 결과
거두절미하고 내가 도출해낸 결과들은 아래와 같다. 결과값은, 예를 들어 20일 고가 돌파 추이 테이블의 1일 후 컬럼들은, 20일 고가돌파가 이루어진 날(20일 내의 최고 종가보다 금일 시가가 낮은 상태에서 금일 종가가 20일 내 최고 종가보다 높아짐) 매수하여 1일 후 매도하였을 시의 데이터이다.
20일 고가 돌파 추이 | 날짜(2020, 1, 1 ~2022-02-06) | |||
1일 후 | 3일 후 | 7일 후 | 30일 후 | 60일 후 |
최대값 29.873 | 최대값 53.486 | 최대값 94.929 | 최대값 128.745 | 최대값 357.399 |
최소값 -29.916 | 최소값 -31.695 | 최소값 -31.695 | 최소값 -58.72 | 최소값 -61.311 |
평균 0.3820504017531049 | 평균 0.76353250547845 | 평균 0.8616099342585848 | 평균 2.2958392987582155 | 평균 5.435214024835649 |
중위수 0.0 | 중위수 -0.104 | 중위수 -0.424 | 중위수 -0.328 | 중위수 0.481 |
총 돌파 데이터 개수 1369 | 총 돌파 데이터 개수 1369 | 총 돌파 데이터 개수 1369 | 총 돌파 데이터 개수 1369 | 총 돌파 데이터 개수 1369 |
상승한 개수 657 | 상승한 개수 647 | 상승한 개수 628 | 상승한 개수 664 | 상승한 개수 693 |
하락한 개수 712 | 하락한 개수 722 | 하락한 개수 741 | 하락한 개수 705 | 하락한 개수 676 |
오를 확률 0.4799123447772096 | 오를 확률 0.47260774287801316 | 오를 확률 0.4587289992695398 | 오를 확률 0.4850255661066472 | 오를 확률 0.506208911614317 |
떨어질 확률 0.5200876552227903 | 떨어질 확률 0.5273922571219869 | 떨어질 확률 0.5412710007304602 | 떨어질 확률 0.5149744338933528 | 떨어질 확률 0.493791088385683 |
상승한 데이터의 평균 3.190237442922375 | 상승한 데이터의 평균 5.328808346213299 | 상승한 데이터의 평균 7.400154458598722 | 상승한 데이터의 평균 15.241987951807216 | 상승한 데이터의 평균 23.7881515151515 |
상승한 데이터의 중위수 2.026 | 상승한 데이터의 중위수 3.406 | 상승한 데이터의 중위수 4.593 | 상승한 데이터의 중위수 9.844000000000001 | 상승한 데이터의 중위수 15.213 |
하락한 데이터의 평균 -2.209212078651686 | 하락한 데이터의 평균 -3.3275110803324117 | 하락한 데이터의 평균 -4.6798286099865045 | 하락한 데이터의 평균 -9.897412765957444 | 하락한 데이터의 평균 -13.379261834319507 |
하락한 데이터의 중위수 -1.5575 | 하락한 데이터의 중위수 -2.451 | 하락한 데이터의 중위수 -3.659 | 하락한 데이터의 중위수 -8.636 | 하락한 데이터의 중위수 -11.5315 |
60일 고가 돌파 추이 | 날짜(2020, 1, 1 ~2022-02-06) | |||
1일 후 | 3일 후 | 7일 후 | 30일 후 | 60일 후 |
최대값 29.873 | 최대값 50.396 | 최대값 94.929 | 최대값 128.745 | 최대값 312.955 |
최소값 -29.916 | 최소값 -31.695 | 최소값 -31.695 | 최소값 -58.72 | 최소값 -61.311 |
평균 0.5988458781362009 | 평균 1.0643010752688156 | 평균 1.2925997610513746 | 평균 2.4738864994026275 | 평균 5.812074074074076 |
중위수 0.0 | 중위수 0.0 | 중위수 -0.311 | 중위수 0.0 | 중위수 -0.242 |
총 돌파 데이터 개수 837 | 총 돌파 데이터 개수 837 | 총 돌파 데이터 개수 837 | 총 돌파 데이터 개수 837 | 총 돌파 데이터 개수 837 |
상승한 개수 413 | 상승한 개수 409 | 상승한 개수 395 | 상승한 개수 412 | 상승한 개수 410 |
하락한 개수 424 | 하락한 개수 428 | 하락한 개수 442 | 하락한 개수 425 | 하락한 개수 427 |
오를 확률 0.4934289127837515 | 오를 확률 0.4886499402628435 | 오를 확률 0.47192353643966545 | 오를 확률 0.4922341696535245 | 오를 확률 0.48984468339307047 |
떨어질 확률 0.5065710872162486 | 떨어질 확률 0.5113500597371565 | 떨어질 확률 0.5280764635603346 | 떨어질 확률 0.5077658303464755 | 떨어질 확률 0.5101553166069295 |
상승한 데이터의 평균 3.6477191283292973 | 상승한 데이터의 평균 6.000415647921765 | 상승한 데이터의 평균 8.503129113924054 | 상승한 데이터의 평균 15.918832524271828 | 상승한 데이터의 평균 26.091109756097538 |
상승한 데이터의 중위수 2.305 | 상승한 데이터의 중위수 4.048 | 상승한 데이터의 중위수 5.397 | 상승한 데이터의 중위수 10.4755 | 상승한 데이터의 중위수 16.7085 |
하락한 데이터의 평균 -2.3709292452830204 | 하락한 데이터의 평균 -3.652686915887851 | 하락한 데이터의 평균 -5.151199095022627 | 하락한 데이터의 평균 -10.559802352941176 | 하락한 데이터의 평균 -13.659599531615921 |
하락한 데이터의 중위수 -1.6575 | 하락한 데이터의 중위수 -2.742 | 하락한 데이터의 중위수 -4.044 | 하락한 데이터의 중위수 -9.091 | 하락한 데이터의 중위수 -12.048 |
120일 고가 돌파 추이 | 날짜(2020, 1, 1 ~2022-02-06) | |||
1일 후 | 3일 후 | 7일 후 | 30일 후 | 60일 후 |
최대값 29.87 | 최대값 50.396 | 최대값 94.929 | 최대값 128.745 | 최대값 312.955 |
최소값 -15.129 | 최소값 -19.463 | 최소값 -31.313 | 최소값 -58.72 | 최소값 -61.311 |
평균 0.6396274834437082 | 평균 1.1389519867549653 | 평균 1.5200264900662257 | 평균 2.5408923841059594 | 평균 6.925938741721856 |
중위수 0.0 | 중위수 0.0505 | 중위수 -0.419 | 중위수 -0.295 | 중위수 -0.3085 |
총 돌파 데이터 개수 604 | 총 돌파 데이터 개수 604 | 총 돌파 데이터 개수 604 | 총 돌파 데이터 개수 604 | 총 돌파 데이터 개수 604 |
상승한 개수 300 | 상승한 개수 302 | 상승한 개수 280 | 상승한 개수 294 | 상승한 개수 295 |
하락한 개수 304 | 하락한 개수 302 | 하락한 개수 324 | 하락한 개수 310 | 하락한 개수 309 |
오를 확률 0.4966887417218543 | 오를 확률 0.5 | 오를 확률 0.46357615894039733 | 오를 확률 0.4867549668874172 | 오를 확률 0.48841059602649006 |
떨어질 확률 0.5033112582781457 | 떨어질 확률 0.5 | 떨어질 확률 0.5364238410596026 | 떨어질 확률 0.5132450331125827 | 떨어질 확률 0.5115894039735099 |
상승한 데이터의 평균 3.764863333333332 | 상승한 데이터의 평균 6.304490066225163 | 상승한 데이터의 평균 9.640328571428578 | 상승한 데이터의 평균 16.74459863945577 | 상승한 데이터의 평균 28.85266101694914 |
상승한 데이터의 중위수 2.5505 | 상승한 데이터의 중위수 4.2475 | 상승한 데이터의 중위수 6.1845 | 상승한 데이터의 중위수 10.553 | 상승한 데이터의 중위수 17.808 |
하락한 데이터의 평균 -2.4444868421052655 | 하락한 데이터의 평균 -4.026586092715233 | 하락한 데이터의 평균 -5.49751851851852 | 하락한 데이터의 평균 -10.929719354838715 | 하락한 데이터의 평균 -14.007339805825257 |
하락한 데이터의 중위수 -1.85 | 하락한 데이터의 중위수 -3.135 | 하락한 데이터의 중위수 -4.678 | 하락한 데이터의 중위수 -9.178999999999998 | 하락한 데이터의 중위수 -12.644 |
52주(365일)고가 돌파 추이 | 날짜(2020, 1, 1 ~2022-02-06) | |||
1일 후 | 3일 후 | 7일 후 | 30일 후 | 60일 후 |
최대값 29.87 | 최대값 50.396 | 최대값 94.929 | 최대값 128.745 | 최대값 312.955 |
최소값 -15.129 | 최소값 -21.821 | 최소값 -31.313 | 최소값 -58.72 | 최소값 -61.311 |
평균 0.6341728971962612 | 평균 1.1312009345794405 | 평균 1.4458387850467296 | 평균 3.317214953271026 | 평균 7.979808411214946 |
중위수 0.0 | 중위수 0.0 | 중위수 -0.28049999999999997 | 중위수 0.244 | 중위수 -0.872 |
총 돌파 데이터 개수 428 | 총 돌파 데이터 개수 428 | 총 돌파 데이터 개수 428 | 총 돌파 데이터 개수 428 | 총 돌파 데이터 개수 428 |
상승한 개수 213 | 상승한 개수 211 | 상승한 개수 204 | 상승한 개수 218 | 상승한 개수 207 |
하락한 개수 215 | 하락한 개수 217 | 하락한 개수 224 | 하락한 개수 210 | 하락한 개수 221 |
오를 확률 0.4976635514018692 | 오를 확률 0.4929906542056075 | 오를 확률 0.4766355140186916 | 오를 확률 0.5093457943925234 | 오를 확률 0.48364485981308414 |
떨어질 확률 0.5023364485981309 | 떨어질 확률 0.5070093457943925 | 떨어질 확률 0.5233644859813084 | 떨어질 확률 0.49065420560747663 | 떨어질 확률 0.5163551401869159 |
상승한 데이터의 평균 3.868356807511735 | 상승한 데이터의 평균 6.696739336492886 | 상승한 데이터의 평균 9.436299019607844 | 상승한 데이터의 평균 18.099954128440363 | 상승한 데이터의 평균 31.78770531400967 |
상승한 데이터의 중위수 2.663 | 상승한 데이터의 중위수 4.814 | 상승한 데이터의 중위수 5.720000000000001 | 상승한 데이터의 중위수 11.317499999999999 | 상승한 데이터의 중위수 19.891 |
하락한 데이터의 평균 -2.569925581395352 | 하락한 데이터의 평균 -4.280451612903228 | 하락한 데이터의 평균 -5.8311874999999995 | 하락한 데이터의 평균 -12.028676190476208 | 하락한 데이터의 평균 -14.319895927601818 |
하락한 데이터의 중위수 -2.083 | 하락한 데이터의 중위수 -3.501 | 하락한 데이터의 중위수 -4.7575 | 하락한 데이터의 중위수 -10.684000000000001 | 하락한 데이터의 중위수 -12.867 |
개인적인 해석
위의 데이터를 보고 나는 다소 재미를 느꼈다. 며칠 고가 돌파이든 간에 도출된 데이터 상에서는 떨어질 확률이 오를 확률보다 크다. 즉 고가 돌파한 당일 주식을 매수하면 다음 날 매수가보다 주가가 떨어져 있을 확률이 더 크다는 것이다.
이 오를 확률과 떨어질 확률은 n일이 지나도 대체로 같은 형태로 유지됨을 보인다. 즉, 매수했다가 존버하여도 대체로 가지고 있던 주식이 떨어졌을 확률이 크다는 것이다.(단 한 번이라도 n%오를 확률로는 계산하지 않았고 단순히 n일 후의 가격으로 비교하였다.)
그런데도 재밌는 것이 바로, 평균가격은 모든 경우 +라는 것이다. 즉, 상승된 개수보다 하락한 개수가 더 많지만, 상승폭이 하락폭을 압도하였다는 재미있는 결과가 나온다. 즉 확률적으로는 하락이 우위에 있지만, 상승폭과 하락폭을 비교하면 상승폭이 하락폭보다 크다. 무작위 홀짝이었던 이동평균선 돌파와는 차이를 보인다.
또한 n일 종가 돌파의 n값이 클수록 대체로 수익률도 올라가는 경향이 있음을 확인하였다. 이는 내가 믿어오던 그대로 매물대의 방해가 상대적으로 적은 덕분이지 않을까 생각한다.
개인적으로는 이 점을 이용하여 매매를 할 수 있지 않을까 싶다. 예를 들어 손절가를 조절해가며 수익을 극대화하는 방식이다.
다음 번에는 n일 이동평균선을 하양 돌파할 시 종가 매도하는 전략을 사용하면 수익이 어떻게 될지를 확인해 봐야겠다.