Backtrader教程:日期时间 - 管理

  |  

在 1.5.0 版之前, backtrader 使用直接的方法来进行时间管理,因为数据源计算的任何日期时间都只是按面值使用。

对于任何用户输入也是如此,例如可以提供给任何数据源的参数fromdate (或 sessionstart)的情况

考虑到直接控制冻结的数据源以进行回溯测试,这种方法很好。很容易假设输入日期时间在进入系统之前已经得到处理。

但是在 1.5.0 中,支持实时 数据源,这强制考虑 日期时间管理。如果始终 true以下情况,则不需要进行此类管理:

  • 纽约的一位交易者交易ES-Mini。(或其中一个别名)的US/Eastern 时区

  • 柏林的一位交易者交易DAX期货。在这种情况下,CET 对于两个(或 Europe/Berling)时区都适用

上面的直接输入输出日期时间方法将起作用,例如,在柏林的交易者总是可以做这样的事情:

class Strategy(bt.Strategy):

    def next(self):

        # The DAX future opens at 08:00 CET
        if self.data.datetime.time() < datetime.time(8, 30):
            # don't operate until the market has been running 30 minutes
            return  #

当柏林的同一交易者决定进行交易时,直接接近的问题就浮出水面了ES-Mini。因为从 DST 更改为 DST 发生在一年中的不同时间点,这会导致时差在一年中的几个星期内不同步。以下方法并不总是有效:

class Strategy(bt.Strategy):

    def next(self):

        # The SPX opens at 09:30 US/Eastern all year long
        # This is most of the year 15:30 CET
        # But it is sometimes 16:30 CET or 14:30 CET if a DST switch on-off
        # has happened in the USA and not in Europe

        # That's why the code below is unreliable

        if self.data.datetime.time() < datetime.time(16, 0):
            # don't operate until the market has been running 30 minutes
            return  #

使用时区进行操作

为了解决上述情况,同时仍与直接输入输出时间方法兼容,backtrader 为最终用户提供以下功能

  • 默认情况下,平台不会触及数据源提供的日期时间

    • 最终用户可以通过以下方式覆写此输入:

    • 向数据源提供tzinput 参数。这必须是与接口兼容的对象 datetime.tzinfo 。最有可能的是,用户将提供一个 pytz.timezone 实例

    有了这个决定,内部backtrader 使用的时间被认为是格式的 UTC-like ,即:

    • 如果数据源已将其UTC 格式存储

    • 转换后通过tzinput

    • 它不是真的UTC ,但它是用户的参考,因此 UTC-like

  • 如果 data feed 可以自动确定输出的时区,这将是默认值

    这在即时馈送的情况下是有意义的,特别是在像柏林(CET 时区)的交易者使用 US/Eastern 时区交易产品这样的用例中。

    因为交易者总是得到正确的时间,在上面的例子中,开盘时间保持不变09:30 US/Eastern,而不是 15:30 CET 一年中的大部分时间都,但有时 16:30 CET 和有时 14:30 CET

  • 如果无法确定,则输出将是输入(该)时间内确定的任何内容。UTC-like

  • 最终用户可以覆盖和确定输出的实际时区

    • 向数据源提供 tz 参数。这必须是与接口兼容的对象 datetime.tzinfo 。最有可能的是,用户将提供一个 pytz.timezone 实例

注意

用户输入的参数fromdatesessionstart 期望与实际 tz参数同步,由数据源自动计算,由用户提供或保留为默认值(None这意味着日期时间的直接输入输出)

考虑到所有这些,让我们回想一下柏林交易者,交易:US/Eastern

import pytz

import bt

data = bt.feeds.MyFeed('ES-Mini', tz=pytz.timezone('US/Eastern'))

class Strategy(bt.Strategy):

    def next(self):

        # This will work all year round.
        # The data source will return in the frame of the 'US/Eastern' time
        # zone and the user is quoting '10:00' as reference time
        # Because in the 'US/Eastern' timezone the SPX index always starts
        # trading at 09:30, this will always work

        if self.data.datetime.time() < datetime.time(10, 0):
            # don't operate until the market has been running 30 minutes
            return  #

对于可以自动确定输出时区的数据来源:

import bt

data = bt.feeds.MyFeedAutoTZ('ES-Mini')

class Strategy(bt.Strategy):

    def next(self):

        # This will work all year round.
        # The data source will return in the frame of the 'US/Eastern' time
        # zone and the user is quoting '10:00' as reference time
        # Because in the 'US/Eastern' timezone the SPX index always starts
        # trading at 09:30, this will always work

        if self.data.datetime.time() < datetime.time(10, 0):
            # don't operate until the market has been running 30 minutes
            return  #

甚至比上面更少的工作。

显然MyFeedMyFeedAuto 在上面的例子中只是虚拟的名字。

注意

在撰写本文时,分配中包含的唯一可以自动确定时区的数据源是连接到盈透证券的数据源

推荐阅读

相关文章

Backtrader对逐笔报价数据重新采样

backtrader 已经可以从分钟数据中重新采样。接受价格变动数据不是问题,只需将 4 个常用字段(open、 high、 low、 close)设置为价格变动值。 但是传递要重新采样的逐笔报价数据再次生成相同的数据。作为或版本 1.1.11.88,情况已不再如此。

Backtrader教程:指针 - 开发

如果必须开发任何东西(除了一个或多个获胜策略之外),那么这个东西就是一个自定义指针。 根据作者的说法,平台内的这种开发很容易。 需要满足以下条件: 从指针派生的类(直接或从现有的子类派生) 定义它将保持lines 指针必须至少具有 1 line。

Backtrader教程:安装

要求和版本 backtrader 是独立的,没有外部依赖关系(除非要绘图) 基本要求是: Python 2.7 Python 3.2 / 3.3/ 3.4 / 3.5 pypy/pypy3 如果需要绘图,则其他要求: Matplotlib >= 1.4.

Backtrader教程:操作平台

Line 反复运算器 为了参与操作,plaftorm使用 line 反复运算器的概念。它们已经松散地模仿了Python的反复运算器,但实际上与它们无关。 策略和指针是 line 反复运算器。

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

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

Backtrader教程:Cerebro - 优化 - 改进

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

Backtrader混合时间帧

1.3.0.92版本带来了混合来自不同时间帧的数据(来自 data feeds 和/或指针)的可能性。 到版本:https://github.com/mementum/backtrader/发布/标签/1.3.0.92 背景:指示器是智能哑对象。 他们很聪明,因为他们可以进行复杂的计算。

Backtraderta-lib 集成

即使 backtrader 提供了已经 high 数量的内置指针,并且开发指针主要是定义输入,输出和以自然的方式编写公式的问题,有些人也希望使用TA-LIB。

Backtrader 多数据范例

社区中的几个主题似乎以如何跟踪订单为导向,特别是当几个data feeds在起作用时,还包括当多个订单一起工作时,

Backtrader教程:数据馈送 - 熊猫

注意 pandas 并且必须安装其依赖项 支持Pandas Dataframes似乎受到很多人的关注,他们依赖于已经可用的解析代码来分析不同的数据源(包括CSV)和Pandas提供的其他功能。 数据馈送的重要声明。 注意 这些只是 声明。不要盲目拷贝此代码。