首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将自定义多时间帧数据导入backtrader

将自定义多时间帧数据导入backtrader
EN

Stack Overflow用户
提问于 2021-08-23 23:45:05
回答 1查看 158关注 0票数 0

我需要导入几个时间框架到一个单一的交易策略,我不确定如何继续。

以下是我的数据:

代码语言:javascript
复制
df['M1'].tail(3)
                           volume  complete        o        h        l        c
time                                                                           
2021-08-23 23:27:00+00:00       1      True  1.26520  1.26520  1.26520  1.26520
2021-08-23 23:28:00+00:00       2      True  1.26517  1.26520  1.26517  1.26520
2021-08-23 23:29:00+00:00       2      True  1.26517  1.26519  1.26517  1.26519
df['M5'].tail(3)
                           volume  complete        o        h        l        c
time                                                                           
2021-08-23 23:15:00+00:00      25      True  1.26506  1.26512  1.26506  1.26506
2021-08-23 23:20:00+00:00       8      True  1.26508  1.26524  1.26508  1.26521
2021-08-23 23:25:00+00:00      11      True  1.26518  1.26520  1.26513  1.26519
df['M15'].tail(3)
                           volume  complete        o        h        l        c
time                                                                           
2021-08-23 22:45:00+00:00      64      True  1.26474  1.26520  1.26472  1.26516
2021-08-23 23:00:00+00:00      64      True  1.26514  1.26534  1.26506  1.26508
2021-08-23 23:15:00+00:00      44      True  1.26506  1.26524  1.26506  1.26519

这是我所做的一个基本模板。

我不确定如何将我拥有的数据放入“数据”中,以坚持到cerebro中,也不确定如何在我的策略中引用多个时间框架。

任何帮助都将不胜感激。

代码语言:javascript
复制
class firstStrategy(bt.Strategy):

    def __init__(self):
        self.rsi = bt.indicators.RSI_SMA(self.data.close, period=21)

    def next(self):
        if not self.position:
            if self.rsi < 30:
                self.buy(size=100)
        else:
            if self.rsi > 70:
                self.sell(size=100)


#Variable for our starting cash
startcash = 10000

#Create an instance of cerebro
cerebro = bt.Cerebro()

#Add our strategy
cerebro.addstrategy(firstStrategy)

cerebro.adddata(data)

# Set our desired cash start
cerebro.broker.setcash(startcash)

# Run over everything
cerebro.run()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-26 13:05:02

如果你有几个来自一个报价器的时间范围,你可以使用最小的,并在backtrader中重新采样:

代码语言:javascript
复制
class firstStrategy(bt.Strategy):

    def __init__(self):
        self.rsi1m = bt.indicators.RSI_SMA(self.data0.close, period=21) # rsi 1m
        self.rsi5m = bt.indicators.RSI_SMA(self.data1.close, period=21) # rsi 5m
        self.rsi15m = bt.indicators.RSI_SMA(self.data2.close, period=21) # rsi 15m

    def next(self):
        if not self.position:
            if self.rsi1m < 30:
                self.buy(size=100)
        else:
            if self.rsi1m > 70:
                self.sell(size=100)


#Variable for our starting cash
startcash = 10000

#Create an instance of cerebro
cerebro = bt.Cerebro()

#Add our strategy
cerebro.addstrategy(firstStrategy)

data = bt.feeds.PandasData(
            dataname=df['M1'],
            open='o',
            high='h',
            low='l',
            close='c',
            openinterest=-1,
            timeframe=bt.TimeFrame.Minutes,
            compression=1,
        )

# 1m data
cerebro.adddata(data, name='1m')

# 5m data
cerebro.resampledata(
    data,
    timeframe=bt.TimeFrame.Minutes,
    compression=5,
    name='5m'
    )

# 15m data
cerebro.resampledata(
    data,
    timeframe=bt.TimeFrame.Minutes,
    compression=15,
    name='15m'
    )


# Set our desired cash start
cerebro.broker.setcash(startcash)

# Run over everything
cerebro.run()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68900212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档