0
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 包中的现有指标吗?谢谢。

4

0 回答 0