使用backtrader股票回测库,要扩展市盈率数据,增加增加feed的数据,该怎么写?
搜索了文章,各有各的写法,试了也不对,使用GPT给出的答案也是不一样。
我的代码如下:
import backtrader as bt
import pandas as pd
import tushare as ts
#pandas的数据格式
from backtrader.feeds import PandasData
class Addmoredata(PandasData):
lines = ('turnover_rate','pe','pb',)
params = (('turnover_rate',7),('pe',8),('pb',9),)
class TestStrategy(bt.Strategy):
def log(self, txt, dt=None):
dt = dt or self.datas[0].datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def next(self):
self.log(f"换手率:{self.datas[0].turnover_rate[0]},\
市净率:{self.datas[0].pb[0]},市盈率:{self.datas[0].pe[0]}")
if __name__ == '__main__':
cerebro = bt.Cerebro()
cerebro.addstrategy(TestStrategy)
# 获取数据
stock_hfq_df = pd.read_csv('F:/投资/数据/all_stock_daily.csv')
stock_hfq_df=stock_hfq_df.fillna(0)
data = Addmoredata(stock_hfq_df)
cerebro.adddata(data) # 将数据传入回测系统
cerebro.broker.setcash(100000.0)
print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
cerebro.run()
print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
数据如下: