-
백테스팅 (Backtesting) 환경 만들기시스템트레이딩/준비 2021. 1. 19. 21:55반응형
시스템 트레이딩을 하기 위해선 나의 전략이 과거에 어떠한 성과(performance)를 냈는지 검증하는 절차를 수행해야한다.
이러한 과정을 백테스팅이라 부르며, 파이썬으로 백테스트하는 모듈(? 라이브러리?)이 Backtrader와 Backtesting 이다.
이 두종류 중 나는 "backtesting"을 약간 개조하여 사용하고 있는데, 둘 다 좋은 백테스팅 툴이다.
1. backtrader(www.backtrader.com)
우선 백트레이더(backtrader)는 풍부한 자료 설명과 활성화된 커뮤티니가 운영되고 있어
예제를 따라해보기 편하고, 또한 코드를 검색하고 오류를 수정할 때 아주 용이하다.
Backtrader를 설치하기 전에 아래의 조건을 충족해야 된다.(물론 앞의 포스팅을 보고 설치하셨다면 모든 조건을 충족할 것이다.)
요구사항에 적힌 파이썬 버전(현재 파이썬 버전은 3.8x, 3.9x 또는 그 이상)과 다르지만 잘 작동 한다.
Requirements and versions
backtrader is self-contained with no external dependencies (except if you want to plot)
Basic requirements are:
-
Python 2.7
-
Python 3.2 / 3.3/ 3.4 / 3.5
-
pypy/pypy3
Additional requirements if plotting is wished:
-
Matplotlib >= 1.4.1
It may work with previous versions, but this the one used for development
백트레이더의 설치 방법은 아주 간단하다. 앞서 설치한 아나콘다 프롬프트를 열고
(좌측 하단 검색하려면 여기에 입력하십시오. 에 "anaconda prompt"를 입력하여 창을 연다.)
pip install backtrader
입력하고 엔터를 누르면 끝이다.
잘 작동 되는지 확인을 해보려면 아래의 코드를 하나하나 따라 해보기 바란다. (출처:backtrader quickstart guide)
(예제 파일은 이곳에서 받아쓰면 됨 : github.com/mementum/backtrader )
Basic Setup
from __future__ import (absolute_import, division, print_function, unicode_literals) import backtrader as bt if __name__ == '__main__': cerebro = bt.Cerebro() print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue()) cerebro.run() print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
결과는 아래와 같이 나온다.
Starting Portfolio Value: 10000.00 Final Portfolio Value: 10000.00
Setting the Cash
from __future__ import (absolute_import, division, print_function, unicode_literals) import backtrader as bt if __name__ == '__main__': cerebro = bt.Cerebro() cerebro.broker.setcash(100000.0) print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue()) cerebro.run() print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
투자금을 설정하고 실행하면 다음과 같은 결과가 나온다.
Starting Portfolio Value: 1000000.00 Final Portfolio Value: 1000000.00
이렇게 결과가 나오면 설치가 정상적으로 잘 된 것이다.
2. Backtesting(kernc.github.io/backtesting.py/)
Backtesting 은 backtrader에 비해 예제도 커뮤니티도 모두 빈약하다. 하지만 backtrader에 비해 사용하기가 편한거 같아 이걸 이용해서 전략 백테스팅과 포트폴리오 퍼포먼스 평가를 진행하고 있다.
설치방법은 backtrader와 같이 pip를 이용해서 인스톨 한다.
pip install backtesting
설치하고 나면 아래의 예제를 이용하여 설치가 잘되었는지 확인해보자.
from backtesting import Backtest, Strategy from backtesting.lib import crossover from backtesting.test import SMA, GOOG class SmaCross(Strategy): n1 = 10 n2 = 20 def init(self): close = self.data.Close self.sma1 = self.I(SMA, close, self.n1) self.sma2 = self.I(SMA, close, self.n2) def next(self): if crossover(self.sma1, self.sma2): self.buy() elif crossover(self.sma2, self.sma1): self.sell() bt = Backtest(GOOG, SmaCross, cash=10000, commission=.002, exclusive_orders=True) output = bt.run() bt.plot()
결과는 다음과 같이 나온다
Start 2004-08-19 00:00:00 End 2013-03-01 00:00:00 Duration 3116 days 00:00:00 Exposure Time [%] 94.27 Equity Final [$] 68935.12 Equity Peak [$] 68991.22 Return [%] 589.35 Buy & Hold Return [%] 703.46 Return (Ann.) [%] 25.42 Volatility (Ann.) [%] 38.43 Sharpe Ratio 0.66 Sortino Ratio 1.30 Calmar Ratio 0.77 Max. Drawdown [%] -33.08 Avg. Drawdown [%] -5.58 Max. Drawdown Duration 688 days 00:00:00 Avg. Drawdown Duration 41 days 00:00:00 # Trades 93 Win Rate [%] 53.76 Best Trade [%] 57.12 Worst Trade [%] -16.63 Avg. Trade [%] 1.96 Max. Trade Duration 121 days 00:00:00 Avg. Trade Duration 32 days 00:00:00 Profit Factor 2.13 Expectancy [%] 6.91 SQN 1.78 _strategy SmaCross(n1=10, n2=20)
그리고 화면에 그래프가 하나 뜰 것이다.(크롬에서 잘 나옴)
메뉴얼과 예제는 아래 주소를 참고하길 바람
kernc.github.io/backtesting.py/doc/backtesting/#gsc.tab=0
반응형'시스템트레이딩 > 준비' 카테고리의 다른 글
1. 시스템 트레이딩 개발환경 설정 (0) 2021.01.18 시스템 트레이딩 프로그래밍 작업 (0) 2021.01.15 -