지난 게시글에서 백테스팅 결과값들을 확인해보니 002320 종목이 수익권에 도달했음에도 불구하고 매도가 이루어지지 않은 모습을 확인할 수 있었다. 따라서 이번 게시글에서는 어떤 부분이 문제였는지 확인하고, 그 부분을 수정한 후에 전체적인 백테스팅 결과를 확인해보도록 하겠다.
매도 함수 수정하기
바로 아래와 같은 부분 때문에 발생한 오류였다. 즉, 첫 번째 매도 조건을 판단하는 데에 있어서 수익률 조건이 5% <= < 10% 범위 내로 한정되어 있었기 때문에 발생한 오류이다.
## 첫 번째 수익률 조건
if (float(row[3]) * float(self.sec_sellprofit)) > float(self.chart_data['high'].iloc[1]) >= (float(row[3]) * float(self.first_sellprofit)):
거래 데이터를 확인해보니 위와 같은 결과값이 입력되었다. 이전 게시글에서 살펴봤던 내용처럼 매수일은 20200115이지만, 매도일은 곧바로 다음 날에 두 번, 다다음 날에 한 번의 매도가 이루어지는 모습을 확인해볼 수 있다. 그럼 이제 차트를 가지고 와서 1월 15일에 매수하는 것이 맞는지, 그리고 1월 16일에는 두 번 매도하는 게 맞는지와 세 번째 매도는 1월 17일에 진행되는 게 맞는지 한번 확인해보도록 하자.
위의 차트 내에서 확인할 수 있듯이, 빨간색 화살표(파란색 선)가 표시된 부분이 바로 1월 15일이다. 그리고 빨간색 네모칸은 코드를 수정한 이후의 분할 매도 구간이며, 주황색 네모칸은 코드를 수정하기 이전의 분할 매도 구간이다. 즉, 분할 매도가 올바르게 이루어지고 있다는 사실을 확인할 수 있다.
728x90
전체적인 백테스팅 결과 조회하기
2020년 1월 1일부터 2021년 1월 1일까지의 데이터를 바탕으로 5일 이동평균선이 20일 이동평균선을 상향돌파 시 매수하고 5일 이동평균선이 20일 이동평균선을 하향돌파 시 손절매하는 거래 전략을 수립해서 거래를 진행해본 결과, 다음과 같은 결과를 얻었다. 분할 매도 조건을 추가하기 전의 데이터와 비교해보면 괄목할 만한 개선이 이루어졌다고 볼 수 있다.
분할 매도 조건 추가 전의 백테스팅 결과 6월 30일까지의 누적손익 : -2,090,622원 12월 31일까지의 누적손익 : 238,108원
분할 매도 조건 추가 후의 백테스팅 결과 6월 30일까지의 누적손익 : 607,394원 12월 31일까지의 누적손익 : 1,626,661원
## 출력 결과 ##
현재 조회일자: 20201231 (self.today값), 20201230 (self.yesterday값)
이처럼 가장 이상적인 거래 전략은 손실을 줄이는 방법이라는 것을 알았으면 한다. 물론 2020년은 어느 정도의 상승장이라고 보는게 맞기 때문에 이런 결과가 도출되었을 수도 있고, 이 거래 전략이 하락장에서도 먹히는 방법일 수도 있다. 이 내용은 본인이 하락장이라고 판단되는 시점을 대상으로 백테스팅을 돌려보면 결과값을 얻을 수 있으니, 만약 위 전략이 상승장에서만 먹히는 전략이었다면 상승장과 하락장을 어떻게 판단할지를 구분한 후에 장세에 따른 전략을 적용하면 된다. 이제 다음 게시글에서 결과값들을 분석해보면서 최종 결과값을 얻어 정리해보도록 하자.