본문 바로가기

시스템 트레이딩/트레이딩 이야기

[주식투자] 백테스트 도중 과최적화를 피하는 방법

 안녕하세요 이노도리입니다. 이제 어제를 끝으로 올해 회사생활은 끝이 났습니다. 이제 2주간 회사는 셧다운에 들어가게 됐는데요, 저는 다음 주에는 2박 3일간 지인과 뉴질랜드 북섬으로 여행을 다녀올 생각입니다. 그리고 남은 기간 동안은 요즘 죽 쑤고 있는 전략 2를 대체할 새로운 전략을 개발할 예정입니다 :)

 

 아마도 백테스트를 하시는 분들은 과최적화라는 말을 많이 들어봤을 거라고 생각합니다. 제가 정의하는 과최적화란 전략의 각종 파라미터를 조정해서 이미 알고 있는 시장의 결과에 끼워 맞추는 것이라고 생각합니다. (머신러닝에서 말하는 과최적화도 이와 비슷합니다.) 이렇게 과최적화가 발생하게 되면 알고 있는 결과에 파라미터를 끼워 맞춘 것이기 때문에 보통 미래시장에 대해서는 대응을 실패하게 되고 결국 백테스트와는 다르게 손실을 볼 수 있게 됩니다. 그렇다면 이런 과최적화를 판단하고 막는 방법은 무엇이 있을까요? 제가 사용하는 방법을 공유해드릴까 합니다. (제 개인적인 생각이다 보니 틀릴 수도 있음을 미리 밝힙니다.)

 

1. 머신러닝처럼 테스트 데이터와 학습 데이터 구분

  • 데이터를 구분해서 하나의 데이터는 전략 개발용으로 사용하고 나머지는 전략을 개발한 후 전략이 무너지지 않는지 판단합니다. 

머신러닝처럼 데이터를 나눠 개발용 테스트용으로 분류하기

2. 거래횟수

  • 전략 개발 시 거래 횟수가 최대한 늘어나는 방향으로 개발합니다. 거래횟수가 적다는 것은 그만큼 파라미터를 통해 많은 경우의 수를 잘라냈다는 뜻입니다. 결국 거래횟수가 적을수록 과최적화 됐을 가능성이 높다는 말이게 됩니다. (또한 거래 횟수를 늘리기 위해서는 당연히 검증할 수 있는 데이터가 많아야 합니다. )
  • 제 경우에는 이렇게 개발한 전략을 백테스트하면서 각종 통계를 내보기도 한답니다.

백테스트 도중 기록된 수익률을 히스토그램으로 만들어봅니다. 여기서도 알파를 찾아내는게 가능하답니다.

 

3. 파라미터 조정

  • 만약 탄탄한 전략이라면 어떤 조정 가능한 파라미터에 대해서 비슷한 경향의 결과를 보여줘야 합니다. 예를 들어 변동성 돌파에서 k 값을 예로 들어보면 k값이 바뀌더라도 수익 곡선은 우상향 그래프를 보여줘야 합니다. 그렇지 않다면 제 개인적인 생각으로는 그 파라미터는 이미 지나간 시장에 맞춰진 최적화된 값입니다. 

k값을 바꿔가면서 테스트해도 이런식으로 비슷한 경향이 나와야 한다고 생각합니다. 

 

 저는 이러한 기준을 잡고 백테스트를 하면서 전략 개발을 해나가는데요, 전에는 이런 기준이 없이 파라미터를 바꿔가면서 백테스트의 성과를 좋게 만들고 겨우 6개월치 데이터에서 300% 수익을 냈다면서 좋아했던 기억이 있습니다 ㅎㅎ 그리고 당연히 그 전략으로 실거래를 했다가 백테스트 때처럼 성과가 나지 않아 결국 전략을 폐기하고 우울해했던 기억이 있습니다. 이러한 내용들이 실제로 전략 개발을 하시는 분들에게 많은 도움이 됐으면 좋겠네요.

 

모두 성투하세요~ :)