본문 바로가기

00_돈굴리기/자동매매

자동매매 (젠포트) 다시 시작

반응형

작년에 한참 깨지고 나서 접었던 젠포트…
자동매매 전체로 이익이 나긴 했지만, 한동안 떨어지는 잔고를 보며, 자동매매는 환상이었을까? 생각하고 결국 그만두었는데, 최근에 머신러닝을 조금 배우면서, 한계점을 알게 되었고, 그 또한 모두 해결되진 않았지만, 적어도 한가지는 해결된거 같아 다시 시작했다. 오늘은 그에 대해 조금 기록용으로 남겨 놓으려고 한다.

- 백테스트의 심각한 문제

백테스트 자체는 죄가 없다. 하지만 머신러닝에서 말하는 training set 과 test set 의 개념을 보면, 백테스트는 필연적으로 과최적화(over fitting) 될 수 밖에 없는 문제를 가진다. 젠포트를 처음 시작하면 사람들은 백테스트 결과에 목을 맬 수 밖에 없다. 내가 알고 있는 팩터를 조합해서 가장 수익률이 잘 나오거나 혹은 MDD 가 가장 적은 전략을 만든다.
값이 수십개든 수천개든 이미 알고있는 조건 그리고  결과가 정해져 있는 상태에서 백테스트 결과는 (물론 한계는 있겠지만) 굉장히 높게 나온다. 누구는 일봉 백만 퍼센트를 뽑았다더라 하는 얘기가 전설처럼 들리지만, 그들도 실제 그 전략을 사용하지는 않는다. 왜 결과가 잘 나온 결과를 쓰지 않는가? 지금 생각하면 당연하지만, 그 결과는 '그 조건 하에서만' 잘 맞는 전략이기 때문이다.
나도 같이 젠포트를 하던 친구와 함께 이것 저것 조건을 바꿔가며 훌륭한 전략을 만들었었다.

이대로만 된다면,갑부다

데이터는 틱 데이터를 이용했으므로 매우 정확하다. 화면에 표시는 안했지만 거래량이 꽤 좋은 종목들도 했기 때문에 금액이 커지면서 생기는 문제도 크지 않았을것 같다. 매년 166% 의 복리 수익으로 고작(?) 4년 8개월동안 돌렸는데 수익률은 9983% 가 나왔다. MDD 도 11% 정도로 심리적으로도 버틸만한 수치다.
이 전략을 실제 키움증권 계좌와 연결해서 자동매매가 되게 했었는데, 초기에는 결과가 좋았지만 나중엔 처참하게 망했다. 중간에 그만두긴 했지만 만약 계속 했다면 어땠을까? 확인!

오우 쒯

5100% 로 훌륭하지 않냐고? 절대 그렇지 않다. 누적수익률 차트를 보면, 거의 만% 가까이 오르고 난 이후(2021 년 9월 13일까지 결과) 한참 떨어졌다. 수익률이 9980% 에서 5100% 로 떨어진 것이니, 만약 저 전략을 고점에 들어온 사람이라면 반토막 가까이 난 상황이다. MDD 43% 라는 수치가 그것을 말해주고 있다. 미래에 다시 오를 수도 있겠지만, MDD 43% 전략이라면, 아마 조금만 포트폴리오를 아는 사람이라면 절대 선택하지 않을 전략이다.

- 그래서 가상으로 돌리는 과정이 필수.

결국 내가 만든 전략이 시장에서 과거처럼 잘 먹히는지 아닌지 확인해보는 과정이 반드시 필요하다. 내가 만든 전략이 미래에도 잘 먹히는지 아닌지 확인을 해야 한다. 그래서 아래 그림처럼 과거 데이터를 억지로 맞춘 과정이 아닌 것임을 증명 혹은 확인할 필요가 있다.

이렇게 그려놓고 R^2= 1 이라고 하는 사람은 없겠지

그래서 젠포트에는 가상매매라는 환경을 제공한다. 진짜 돈이 들어가는 것은 아니지만 들어갔다고 가정하고 과거 전략을 현재부터 적용해보는 것이다.
하지만 이것의 가장 큰 약점?은
이렇게 검증하려면 실제 리얼타임의 시간이 필요하다는 것이다. 2023년까지 데이터로 전략을 만들고 1년간 검증을 하려면 실제로 1년의 시간이 필요하다는 것이다. (....) 뭐 정말 전략을 잘 만들어서 결과가 좋다면 다행이지만, 그렇지 않으면 1년을 그대로 날리게 되는 문제가 있다. 뭐 사람에 따라서는 전략을 수십개 만들어서 수십개를 다 가상으로 돌리는 방법도 있을 수 있지만, 그렇게 되면 또 비용이 문제가 될 수 있다

-그럼 어떻게 하면 될까?

다시 머신러닝으로 돌아와서... 대부분의 머신 러닝 알고리즘은 training set 와 test set 을 나눈다. training set 로 모델을 만들고, 그 모델이 잘 맞는지 test set 으로 검증을 한다. 비율은 7:3 혹은 8:2 를 많이 활용한다.
그렇다면, 이것을 젠포트 백테스트에 적용을 시켜보면, 현재 데이터는 2017년부터 존재하니 오늘기준으로 6.5년 정도의 데이터가 있는 것이고, 70%만 training set 에 활용한다면, 대략 4.6년 정도의 데이터만 써서 모델을 만드는 것이다. (백테스트야 뭐 저렴하게 할 수 있으니 수십개 돌려봐도 상관없다.)
그리고 괜찮은 결과들이 나오면 나머지 기간을 포함해서 (전략을 수정하지 않고!!) 다시 테스트를 돌리는 것이다.
가능하다면 앞뒤말고 기간을 랜덤하게 뽑아서 training set 을 선택하면 좋을것 같다. 주식이 잘 나가는 시절, 금융위기 시절, 코로나 시절, 금리 인상기 등등 적절하게 배분해서 모델을 학습하고 그것을 전체 기간으로 테스트 한다던가..... 하지만 지금은 그런 기능이 없으니 그냥 시계열로 자를 수 밖에 없는 듯.
결론, 현재 백테스트는 2021년 9월까지 정도만의 데이터로 하고나서, 검증은 남은 구간으로 한다.

- 사족 : 또다른 문제

하지만 문제는 또 있다. 시장 상황, 시장 참여자는 계속 바뀐다는 것이다. 일반적인 머신 러닝은 동일 조건하에 모델에 들어가는 parameter 값이 바뀌었을때 결과가 바뀌는 것을 이용해서, parameter 값이 임의의 값이 들어갔을때도 결과가 잘 나오게 만들어주는 것인데, 주식시장은 참여자도 계속 바뀌고 참여주체도 바뀌고 주변 경제 상황도 계속 바뀐다. 그런 상황에 모두 잘 맞는 모델이 과연 있을까? 하는 근본적인 문제가 있긴 하다.
다만 시간이 길어지면  (마치 S&P 500 에 장기투자하면 성공한다는 것처럼) 수익이 나기를 바랄 뿐이다.
------------------------------------------------------------------------------------------------------------------------------------
 
결론은 났는데, 막상 젠포트 페이지에 들어가니 수식을 만드는 방법도 거의 다 까먹은걸 깨달았다. 다시 워밍업을 해야하는데, 어? 작년에 넣어둔 가상계좌 성적을 보니 나쁘지 않았다.

10개월 하고 2주동안 리얼타임 검증...

누적 수익률 39% (1년 환산시 47%). MDD 8.6% ...
하지만 실제로 돌렸으면 초반 지지부진한 구간을 버틸 수 있었을까? 하는 생각도 든다.
(최근 6개월이 35% 인데, 10개월이 39% 니까. 초기 4개월은 이익이 고작 4% 였던것...)
....
아까 봤던 과최적화 166% 까지에는 못미치지만 이 정도면 굿이라고 지인들이 얘기해줘서 일단 실전 포트에 넣긴 했는데,
지난주 코스닥 떡락으로 MT에 걸려서 당분만 매매는 돌지 않을것 같다. (다행이라고 생각한다)
 

반응형