import backtrader.feeds as btfeeds
class PandasDataSource(bt.feeds.PandasData):
lines = ('Strategy_GoldenCross_Signal',)
params=(
('Strategy_GoldenCross_Signal', -1),
('Strategy_MACDDiff', -1),
('dtformat', ('%Y-%m-%d')),
('datetime', None),
('time', -1),
('high', 2),
('low', 3),
('open', 1),
('close', 4),
('volume', 5),
('openinterest', -1),)
你好,
我想在数据框中使用我的自定义列,即Strategy_GoldenCross_Signal
.
添加数据后:
st_date = datetime.datetime(2021,1,1)
ed_date = datetime.datetime(2021,12,20)
cerebro = bt.Cerebro()
datafeed1 = PandasDataSource(dataname=data1, fromdate=st_date, todate=ed_date)
然后我定义策略类:
class TestStrategy(bt.Strategy):
def next(self):
if not self.position:
if self.data.Strategy_GoldenCross ==1:
self.buy()
elif self.data.Strategy_GoldenCross ==-1:
self.close()
所以基本上,当自定义信号为 1 -> 买入,-1 -> 卖出时添加到策略中:
cerebro.addstrategy(TestStrategy)
cerebro.broker.setcash(1000)
cerebro.addsizer(bt.sizers.PercentSizer, percents=20)
print(cerebro.broker.getvalue())
result = cerebro.run()
end_cash = cerebro.broker.getvalue()
print(end_cash)
我想问一下这是否是使用数据框中的列的正确方法?对于使用这些指标,您有什么建议?您会先设计数据框并使用已设计的列,而不是使用 backtrader 包中的现有指标吗?谢谢。