트레이딩

[백테스팅] 지금까지 진행했던 백테스팅의 오류에 관하여

성민석 2021. 10. 9. 00:28

안녕하세요 성민석입니다.

이번 포스팅은 제가 지난 1년간 진행해봤던 백테스팅에 대해서 회고해볼 생각입니다. 실시간으로 직접 매매를 해보고 나니 치밀하지 못했던 지난 날의 백테스팅이 오히려 스스로에게 꿈과 희망만을 심어주었다는걸 느끼고 있습니다. 간단하게 오늘은 이에 대해서 설명드리고자 합니다. 가볍게 읽어봐주시면 좋을 것 같습니다.

 


가장 흔하게 하는 오류와 관련하여

저도 정말 수백번의 백테스팅을 해봤습니다. 아무래도 퀀트 투자가 아니라 트레이딩을 하는 사람이기 때문에 오로지 데이터로만 승부를 보려고 했습니다. 며칠 전 제가 백테스팅과 관련하여 이현열님 블로그에서 읽었던 내용이 너무 괜찮아서 인용하고자 합니다. 더 자세한 내용은 링크 첨부해두겠습니다.

 

백테스트 수익률이 매우 좋아 투자를 시작하면 막상 실제 수익률은 그렇지 않은 경우가 많습니다. 이는 여러가지 이유가 있겠지만, 백테스트 자체에 문제가 있는 경우가 많기 때문입니다. 백테스트시 수익률을 현실보다 좋게 만드는 오류는 크게 세가지가 있습니다. 1. 생존편향 2. 미래참조 마지막으로 3. 소급편향 입니다.

 

https://blog.naver.com/leebisu/222441169620

 

거짓된 백테스트를 만드는 오류들

백테스트 수익률이 매우 좋아 투자를 시작하면 막상 실제 수익률은 그렇지 않은 경우가 많습니다. 이는 여...

blog.naver.com

 

제가 이 중에서 가장 공감했던 내용은 바로 생존편향과 미래참조입니다. 예컨대 수많은 사람들이 삼성전자에 대해서 백테스팅을 진행합니다. 그리고는 근사한 그래프를 보여주고 해당 전략의 수익률이 어떻다고 말합니다. 이 때 전략은 당일 종가 기준으로 얼마 이상 올랐을 때 매수하고 얼마 이상 떨어졌을때 매도하는 전략이라고 합시다.

 

이런 이야기를 들으면 바로 여기서 우리는 쉽게 현혹되고 맙니다. 일단 기본적으로 단일 종목으로만 백테스팅을 진행했다는 점과 그 중에서도 상장 폐지하지 않고 수십년간 꾸준히 우상향한 삼성전자를 골랐습니다. 이런 부분이 기본적으로 생존편향입니다. 또한 두번째는 백테스팅에서 어이없이 미친듯한 수익률이 발생하는 가장 큰 이유이기도 합니다. 그 원인이 바로 미래참조입니다. 전략을 짤 때, 현재(백테스트 기준 미래)에서는 이미 과거를 알기 때문에 좋은 전략을 취합니다. 하지만 이러한 전략은 절대 합리적이지도 않습니다. 전략을 구성할 땐 항상 미래를 알 수 없다는 가정하에 전략을 수립해야 합니다.

 


나의 전략이 시장 수익률을 넘는다 건 정말 대단한 것!

백테스팅 시 저런 생존편향과 미래참조를 깨닫는데 정말 많은 시간이 걸렸고 한 때 당장 대학원을 졸업하고 전업투자를 시작해도 되겠다는 어리석은 생각을 했습니다. 지독하게 희망고문 당하고 성숙한 상태로 수많은 백테스팅을 또 진행했습니다. 앞에서 말한 수많은 제약조건 (특히 앞에서 언급하지 않았지만 여기서 거래 수수료나 세금이나 1,2호가 슬리피지도 포함)들을 고려한다면 시장은 절대 호락호락한 곳이 아니었습니다. 여기서 또 한가지 깨달은 점은 시장수익률을 넘는다는 건 정말 어렵다는 것입니다. 아무리 우리가 KOSPI나 KOSDAQ을 박스권에 갇혀 있다고 놀리지만 시장은 우리가 생각한 것보다 더 효율적이고 반응이 빨랐습니다. 초기에 어설픈 저의 전략은 시장 수익률을 넘지 못하는 게 부지기수였습니다.

 

초기에는 수많은 전략 중 하나라도 시장 수익률을 넘기 힘들었습니다.

 

저도 단타나 데이트레이딩도 백테스팅해보았고 스윙과 같은 전략들도 백테스팅해봤습니다. 약간의 팁을 드리지만 절대 시장이 좋지 않을 때에는 그 곳에서 영웅이 되려하지 말라는 것입니다. 그 말을 이해하시게 되면 여러분의 전략들도 어느 순간부터 시장 수익률을 초과하게 되실 겁니다.

 


그럼에도 불구하고 현실적인 백테스팅은

이제 남들도 다 하는 백테스팅을 저도 할 수 있다고 믿었던 순간이 있었습니다. 아마 오늘 글을 이 내용을 적기 위해서 쓰는게 아닐까 싶습니다. 일단 결론적으로 말하면 그것조차 희망 고문이었습니다. 일전에 제가 ETF 변동성 돌파 전략 기준으로 말씀을 드리겠습니다. 해당 전략에 대해서 조금의 이해도 없으신 분들은 아래의 제 포스팅을 참고해주세요.

 

2021.09.28 - [트레이딩/자동매매일지] - 현재 운영중인 자동매매 시스템 소개합니다.

 

현재 운영중인 자동매매 시스템 소개합니다.

안녕하세요 첫글이네요. 저는 현재 파이썬을 활용한 키움증권 API를 통해서 자동매매 프로그램을 운영하고 있습니다. 이전에 대신증권 API를 사용하다가 자료가 부족하여 결국 키움증권 API로 넘

minsuk-sung.tistory.com

 

현재 돌리고 있는 키움증권 기반의 실시간 트레이딩 시스템

 

해당 ETF 변동성 돌파 전략은 간단하게 요약하면 당일 시가 기준으로 전일 변동폭의 K값만큼 오른 종목을 매수하고 익일 시가에 시장가 매도합니다. 일전에 제가 있는 동아리에서 해당 전략에 대한 엄밀한 백테스팅도 진행하고 나름 확신을 가지고 트레이딩 시스템을 만들었습니다. 지난 3년간 300% 가까운 놀라운 수익률과 1년간 17%가 나왔습니다. 이러한 수치들을 보고 진짜 너무 설렜습니다. 그러나 실제로 실시간 트레이딩 시스템을 운영해보니 몇가지 문제가 있었습니다.

 

 

첫번째 문제는 진입시점이 모호하다는 점입니다. 기본적으로 ETF는 5원 단위로 구성되어 있지만 제 전략의 경우 소수점으로 계산되어 정수형으로 캐스팅을 해도 깔끔하게 떨어지지 않는다는 문제가 있습니다. 

 

또한 두번째 문제로는 슬리피지 문제입니다. 이전에 백테스팅에서는 1호가 정도만 슬리피지를 넣어 계산했습니다. 하지만 실제로는 유동성이 적어 1호가는 물론이고 2,3호가까지 가는 경우도 있었습니다. 이러한 부분은 최유리지정가주문으로 바꾸어 해결하려고 하고 있습니다.

 

마지막 문제로는 매수 종목의 순서와 현실성입니다. 백테스팅에서는 우선순위를 정할 수 있습니다. 그리고 백테스팅을 진행하는 현재 시점에서는 바로 그 우선순위를 정하여 차례대로 매수가 가능하다고 가정할 수 있었습니다. 하지만 현실에서는 그러한 우선순위는 무의미합니다. 시그널이 발생하는 시점도 모두 다르고 심지어는 발생하지 않을 수 있습니다. 그래서 후순위 종목이 먼저 시그널이 발생하게 된다면 어쩔 수 없이 먼저 매수할 수 밖에 없습니다.

 

마지막 문제가 생각보다 정말 크리티컬합니다. 일봉으로 백테스팅을 진행할 때 사실 이러한 부분들을 간과하기 쉽습니다. 이러한 복잡한 이유로 인해서 몇몇 고수 트레이더은 백테스팅이 무의미하다고 그래서 포워드 테스팅을 해야한다고 주장합니다. 저도 사실 그러한 부분에 일부 동의하기 때문에 바로 시스템을 만들기도 했습니다.

 


그럼 앞으로 어떻게 해야할까?

결론적으로 일봉보단 분봉으로 백테스트를 해야하고 분봉보단 체결데이터나 호가데이터를 통해서 백테스트를 해야합니다. 더 세밀한 데이터만이 이 모든 문제를 해결해줄 수 있습니다. 그리고 그렇게 해야 보다 정확한 결과를 얻을 수 있을 것 같습니다. 일봉만으로는 확신할 수 없습니다. 주말에는 틈틈히 시간이 나는대로 백테스트를 보다 엄밀하게 진행해봐야겠네요.

 

 

 

 

+ 그래서 오늘 대신증권 CREON API로 데이터를 업데이트하려고 했는데 API 정책이 바뀐거 같습니다. 기존 3,4시간이면 3000개 전체 일봉을 다운로드 받을 수 있었는데 지금은 예상 시간이 12시간이 넘어가네요. 

 

마지막으로 같이 트레이딩하는 분들과 소통하고 싶습니다. 언제든지 트레이딩이나 인공지능과 관련된 내용을 함께 공유하고 토론하고 싶으시다면 아래의 오픈 카카오톡 링크로 연락주세요.
https://open.kakao.com/me/minsuksung

 

성민석님의 오픈프로필

안암에서 인공지능을 연구하고 있습니다

open.kakao.com

 

728x90
반응형