AUTO TRADE/Back test

백테스팅 전략 수립 시 주의사항

사실 이 내용은 Open API 카테고리에 작성을 해야 하나, 다른 카테고리에 작성을 해야 하나 고민이 많았는데, 그래도 키움증권 Open API를 통해 차트 데이터를 불러오고 그 데이터를 저장한 분들이 백테스팅에 대한 관심을 갖지 않을까 싶어서 이 카테고리에 작성하게 되었다. 사실 본인도 아직은 백테스팅 전략을 코딩하고 있고 아직도 수많은 오류에 부딪히고 있는 상황인데, 여태까지 겪었던 몇 가지 오류(?) 상황들에 대해 이야기함으로써 다른 분들은 조금이나마 적은 시행 착오를 거치길 바라는 마음에 작성하게 되었다. 

일단 정말 기본적인 이야기지만, 백테스팅은 본인이 해당 전략을 적용할 종목을 찾고 나서 그 종목에 대한 거래 전략을 적용해보고 그 결과를 바탕으로 거래 전략을 수정하는 순서로 이루어진다.

 

거래 대상 종목 선정

사실 이 부분은 크게 어려운 부분이 없다. 본인이 기존에 설정했거나 또는 이전부터 가지고 있던 특정 매매 방법을 적용할 수 있는 종목을 골랐을 텐데, 그 때부터 누적되어 왔던 본인만의 경험을 기반으로 한 종목 선정 기준이 있을 것이다. 따라서 단순하게 해당 기준을 충족시키는 종목을 찾도록 하는 코드를 제작하면 된다.

예를 들어, 거래량이 10,000,000주 이상인 종목만을 거래 대상으로 하고 싶다면  본인이 저장했던 차트 데이터를 바탕으로 해서 for문을 통해 거래량이 10,000,000주 이상인 종목을 별도의 변수에 입력하고 그를 반환하도록 제작함으로써 기준을 충족시킨 종목의 목록을 얻어올 수 있다. 

많은 사람들이 종목 선정에 대한 기준은 어느 정도 갖고 있긴 하지만, 사실 중요한 것은 같은 종목을 거래한다고 하더라도 누군가는 수익이 나고 누군가는 손실이 나는 것이 주식 시장이다. 따라서 다른 사람이 수익을 냈던 종목과 같은 종목을 선정했다면 종목 선정 기준에서의 오류는 없는 것이니 거래 전략을 수정할 필요가 있겠지만, 만약 그 누구도 거래하지 않았던 종목만 계속해서 거래하고 있다면 거래 전략이 아니라 종목 선정에 있어서의 오류가 있는 것이기 때문에 종목 선정 기준을 변경할 필요가 있다. 

 

거래 전략 설정

이 부분이 가장 어려운 부분이다. 예를 들어, 가장 흔히 알고 있는 거래 전략으로는 이동평균선, 볼린저밴드, 엔벨로프 등이 있다. 심지어 그 거래 전략에 대해 공부하다가 결국에는 거래 전략의 계산 방법 뿐만 아니라 그 거래 전략이 어떤 원리를 바탕으로 해서 도출된 거래 전략인지까지 구체적으로 이해하고 있는 전문가 수준까지 도달하는 경우도 흔하다. 하지만 그 거래 전략에 대해 꿰뚫고 있는 사람 치고는 돈을 벌고 있는 사람은 극히 드물다. 

사실 이 내용도 어렵지 않은 이야기일 수도 있는데, 사실 주식 시장에서 특정 종목이 만들어내는 주가의 흐름을 표현한 차트가 있고, 그 안에는 여러 가지 보조적 거래 전략 지표들이 수두룩하다. 그러면 그 거래 전략 지표들은 도대체 뭘 바탕으로 만들어진 것인가? 가격이다. 그렇다면 가격의 흐름만 보고 과감하게 매수에 가담하고 매도할 수 있는가? 전혀 그렇지 않다. 이 내용에 대해 이해가 잘 가지 않는다면 흔히 말하는 골든 크로스 또는 데드 크로스 등과 같은 거래 전략을 본인이 직접 파이썬을 통해 제작해보고 그 결과값을 확인해보길 바란다. 5일 이동평균선이 20일 이동평균선을 돌파했을 때 매수하고 이탈했을 때 매도하는 전략을 수립한 후에 전 종목을 대상으로 백테스팅을 실시해본다면 결국엔 자금이 0원으로 수렴하게 된다. 왜냐하면 손익비 때문이다.

손익비는 예전의 포스팅에서도 다뤘는데, 바로 10%의 수익과 10%의 손실이 전후 관계를 떠나 연달아 발생할 경우에는 결국에는 초기 자금보다 적은 금액만 남게 되기 때문이다. 즉, 초기 자금이 100원일 때 10%의 수익과 10%의 손실이 발생했다면 수익 이후 110원이었던 자금이 11원의 손실을 입게 되면서 99원만 남게 되고, 10%의 손실과 10%의 수익이 발생했을 경우에는 손실 이후 90원이었던 자금이 9원의 이익을 얻게 되면서 99원만 남게 된다. 즉, 이익과 손실의 비율이 동일하다면 본인의 자금은 결국 0원으로 수렴하게 된다. 여기서 거래할 때마다 증권사에 내는 수수료를 게산한다면 0원으로 수렴하게 되는 기간은 더욱 짧아질 것이다.

다음으로 고려해야 할 것은 바로 승률(확률)이다. 즉, 본인이 손익비를 1:1(수익과 손실의 %가 동일한 손익비)로 설정했을 때 승률(확률)이 50%라면 얼마를 가지고 시작하든지 간에 결국에는 0원으로 수렴하게 된다. 하지만 승률이 70%라면 10번의 거래 중 7번의 거래에서는 10%의 수익을 얻고 3번의 거래에서는 10%의 손실을 얻게 되기 때문에 자금은 0원으로 수렴하지 않는다. 즉 10%의 수익을 7번을 내고 10%의 손실을 3번을 낸다면 100원으로 시작했다고 가정했을 경우 마지막에는 129.14원을 얻게 된다. 즉, 손익비는 좋지 않더라도 승률이 좋다면 수익을 낼 수 있고 손익비가 좋더라도 승률이 좋지 않다면 또 다시 0원으로 수렴하게 된다

따라서 본인이 거래하고자 하는 전략을 정확하게 수립한 후에 그를 바탕으로 본인의 손익비는 어떠한지, 승률은 어느 정도 되는지를 분석하고 손익비와 승률 중 어느 하나의 수치를 높이고 싶다면 직접 그 데이터들을 확인해보면서 기존에 적용했던 거래 전략을 수정하는 방향으로 나아가야 한다. 

 


728x90

 

거래 전략 설정 중 매수 전략

사실 매수 전략 자체가 거래 전략에 해당하는 내용이다. 약간의 백테스팅만 해봤다면 어렵지 않게 알 수 있는데, 특정 종목을 매수하기까지 정말 많은 연산 절차를 거쳐야 하고 여러 가지 조건들이 충족되어야 하기 때문에 매수 전략을 수립하는 것이 가장 어렵고 가장 복잡한 절차에 해당하며 그 자체로 거래 전략이라고 해도 무방할 정도로 복잡하다. 반대로 매도의 경우에는 일정 수익률을 정해주고, 해당 수익률(또는 손실률)을 달성했을 경우 매도 주문을 넣게끔만 구현해주면 거래에는 아무런 문제가 없기 때문에 매수 전략에 비교하면 매우 단순한 방법으로 알고리즘을 만들 수 있다.

 

별도의 변수 설정 파일 생성하기

백테스팅을 진행하다보면 특정 값만 변경해서 다시 백테스팅을 해보고 싶은 상황이 발생할 수도 있는데, 이러한 상황에서 보다 편리하게 해당 값을 변경할 수 있도록 별도의 파일 내에 특정 변수를 사전에 지정해주는 것이 좋다. 예를 들어 수익률을 5%로 설정한다고 하면 별도의 파일에 'profit=1.05'와 같은 식으로 입력해두었다가, 해당 거래 전략이 예상외로 좋은 성과를 얻게 되면서 6%를 기준으로 매도하고 싶을 때에는 profit 변수만 1.06으로 변경해주면 그를 바탕으로 백테스팅을 진행하게 된다. 

물론 수익률 뿐만 아니라 손실률(스탑로스와 같은 개념), 더 나아가 종목 선정 시의 거래량·거래대금 기준 또는 상승률 기준 등을 해당 파일 내에 입력해둠으로써 백테스팅 전략을 보다 편리하게 관리할 수 있다. 

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.