(Python을 이용한 Quant 투자) backtrader, yahoo finance 사용법

Posted by : at

Category : Python



backtrader

  • GetCode

  • 목표 :

    • 국내주식 시가/종가 뽑기
    • backtrader 사용법 알기
import datetime
import backtrader as bt
import yfinance as yf

class SmaCross(bt.Strategy): # bt.Strategy를 상속한 class로 생성해야 함.
    params = dict(
        pfast=5, # period for the fast moving average
        pslow=30 # period for the slow moving average
    )

def __init__(self):
    sma1 = bt.ind.SMA(period=self.p.pfast) # fast moving average
    sma2 = bt.ind.SMA(period=self.p.pslow) # slow moving average
    self.crossover = bt.ind.CrossOver(sma1, sma2) # crossover signal

def next(self):
    if not self.position: # not in the market
        if self.crossover > 0: # if fast crosses slow to the upside
            close = self.data.close[0] # 종가 값
            size = int(self.broker.getcash() / close) # 최대 구매 가능 개수
            self.buy(size=size) # 매수 size = 구매 개수 설정
    elif self.crossover < 0: # in the market & cross to the downside
        self.close() # 매도

cerebro = bt.Cerebro() # create a "Cerebro" engine instance

# 삼성전자의 '005930.KS' 코드를 적용하여 데이터 획득
# data = bt.feeds.YahooFinanceData(dataname='005930.KS', fromdate=datetime.date(2019, 1, 1), todate=datetime.date(2019, 12, 31))
data = bt.feeds.PandasData(dataname=yf.download('005930.KS', '2019-01-01', '2021-11-13'))

cerebro.adddata(data)
cerebro.broker.setcash(1000000) # 초기 자본 설정
cerebro.broker.setcommission(commission=0.00015) # 매매 수수료는 0.015% 설정

cerebro.addstrategy(SmaCross) # 자신만의 매매 전략 추가

cerebro.run() # 백테스팅 시작
cerebro.plot() # 그래프로 보여주기


About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links