반응형

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

 

01. Naver Finance에서 크롤링할 URL 찾기

01. 크롤링할 페이지 찾기 먼저 네이버금융에 들어가서 [국내증시] → [코스피] → [삼성전자] 를 클릭하자. 이제 아래에 [차트]를 클릭하자 여기서 [F12]로 [개발자 모드]를 켜고 [Network]를 클릭한다

trading-for-chicken.tistory.com

https://trading-for-chicken.tistory.com/5?category=887843 

 

02. OHLCV 데이터를 파싱해 Pandas Dataframe 형태로 만들기 -1

2. Data를 파싱하여 깔끔한 출력으로 만들기 앞에서 찾은 URL을 확인하면 4가지 검색조건이 존재함을 알 수 있다. 종목코드, 검색시작 날짜, 검색종료날짜, 일봉-주봉-월봉 이다. 이를 참고하여 코

trading-for-chicken.tistory.com

https://trading-for-chicken.tistory.com/6?category=887843 

 

03. OHLCV 데이터를 파싱해 Pandas Dataframe 형태로 만들기 -2

저번 글에서 데이터를 깔끔하게 파싱하는데 성공하였다. 이제 Pandas Dataframe 형태로 변환하도록 하자. 저번 글 링크>> https://trading-for-chicken.tistory.com/5 02. OHLCV 데이터를 파싱해 Pandas Datafram..

trading-for-chicken.tistory.com

https://trading-for-chicken.tistory.com/7?category=887843 

 

04. OHLCV 데이터를 파싱해 Pandas Dataframe 형태로 만들기 -3

이번장에는 저번에 만든 URL 파싱 -> 데이터프레임으로 변환하는 함수에서 원하는 종목과 기간으로 파싱할 수 있도록 함수를 만들어 보도록 한다. 저번 글 링크 >> https://trading-for-chicken.tistory.com/6

trading-for-chicken.tistory.com

 

위 데이터 파싱 함수 만들기 페이지를 참고하여(코드 전문은 위 글 참고) helper.py에 해당 함수를 넣어서 사용할 것이다.

Naver금융에서 종목 데이터를 파싱하여 Pandas로 변환하는 코드.

이제 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창이 아래와 같이 뜨게 된다.

plot 화면

위에서부터 보면

맨 윗칸 : broker 부분으로 cash는 현금보유량, value는 전체 평가 금액이다. 현재 거래가 진행되지 않아 그대로이다.

두번째 칸 : 거래가 이루어진 이력을 확인할 수 있다.

세번째 칸 : 주가와 거래량 등 기본적인 차트와 거래가 이루어진 포인트를 볼 수 있다. 

이제 이 차트를 우리가 보통 거래시에 보는 일봉차트로 변경하도록 한다.

plot 에서 파라미터를 아래와 같이 수정해주면 된다. (캔들차트, 상승은 빨강, 하락은 파랑으로 설정)

    cerebro.plot(style='candle', barup='red', bardown='blue')

이제 실행해보면 아래와 같이 plot 되는 것을 볼 수 있다.

이제 Data를 Cerebro를 통해 띄우는것을 완료 하였다. 다음장에서는 

Strategy를 통해 거래를 실제로 진행해보도록 한다.

반응형

+ 최근 글