파이썬에서 주식 데이터를 백테스트하는 방법은 여러 가지가 있습니다. 이미 만들어져 있는 파이썬 패키지를 이용하는 방법도 있는데요. 해당 패키지 사용법을 알아야 한다는 단점은 있지만, 짧은 시간에 다양한 방법으로 백테스트를 하고 이미 잘 알려진 지표를 쉽게 확인할 수 있다는 장점이 있습니다. 오늘은 파이썬 주식 백테스트, backtrader 사용하는 방법에 대해서 알아보겠습니다.

 

 

먼저 가장 단순하게 매일 삼성전자 주식을 1주씩 매수하는 전략을 백테스트해 봤습니다. backtrader는 파이썬 3.7 버전까지 지원하고 있습니다. 가급적 가상 환경을 만들어서 이용하시는 것을 추천드립니다.

 

 

1. backtrader 설치하기

pip 명령어를 이용해서 쉽게 설치할 수 있습니다.

pip install backtrader[plotting]


파이썬 코드에서 import문이 실행되면 설치가 잘 된 것입니다.

import backtrader

 

 

2. 투자전략 설정

백테스트를 수행하기 위해서는, Strategy의 객체가 필요합니다. Strategy의 객체를 만들기 위해서는 __init__와 next함수를 정의합니다. next함수에 매일 10주씩 주식을 매수하도록 작성합니다.

import backtrader as bt
import pandas as pd
import datetime

class DailyBuy(bt.Strategy):
    def __init__(self):
        pass
    def next(self):
        self.buy(size=10)

 

 

3. 데이터 수집

백테스트에 사용할 데이터를 수집합니다. 1번의 코드를 참조하여, 19년 이후의 삼성전자 주가 데이터를 수집합니다. 데이터 수집기간은 19년 1월 1일부터 20년 7월 31일까지로 합니다. 데이터를 csv파일로 저장합니다.

import FinanceDataReader as fdr

df=fdr.DataReader('005930',"2019-01-02", "2020-07-31")
df.to_csv("005930.csv")

 

GenericCSVData클래스를 상속하여, 커스텀 데이터를 만들 customCSV클래스를 설정합니다. datetime포맷과 각각의 항목이 데이터 프레임 몇 번째에 있는지 지정합니다. 없는 칼럼은 -1로 값을 넣습니다.

import backtrader.feeds as btfeeds

class customCSV(btfeeds.GenericCSVData):
    params=(
        ('dtformat', '%Y-%m-%d'),
        ('datetime', 0),
        ('time', -1),
        ('open', 1),
        ('high', 2),
        ('low', 3),
        ('close', 4),
        ('volume', 5),
        ('openinterest', -1),
        )


앞에서 생성한 csv파일을 입력 인자로 넣어 customCSV클래스의 객체를 생성합니다

data=customCSV(dataname="005930.csv")

 

 

4. 백테스팅

Cerebro클래스의 객체를 생성합니다. 백테스트에 생성한 데이터를 추가하고, 초기 현금을 300,000,000원으로 설정합니다. 앞에서 만든 투자전략을 추가합니다.

cerebro = bt.Cerebro()
cerebro.adddata(data)
cerebro.broker.setcash(300000000)
cerebro.addstrategy(DailyBuy)


백테스트를 실행하기 전에 현재 보유금액을 출력합니다.

back_init=cerebro.broker.getvalue()

 

run함수를 호출하여 백테스트를 실행합니다.

cerebro.run()

 

투자 결과를 확인하고, plot함수를 이용해 투자 경과를 그래프로 출력합니다.

result=cerebro.broker.getvalue()

 

 

5. 결과 출력

먼저 수익률을 출력해 봤습니다.

result=cerebro.broker.getvalue()

>>  11.40%

 

백테스트 내용을 그래프로도 확인해 봤습니다.

cerebro.plot()

 

백테스트-결과-그래프
백테스트-결과

 

 

오늘은 이렇게 파이썬 주식 백테스트, backtrader 사용하는 방법에 대해서 알아보았습니다. 다음에는 이전 포스팅에서 다룬 LSTM 알고리즘의 결과를 이용해서 백테스트하는 작업을 해보겠습니다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기