You are here:  Home » 量化交易与机器学习 » backtrader » 递归指示器Developing a Recursive Indicator (with a seed)- backtrader 中文教程

开发一个递归指示器(含种子)

一的backtrader是最初的目标:

  • 能够快速原型指标测试新ideas

这并不一定是一个完美的指标,但能够快速,轻松地开发他们确实帮助。为了确认设计是右击,第一个指标是在标准库backtrader是一个Exponential
Moving Average
(又名EMA),其通过定义是:recursive.

Note

花絮:你可能想象1st曾经指标是一个SimpleMovingAverage

因为如何开发一个递归指标的问题已发布在该backtrader社区让我们建立一个快速的ExponentialMovingAverage喜欢the

It indicators.

  • A递归指示器使用以前的值来计算当前value

You可以看到数学例如在维基百科 – 指数移动Average

If你已经够勇敢再读这一切,你会看到,周期被用于计算Exponential Smoothing。我们将使用it.

为了解决上述难题为第一值的industry的计算定居在使用以前的periodvalues.

As杠杆,我们将使用bt.indicators.PeriodN这简单平均:

  • 已经定义了periodparameter
  • Informs关于实际period使用结束user

See其定义的框架:文件 – 指示器Reference

Let的然后开发我们的EMA

import backtrader as bt

class EMA(bt.indicators.PeriodN):
    params = {"period": 30}  # even if defined, we can redefine the default value
    lines = ("ema",)  # our output line

    def __init__(self):
        self.alpha = 2.0 / (1.0 + self.p.period)  # period -> exp smoothing factor

    def nextstart(self):  # calculate here the seed value
        self.lines.ema[0] = sum(self.data.get(size=self.p.period)) / self.p.period

    def next(self):
        ema1 = self.lines.ema[-1]  # previous EMA value
        self.lines.ema[0] = ema1 * (1.0 - self.alpha) + self.data[0] * self.alpha

几乎谈何容易。关键是种子值在规定nextstart,which

  • Will被调用一次,当最小warmp期指示器的具有被met.

    As反对next这将随即要求每个新数据被输送到

只是代表工作的systemnextstartThe默认实现价值next这对于大多数的指标(例如,Simple Moving Average)是正确的事做。但是,在这种情况下覆盖并提供种子值沿着data

的key.

作为一个移动平均线,这将是很好,如果指标在同绘轴作为其计算平均的数据。因为我们继承从PeriodN用于绘图的默认值是(看到它在文档):

subplot=True

这当然意味着,subplot(另一图表上轴)将是我们的指标创建的。这可以很容易overridden.

import backtrader as bt

class EMA(bt.indicators.PeriodN):
    plot = dict(subplot=False)

And完成。如果你想控制更多的绘图选项检查文件 – !Plotting

Good运气