[API 자동매매 프로그램] 2. 백 테스팅 (Back Testing)

마팍·2020년 11월 23일
0
post-thumbnail

백 테스팅 (Back Testing)

백 테스팅이란 과거의 데이터를 가지고 내가 보유한 알고리즘을 시뮬레이션하여 성과 분석을 해보는 과정을 말한다.
1장에서 자동매매 프로그램에 쓰일 알고리즘은 래리 윌리엄스가 고안한 <변동성 돌파 전략>이라 설명한 바가 있다.

  1. Range = (전일 고가 - 전일 저가)
  2. Base Price = Range*0.5 + 당일 시가
  3. 현재 가격이 Base Price보다 높다면 전량 매수
  4. 차일 오전 9시 전량 매도

물론 많은 이들에게 입증된 알고리즘이지만, 내가 투자하려는 종목에도 유효한지 입증이 되어야 신뢰도 있는 프로그램으로 이어지는 것이다. 알고리즘 자체의 신뢰도가 떨어진다면 프로그램도 돈 잃는 쓰레기에 불과하다.

과거 캔들 정보 조회: pyupbit

사용할 거래소는 업비트이다. 과거 캔들 정보 조회를 위해 pyupbit라는 모듈을 이용할 예정이다. 이는 API모듈로 캔들 시세 조회부터 매수/매도 주문까지 다양한 기능을 제공한다. 우선 cmd창을 실행 후 모듈을 설치해야한다.

pip install pyupbit

설치가 끝났다면 자신이 사용하는 에디터를 실행하자. 난 jupyter notebook을 사용할 예정이다.

>>>import pyupbit # pyupbit모듈 불러오기
>>>import pandas as pd # pandas모듈 불러오기
 
>>>df = pyupbit.get_ohlcv("KRW-BTC") # 캔들의 시가(opening), 고가(high), 저가(low), 종가(closed), 거래량(volume)을 조회하는 함수이다.
>>>pd.DataFrame(df)

위와 같이 과거 200일의 캔들 정보가 조회되었다.
이제 이 데이터를 엑셀로 저장한다.

>>>df.to_excel("btc_history.xlsx")

엑셀을 열면 아래와 같이 테이블로 200일의 캔들 정보가 표시되어있다.

테스팅

엑셀로 시뮬레이션을 해보자. 물론 파이썬으로도 할수 있겠지만 엑셀이 더 쉽다;

Range계산

Range = (전일 고가 - 전일 저가) 라 설명한 바가 있다.
간단한 수식으로 구현한다.

Base Price 계산

Base Price = Range*0.5 + 당일 시가 이다.

외람된 얘기지만 난 한컴오피스를 무진장 싫어한다. 단축키도 불편하고 사소한 인터페이스도 유저 친화적이지 못한것 같다. MS오피스 쓰세요

매수 여부

매수 기준은 현재가 > Base Price면 매수였다.
그날의 고가가 BP보다 높거나 같다면 매수가 체결되었다는 뜻이 될것이다.
if문을 활용해 매수가 체결되었으면 1, 안되었으면 0으로 구현해준다.

수익률 계산

매수가 일어났다면 차일 시가 (즉, 당일 종가)에 전량 매도이다. 수익률은 판가격/산가격이 될테니 종가/BP로 계산한다. 만약 매수가 일어나지 않은 날 (0) 이면 원금이 고대로 있을테니 1로 설정해둔다.

누적 수익률 계산

백테스팅의 마지막 단계이다. 200일동안의 백테스팅한 결과를 누적해본다. 각일의 수익률을 단순 곱셈해주면 된다.

200일 데이터의 백테스팅 결과 수익률은 56%로 계산되었다. 만약 내가 초기자금 100만원으로 시작했었다면 56만원을 번 것이 된 셈이다.

200일동안 56%의 수익률이라면 엄청난것 같지만 여기엔 몇가지 결함이 있다.

  1. 데이터의 양이 200일 정도로 짧다
  2. 변동성 돌파 전략은 철저히 기술적 분석일뿐, 시장상황을 고려하지 않는다.

무슨말이냐, 최근 200일동안에 비트코인은 엄청난 상승세를 기록했다. 그 상승 탄력에 힘입어 전략의 성과 역시 좋아진것이다. 비트코인이나 사둘껄 그랬다...

만약 하락장이였다면? 분명 저정도의 경이로운 수익률을 기록하지 못했을것이다. 하지만 알고리즘의 신뢰도가 어느정도 입증이 된것은 분명하다.

엑셀은 이용한 간단한 백테스팅을 마쳤다.
다음 포스팅부턴 API를 활용한 개발을 시작해보려 한다.

profile
데린이입니다.

0개의 댓글