Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- eclipse
- H는 통계를 모른다.
- 파이어족 자산
- 연금저축계좌
- 파이어족 자산증식
- 니콜라스 다바스
- GIT
- 이클립스
- 통계적 유의성
- 파이어족 저축
- 자산배분
- 김프
- python
- 추세추종 2%룰
- 에드워드 소프
- 퀀트 트레이딩
- 데이비드 라이언
- mark minervini
- 2%룰
- 데이빗 라이언
- 파이어족 포트폴리오
- 신의 시간술
- tensorflow
- 마크 미너비니
- 마크미너비니
- 아웃풋 트레이닝
- 퀀터스 하지 마세요
- 파이어족
- 제시 리버모어
- AWS
Archives
- Today
- Total
머신러닝과 기술적 분석
backtrader 에서 eps등의 재무 데이터를 추가하는 방법 본문
728x90
backtrader 에서 기본적으로 제공하는 데이터 컬럼은 Open, High, Low, Close, Volumn 이렇게 5개이다. 여기세 per, eps등의 재무데이터를 추가할 수 있다!
1. 추가하는 방법
- 기존 데이터 피드를 확장해서 데이터를 추가
class EpsData(bt.feeds.PandasData):
lines = ('per', 'eps',) # add a line containing the net payout yield
# Open High Low Close Volume PER(5) EPS(6)
params = dict(
per=5, # 5번째 컬럼
eps=6, # 6번째 컬럼
dtformat='%Y-%m-%d', # fix date format a yyyy-mm-dd
timeframe=bt.TimeFrame.Months, # fixed the timeframe
openinterest=-1, # -1 indicates there is no openinterest field
)
- 전략 로직에서 사용할 때
per = self.datas[0].per[0]
eps = self.datas[0].eps[0]
2. 전체 샘플코드
import backtrader as bt
import FinanceDataReader as fdr
from pykrx import stock
class EpsData(bt.feeds.PandasData):
lines = ('per', 'eps',) # add a line containing the net payout yield
# Open High Low Close Volume PER(5) EPS(6)
params = dict(
per=5, # 5번째 컬럼
eps=6, # 6번째 컬럼
dtformat='%Y-%m-%d', # fix date format a yyyy-mm-dd
timeframe=bt.TimeFrame.Months, # fixed the timeframe
openinterest=-1, # -1 indicates there is no openinterest field
)
# Create a Stratey
class TestStrategy(bt.Strategy):
def next(self):
dt = self.datas[0].datetime.date(0)
price = self.datas[0].close[0]
per = self.datas[0].per[0]
eps = self.datas[0].eps[0]
print(f"{dt}: close: {price} per: {per} eps: {eps}")
if __name__ == '__main__':
# 1. 삼성전자 (종목코드 : 005930) 의 가격데이터 가져오기
# Date,Open,High,Low,Close,Volume,npy
df = fdr.DataReader("005930", "2021-01-04", "2021-07-31")
df = df[["Open", "High", "Low", "Close", "Volume"]]
# 2. 삼성전자의 퀀트 데이터 가져오기
# pykrx 에서 eps는 연간실적 기준인듯..?
df_etc = stock.get_market_fundamental_by_date("20210104", "20210731", "005930")
df_etc = df_etc[["PER", "EPS"]]
# 3. Join
df = df.join(df_etc)
eps_data = EpsData(dataname=df)
cerebro = bt.Cerebro(stdstats=False)
cerebro.addstrategy(TestStrategy)
cerebro.adddata(eps_data)
cerebro.run()
# Plot the result
# cerebro.plot(style='candlestick', barup="red", bardown="blue")
728x90
반응형
'백테스트' 카테고리의 다른 글
SPY 단타 전략 백테스트 : rsi powerzones (0) | 2021.08.01 |
---|---|
Backtrader 에서 cheat-on-close 의 의미 (0) | 2021.08.01 |
시장의 마법사들 - 래리 하이트의 백테스트 방법 (0) | 2021.07.13 |
한국주식과 달러환율의 상관관계분석 (python 코드) (0) | 2021.07.13 |
Backtrader로 캔들차트 띄우기 (1) | 2021.07.08 |
Comments