PYTHON/Back test

백테스팅 구축 (24) - 결과 데이터 확인하기

  • -

지난 게시글에서 전체적인 백테스팅 결과값을 확인했으니, 이번 게시글에서는 그 결과는 어떻고 중간에 추가적으로 수정할 사항이 있는지 등에 대해 확인해보도록 하겠다. 이전에도 한번 해봤던 데이터 분석 방법이므로 크게 걱정할 것은 없고, 단순히 ① 수익 거래와 손실 거래의 비율은 어떤지② 손익 비율은 어떻게 되는지 그리고 ③ 어떻게 하면 손실을 줄일 수 있는지에 대해 살펴보도록 하겠다.

 

전체 종목 수익금액 및 수익률 계산하기

수익금액의 경우에는 우리가 첫 번째 매도와 두 번째 매도, 세 번째 매도 금액을 합한 금액이고 손절 금액은 맨 마지막에 있는 매도 금액이다. 어찌됐든 간에 해당 거래를 통해서 얻어들인 수익금액은 수익 매도 금액과 손절 매도 금액을 합한 금액이기 때문에, 그 값을 모두 더해주도록 하자. 그 후에 수익률은 방금 계산한 수익 금액을 처음에 매수했던 금액으로 나누어주면 된다. 

수익 금액 계산식, SUM 함수
수익률 계산식, 매수금액 나누기 수익금액
수익 금액과 수익률을 계산한 데이터

 

 

전체 거래 횟수 및 수익 횟수와 손실 횟수, 그리고 손익비 계산하기

가장 먼저 거래 횟수를 구하는 방법은   =COUNTA()  함수를 이용하는 것이다. 이   =COUNTA()  함수는 선택한 셀에서 어떤 값이든 상관없으니 특정 값이 입력되어 있는 셀의 개수를 구하는 함수이다. 따라서 =COUNTA(수익금액 셀 전체)를 입력해주면 전체 거래 횟수를 얻어올 수 있다.

다음으로 수익 거래 수와 손실 거래 수  =COUNTIF()  함수를 이용하면 얻어올 수 있다. 이는 위에서 사용했던 COUNTA()와 비슷한데, A가 아니라 IF가 들어가 있는 것을 보면 조건문을 통해 특정 조건을 충족시키는 셀의 개수를 얻어오는 것임을 알 수 있다. 이 경우 수익 거래 횟수는   =COUNTIF(수익금액 셀 전체, ">0")  , 손실 거래 횟수는   =COUNTIF(수익금액 셀 전체, "<0")  로 값을 구할 수 있다. 여기서 수익금액 셀을 구할 때 '>=0'과 같이 사용하지 않은 이유는 바로 미실현 거래를 제외하기 위함이다. 즉, 매수만 했고 아직 어떠한 매도도 이루어지지 않은 거래의 경우에는 수익금액이 0원이 집계되고, 어떤 매도가 되었든 간에 매도가 이루어진 종목이라면 수익 금액이 0원이 아닐 것이기 때문이다. 따라서, 수익 금액이 0원인 거래는 매수만 진행된 거래라는 점을 바탕으로 미실현 거래 수를 계산한다면   =COUNTIF(수익금앨 셀 전체, "=0")  의 형태로 값을 구할 수 있게 된다.

마지막으로 손익비의 경우에는 위에서 계산한 수익 거래 수와 손실 거래 수 간에 서로 차지하는 비중을 의미하는데, 예를 들어 수익 거래가 2번 발생한 동시에 손실 거래가 1번 발생했다면 이 경우의 손익비는 2:1이다. 따라서 수익 거래 수를 손실 거래 수로 나누면 특정 값이 출력되는데, 그 값:1이 바로 우리의 손익비가 되는 것이다.

 

 

평균 수익금액과 평균 손실금액 계산하기

엑셀 상에서 평균이라는 것은 영어 그대로   =AVERAGE()   함수를 이용해서 계산할 수 있는데, 평균 수익금액과 평균 손실금액은 각각 수익금액이 0원보다 큰 수익금액 값들의 평균, 수익금액이 0원보다 작은 수익금액 값들의 평균을 의미한다. 즉, 하나의 조건이 추가되는 것이다. 따라서 이는   =AVERAGEIF()  함수를 통해 계산할 수 있다. 이 함수를 통해 수익금액 셀의 값이 0보다 큰 값들의 평균을 계산할 수 있다.

 

 

백테스팅 결과값 확인하기

아래는 2020년 1월 1일부터 2021년 1월 1일까지의 데이터를 바탕으로 시뮬레이션을 돌린 후 엑셀을 통해 정리한 결과값이다. 미실현 종목수가 많은 것은 아직 매도 신호가 발생하지 않은 채로 유지되었기 때문이고, 실제로 150건의 거래 중 80건은 매도가 이루어졌으며 그 중 52건은 수익을 얻었다. 

더 많은 데이터를 얻고 싶은 경우에는 시작 금액을 늘려서 보유 잔고가 없어서 매수하지 못했던 종목들도 모두 매수할 수 있도록 설정함으로써 결과값을 얻어올 수 있을 것이다.

 

이제 이 데이터들을 그대로 둔 채로, 새롭게 업데이트된 데이터들을 우리가 함수를 통해 결과값들을 제작해둔 파일 안에 붙여넣기를 하면 알아서 또 계산을 해주니 아주 편리하게 결과값들을 처리할 수 있다.

이러한 데이터들을 기반으로 해서 또 새로운 전략을 수립할 수 있고, 기존에 존재하는 거래 전략을 새롭게 수정할 수도 있다. 또한 각 종목 별로 매수 시점부터 매도 시점까지 발생한 최고 손실률과 최고 수익률 값을 따로 입력해줌으로써 우리가 엑셀 상에서 그 값을 얻어온 후에 또 새로운 전략을 수립할 수도 있다. 예를 들어 설명해보도록 하겠다.

A라는 종목을 2020년 1월 15일에 매수했고 2020년 1월 20일에 세 번째 조건 하에서 매도했으며, 손절매는 없었다고 가정해보도록 하자. 만약 1월 15일부터 1월 20일 사이에 A 종목의 주가가 하락해서 매수 가격 대비 -10%까지 하락했지만 결국 +15%에 달하는 수익률을 얻을 수 있었다고 해보자. 하지만 B라는 종목은 2020년 1월 16일에 매수했고 2020년 1월 30일에 손절매를 진행했으며 이 때의 손실은 -15%라고 가정해보자. 이 때 우리는 이 부분을 새롭게 전략으로 추가할 수 있다. 바로 매수 가격 대비 15%까지 하락할 경우에는 매도 조건을 떠나서 매도하라는 것이다. 이는 우리가 기존에 제작했던 이동평균선 간의 데드 크로스가 발생하기 이전에 추가적인 손실을 방지하기 위해 적용하는 하나의 안전망으로 작용할 수 있을 것이다.

 

이처럼 계속해서 거래 전략을 수정해 나가면 언젠가는 더 높은 손익비와 더 낮은 손절 구간, 더 높은 수익 구간을 얻는 거래 전략이 무엇인지 찾아갈 수 있을 것이다. 이상으로 백테스팅 전략에 대한 포스팅은 여기서 마무리..!

 

과정은 힘들다. 하지만
언젠간 된다
는 믿음만 있다면.

 

 


728x90
반응형
Contents

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

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