backtrader指南

目录Backtrader基础概念Data FeedsShortcurs for Data FeedsOmitting the Data FeedsLineLines declarationAccessing `lines` in Data FeedLines lenInheritance of Lines and ParamsIndexing: 0 and -1SlicingGetting SliceLines:DELAYED indexingLines CouplingOperators, using n
摘要由CSDN通过智能技术生成

Backtrader

用于量化交易的机器人,可以对于数据进行有效回测和指定策略等。

基础概念

Data Feeds

平台工作的基础将通过策略完成。这些将通过数据馈送,数据馈送以数组的形式自动提供给策略的成员变量,并提供数组位置的快捷方式。

class MyStrategy(bt.Strategy):
    params = dict(period=20)
    
    def __init__(self):
        sma = btind.SimpleMovingAverage(self.datas[0], period=self.params.period)
    
    ...
    
cerebro = bt.Cerebro()

...

data = btfeeds.MyFeed(...)
cerebro.adddata(data)

...

cerebro.addstrategy(MyStrategy, period=30)
...

Tip:

  • *args**kwargs该策略的__init__方法可以接收使用
  • self.datas为一个数组/列表/可迭代对象,需要至少有一项数据

Shortcurs for Data Feeds

  • self.data表示self.datas[0]
  • self.dataX表示self.datas[X]
class MyStrategy(bt.Strategy):
    params = dict(period=20)
    
    def __init__(self):
        sma = btind.SimpleMovingAverage(self.data, period=self.params.period)

Omitting the Data Feeds

class MyStrategy(bt.Strategy):
    params = dict(period=20)
    
    def __init__(self):
        sma = btind.SimpleMovingAverage(period=self.params.period)

Line

大部分对象都包含一个Line对象,用户角度上来看

  • 它可以容纳一个或多个线,是一系列的线,是一组值的数组,放置在图表中表现为一条线

比较经典的线是由股票收盘价形成的线,称为收盘时线

class MyStrategy(bt.Strategy):
    params = dict(period=20)
    
    def __init__(self):
        self.movav = btind.SimpleMovingAverage(self.data, period=self.params.period)
    
    def next(self):
        if self.movav.lines.sma[0] < self.data.lines.close[0]:
            print('平均线高于收盘价格')

常见的缩写形式

  • xxxx.lines -> xxx.l
  • xxx.lines.name -> xxx.line_name
  • self.data_name -> self.data.lines.name
  • self.data1_name -> self.data1.lines.name

Lines declaration

定义对象中的线对象,可以采用line的类参数。

class SimpleMovingAverage(Indicator):
    lines = ('sma', )

访问:

  • self.lines[0] -> self.lines.sma
  • self.line -> self.lines[0]
  • self.lineX -> self.lines[X]
  • self.line_X -> self.lines[X]
  • self.dataY -> self.data.lines[Y]
  • self.dataX_Y -> self.data[X].lines[Y]

Accessing lines in Data Feed

通过省略形式访问lines数据

data = btfeeds.BacktraderCSVData(dataname="mydata.csv")
...

class MyStrategy(bt.Strategy):
    ...
    
    def next(self):
        if self.data.close[0] > 30.0:
            ...

Lines len

线对象

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值