Backtrader의 구성요소는 실제 트레이딩과 비슷한 모습을 보인다.
세부적인 내용은 뒤로 하고 기본적인 부분부터 보도록 하자.
큰 구성요소로 Cerebro, Data Feeds, Strategy, Broker가 Backtrading을 진행하게 된다. 각각 역할은 아래와 같다.
Cerebro : 데이터와 전략을 이용해 브로커가 거래를 진행
Data Feeds : 거래의 기초가 되는 데이터로 OHLCV 데이터 형태를 가져야 한다.
Strategy : 거래를 진행하게되는 전략을 수립하는 부분
Broker : 거래를 진행하는 주체로 자본, 수수료등 실제 거래의 요소들을 설정한다.
기초적인 트레이딩을 위한 코딩을 시작해보자. 가장 기본적인 모습은 아래와 같다.
import backtrader as bt
class MyStrategy(bt.Strategy):
def __init__(self): pass
def next(self): pass
if __name__ == "__main__":
cerebro = bt.Cerebro()
cerebro.addstrategy(MyStrategy)
먼저 backtrader는 bt로 import 해주는것이 관례이다.(아무거나 해도 상관없다.)
bt.Strategy를 오버라이딩해서 MyStrategy를 만들어준다.(이름은 아무거나 해도 상관없다.)
__init__(self) 메서드 부분은 백트레이더의 변수 네이밍 룰에 따라 필요한 변수를 설정해주는 부분이다.
next 메서드는 매일 매일 트레이딩을 진행하는 부분이다.
Strategy 부분을 설정해주기 전에 Cerebro의 세팅이 우선 되어야 한다.
cerebro = bt.Cerebro( )로 cerebro를 설정해주고 addstrategy를 이용해 cerebro에 전략을 설정해준다.
이제 전략을 수행할 data를 추가해주어야 하는데,
Naver금융에서 데이터를 파싱하여 Backtrader에서 사용가능한 Pandas형태로 바꾸어주는 함수를 만들어 사용한다.
https://trading-for-chicken.tistory.com/4?category=887843
https://trading-for-chicken.tistory.com/5?category=887843
https://trading-for-chicken.tistory.com/6?category=887843
https://trading-for-chicken.tistory.com/7?category=887843
위 데이터 파싱 함수 만들기 페이지를 참고하여(코드 전문은 위 글 참고) helper.py에 해당 함수를 넣어서 사용할 것이다.
이제 Data가 주어졌으니, Cerebro에 추가해보자.
import backtrader as bt
import helper
class MyStrategy(bt.Strategy):
def __init__(self): pass
def next(self): pass
if __name__ == "__main__":
cerebro = bt.Cerebro()
df = helper.ohlcv_data()
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy)
한줄씩 살펴보면
df = helper.ohlcv_data() : 통해 삼성전자(005930)의 오늘로부터 1년치의 데이터를 파싱, dataframe 형태로 df에 할당
data = bt.feeds.PandasData(dataname=df) : cerebro에서 데이터를 이용하려면 Backtrader용 datafeed로의 변환이
필요하다. bt.feeds.PandasData(dataname=df)를 통해 PandasData인 df를 backtrader에서 사용가능한 형태로 변환한다,
cerebro.adddadta(data) : datafeed로 변환한 OHLCdata를 cerebro에 추가해 준다.
이제 브로커를 통해 초기자금을 설정해주고. run 및 plot 을 실행해보자.
import backtrader as bt
import helper
class MyStrategy(bt.Strategy):
def __init__(self): pass
def next(self): pass
if __name__ == "__main__":
cerebro = bt.Cerebro()
cerebro.addstrategy(MyStrategy)
df = helper.ohlcv_data()
data = bt.feeds.PandasData(dataname=df)
cerebro.adddata(data)
cerebro.broker.setcash(20000000)
cerebro.run()
cerebro.plot()
cerebro.broker.setcash(20000000) : 브로커를 통해 현금(cash)를 설정해준다.
cerebro.run() : cerebro에 설정된 대로 실행한다.
cerebro.plot() : run으로 수행된 내용을 plot한다.
본 코드를 실행하게 되면, plot창이 아래와 같이 뜨게 된다.
위에서부터 보면
맨 윗칸 : broker 부분으로 cash는 현금보유량, value는 전체 평가 금액이다. 현재 거래가 진행되지 않아 그대로이다.
두번째 칸 : 거래가 이루어진 이력을 확인할 수 있다.
세번째 칸 : 주가와 거래량 등 기본적인 차트와 거래가 이루어진 포인트를 볼 수 있다.
이제 이 차트를 우리가 보통 거래시에 보는 일봉차트로 변경하도록 한다.
plot 에서 파라미터를 아래와 같이 수정해주면 된다. (캔들차트, 상승은 빨강, 하락은 파랑으로 설정)
cerebro.plot(style='candle', barup='red', bardown='blue')
이제 실행해보면 아래와 같이 plot 되는 것을 볼 수 있다.
이제 Data를 Cerebro를 통해 띄우는것을 완료 하였다. 다음장에서는
Strategy를 통해 거래를 실제로 진행해보도록 한다.
'Back Trader' 카테고리의 다른 글
04. BackTrader - 기초(4) log 설정_2. (0) | 2021.09.30 |
---|---|
03. BackTrader - 기초(3) log 설정_1. (0) | 2021.09.29 |
02. BackTrader - 기초(2) Strategy로 Indicator 설정 (0) | 2021.09.29 |