Backtrader递归指针

  |  

backtrader的最初目标之一是:

  • 能够快速制作指针原型以测试新想法

它不一定是一个完美的指针,但能够快速轻松地开发它们确实会有所帮助。为了确认设计是正确的,反向交易者标准库中的第一个指针是指数移动平均线(又名 EMA),其定义为:递归

笔记

琐事:正如您想像的那样,一个指针是 SimpleMovingAverage

由于如何开发递归指针的问题已发布在反向交易者社区中,让我们开发一个快速的ExponentialMovingAverage指针。

递归指针,如

  • 它使用先前的值来计算当前值

例如,您可以在Wikipedia - Exponential Moving Average中查看数学

如果您有足够的勇气阅读所有内容,您就会发现该周期是用来计算指数平滑的。我们会使用它。

为了解决计算第一个值的难题,行业决定使用前一period值的简单平均值。

作为杠杆,我们将使用bt.indicators.PeriodN

  • 已经定义了一个period参数

  • 通知框架最终用户使用的实际period

参见其定义: Docs - Indicator Reference

然后让我们开发我们的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中提供种子值,其中

  • 当达到指针的最短预热期时,将调用一次。

    next不同,它将为传递到系统中的每个新数据值调用

nextstart的默认实现只是将任务委托给next ,对于大多数指针(例如简单移动平均线)来说,这是正确的做法。但在这种情况下,覆盖和提供种子值是关键。

沿着数据绘制

作为移动平均线,如果指针绘制在与其计算平均值的数据相同的轴上,那就太好了。因为我们继承自PeriodN ,所以绘图的默认值是(参见文档):

subplot=True

这当然意味着将为我们的指针创建一个subplot (图表上的另一个轴)。这很容易被覆盖。

import backtrader as bt

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

并做了。如果您想控制更多绘图选项,请查看Docs - Plotting

祝你好运!

推荐阅读

相关文章

Backtrader订单历史

通过发布1.9.55.122, backtrader 现在可用于评估一组外部订单的性能。

Backtrader实际使用方式

最后,似乎已经付出了开发 backtrader是值得的。 在观察 last 周的欧洲市场时,似乎世界末日了,一位朋友问我是否可以看看我们图表包中的数据,看看与以前类似情况相比,下跌幅度如何。 当然可以,但我说我可以做的不仅仅是查看图表,因为我可以快速: 创建一个快速LegDown 指示器来测量跌落的范围。

Backtrader逃离 OHLC 土地

在backtrader的概念和开发过程中应用的关键概念之一是灵活性。 Python 的元编程和自省功能曾经是(现在仍然是)保持许多东西灵活同时仍然能够交付的基础。一篇旧帖子显示了扩展概念。

Backtrader教程:日志记录 - 编写器

将以下内容写出到流中: csv 流,

BacktraderPyFolio 集成

注意 2017年2月 pyfolio API 已更改,不再 create_full_tear_sheet 具有 gross_lev 作为命名参数的参数。

Backtrader绘制日期范围

该版本1.9.31.x 增加了制作部分绘图的功能。 使用策略实例中保存的完整时间戳数组的索引 或者使用实际datetime.date 或 datetime.datetime 实例来限制必须绘制的内容。 一切都超过标准cerebro.plot。

Backtrader教程:Cerebro - 优化 - 改进

backtrader版本1.8.12.99改进了在多处理过程中管理data feeds和结果的方式。

Backtrader python 隐藏的细节

只有当遇到 backtrader 的真实用户时,人们才能意识到平台中使用的抽象和Python功能是否有意义。 在不撇开python的座右铭的情况下, backtrader 试图为用户提供尽可能多的控制权,同时通过将Python提供的隐藏功能付诸行动来简化使用。 第一个示例是系列文章的第一篇。

Backtrader策略选择

最初的策略选择方法使用两个策略,手动注册和一个简单的[0, 1]列表来决定哪个是策略的目标。因为 Python 为元类提供了许多自省的可能性,所以实际上可以自动化该方法。

Backtrader递归指针

backtrader的最初目标之一是:能够快速制作指针原型以测试新想法它不一定是一个完美的指针,但能够快速轻松地开发它们确实会有所帮助。为了确认设计是正确的,反向交易者标准库中的第一个指针是指数移动平均线(又名 EMA),其定义为:递归。