You are here:  Home » 量化交易与机器学习 » backtrader » 使用Indicators- backtrader中文教程

使用Indicators

Indicators可以在平台上两个地方使用:

  • 里面Strategies
  • Inside其他在action

Indicators

  1. Indicators`指标期间总是实例化__init__Strategy
  2. 指示符值(或来自其的值)被用来/检查期间next

有考虑到一个重要的公理:

  • 的任何Indicator(或值由其衍生)期间__init__声明`之前将预先计算next是called.

Let我们去操作modes.

__init__ VSnext

事作为工作的差异如下:

  • 任何operation在涉及lines对象__init__生成另一个lines object
  • Anyoperation涉及lines对象中next得到正规Python类型等的浮纱和bools.

During__init__

`中的操作的实施例__init__

hilo_diff = self.data.high - self.data.low

的可变hilo_diff保持到参考一个lines对象,它是调用next并且可以使用标准的被访问数组符号[]

它明显包含用于数据的每个棒料进给之间的差混合简单,当高和low.

This也适用lines(像那些在self.data数据饲料)和复杂的类似指标:

sma = bt.SimpleMovingAverage(self.data.close)
close_sma_diff = self.data.close - sma

现在close_sma_diff又包含了line object.

Using逻辑operatorss:

close_over_sma = self.data.close > sma

现在所产生的lines对象将包含booleans.

During阵列next

的操作的实施例(逻辑运算):

close_over_sma = self.data.close > self.sma

使用等效阵列(索引0基于符号):

close_over_sma = self.data.close[0] > self.sma[0]

在这种情况下close_over_sma产生一个boolen其结果比较两个浮点值,由[0]运算符的那些施加到self.data.closeself.sma

__init__VSnext why

逻辑简化(和与它易用性)是关键。计算和最相关联的逻辑的可在__init__保持实际被声明期间next.

其实还有一个附带的好处:speed(由于预先计算解释在开始时)

这期间产生了buy信号一个完整的例子__init__

class MyStrategy(bt.Strategy):

    def __init__(self):

        sma1 = btind.SimpleMovingAverage(self.data)
        ema1 = btind.ExponentialMovingAverage()

        close_over_sma = self.data.close > sma1
        close_over_ema = self.data.close > ema1
        sma_ema_diff = sma - ema

        buy_sig = bt.And(close_over_sma, close_over_ema, sma_ema_diff > 0)

    def next(self):

        if buy_sig:
            self.buy()

Note

Python的and经营者不能被覆盖,迫使平台定义自己的And。这同样适用于其他构造,如OrIf

应该是显而易见的,在`的“声明”的方式__init__保持的腹胀next(其中实际的战略工作情况),到minimum.

(别忘了还有一个加速因子)

Note

当逻辑变得非常复杂,涉及多个业务它通常是更好的来封装内部的Indicator.

的一些notes

In上面的例子中有已在被简化两件事backtrader相比其他平台时:

  • `声明Indicators既不得到了parent参数(如战略,而他们被创造,也不是任何形式的“注册”方法/函数尽管它是called.

    And策略将踢的计算Indicators和任何生成,因为操作的lines对象(如sma - ema

  • ExponentialMovingAverage被而不self.data

    这是故意的实例化。如果没有data通过,1st的数据parent(在这种情况下在其中被创建的策略)将是自动传递在background

Indicator Plotting

First最重要的是:

  • `声明Indicators得到自动绘制(如果cerebro.plot是叫)
  • lines从操作对象没有得到绘制(如close_over_sma
    = self.data.close > self.sma

    有一个辅助LinePlotterIndicator图表等操作如果希望用下面的方法:

    close_over_sma = self.data.close > self.sma
    LinePlotterIndicator(close_over_sma, name="Close_over_SMA)
    

    `的name参数给出的名字到single此行举行indicator.

Controlling plotting

During的Indicatorplotinfo声明可以是添加。它可以是元组的元组(2个元件),一个dictOrderedDict。它看起来像:

class MyIndicator(bt.Indicator):

    ....
    plotinfo = dict(subplot=False)
    ....

值可以稍后访问(并设置)如下(如果需要的话):

myind = MyIndicator(self.data, someparam=value)
myind.plotinfo.subplot = True

值甚至可以实例化时进行设置:

myind = MyIndicator(self.data, someparams=value, subplot=True)

subplot=True将被传递到(幕后)intantiated成员变量plotinfo的indicator.

Theplotinfo提供下列参数来控制绘图行为:

  • plot(默认值:True

    无论指示器为被绘制或not

  • subplot(默认值:True

    是否绘制在不同的窗口的指示。对于这样的指标均线默认改为False

  • plotname(默认:""

    设置plotname显示在图上。空值表示的规范将被使用的指示器的名称(class.__name__)。这有一些限制因为Python标识符不能使用,例如算术像DI + operators.

    An指示灯会声明如下:

    class DIPlus(bt.Indicator):
        plotinfo=dict(plotname="DI+")
    

    使图中的“更好”

  • plotabove(默认:False

    指标通常的数据绘制以下(那些具有subplot=True)他们已经手术。将其设置为True将使指示器所述data.

  • plotlinelabels上述绘制(默认值:False

    意味着在“指标”,“指标”。如果一个计算RSI指标的SimpleMovingAverage情节通常会显示名称“SimpleMovingAverage”为对应的标绘线。这是名字该“指标”,而不是实际的线是plotted.

    因为用户希望通常可以看到这个默认的行为很有道理一个SimpleMovingAverage已使用RSI.

    if的值被设置为创建True内部线路的实际名称SimpleMovingAverage将used.

  • plotymargin(默认值:0.0

    余量的量在所述指示器的顶部和底部离开(0.15 matplotlib情节去太远的顶部/底部所述轴和余量可以wished

  • plotyticks(默认:[])

    用来控制绘制y缩放ticks

    如果空单被通过了“Y蜱”会自动计算。对于像一个随机它可能是有意义的这个设置众所周知idustry标准,如:[20.0, 50.0, 80.0]

    有些指标提供像upperbandlowerband参数实际用于操纵在y ticks

  • plothlines(默认值:[]

    用于沿着指示器axis.

    If控制的水平线的绘制一个空的名单没有通过水平线条将drawn.

    For像一个随机它可能是有意义的绘制线众所周知idustry标准,如:[20.0, 80.0]

    有些指标提供像upperbandlowerband参数实际使用来操纵水平lines

  • plotyhlines(默认值:[]

    用于同时控制使用单个parameter.

  • plotforce plotyticks和plothlines(缺省:False

    如果由于某种原因,你认为一个指标应绘制,这是不绘制…将其设置为True作为最后resort.