参数说明

参数说明 #

如下是 Cerebro 类的详细说明。

实例化参数 #

参数默认值说明
preloadTrue是否预加载传递给策略的不同数据源。
runonceTrue以矢量化模式计算指标,从而提高整个系统的性能。
注: 策略和观察者将始终基于事件运行。
liveFalse如果没有数据报告为实时(通过数据的islive方法,但用户仍希望以实时模式运行,可将此参数设为true。
maxcpusNone同时使用多少核心进行优化,默认 None,即启用所有可用的 CPU 核。
stdstatsTrue)如果为True,将添加默认观察者:经纪人(现金和价值)、交易和买卖。
oldbuysellFalsestdstats 为 True 且自动添加观察者,此开关控制买卖观察者的主要行为。
oldtradesFalse如果stdstats为True 且自动添加观察者,此开关控制交易观察者的主要行为。
exactbarsFalse
  • - False:默认值,将存储在 Line 中的值都保存到内存。
  • -True1:所有Line对象的内存使用减少至计算最小周期。
    • 如果简单移动平均线的周期为30,则底层数据将始终有一个30条的运行缓冲区,以允许计算简单移动平均线。
    • 此设置将停用preloadrunonce
    • 使用此设置还将停用绘图。
  • -1:策略级别的数据源和指标/操作将保留所有数据在内存中。
    • RSI 通过指标UpDay计算,不会将它的所有数据保留内存。
    • 这允许保持绘图和预加载活动。
    • runonce将被停用。
  • -2:作为策略属性的数据源和指标将保留所有点在内存中。
    • 例如:RSI内部使用指标UpDay进行计算。此子指标将不保留所有数据在内存中。
    • 如果在__init__中定义了a = self.data.close - self.data.high,那么a将不保留所有数据在内存中。
    • - 这允许保持绘图和预加载活动。
    • runonce将被停用。
objcacheFalse实验选项,用于实现 Line 对象的缓存并减少它们的数量。示例来自UltimateOscillator
bp = self.data.close - TrueLow(self.data) 
# -> 创建另一个 TrueLow(self.data)
tr = TrueRange(self.data)
如果为True,TrueRange内部的第二个TrueLow(self.data)将匹配bp计算中的签名,并将被重用。可能发生的极端情况是这会使线对象超出其最小周期并导致问题,因此被禁用。
writerFalse如果设置为True,将创建一个默认的WriterFile,它将打印到标准输出。它将被添加到策略中(除了用户代码添加的任何其他编写器)。
tradehistoryFalse如果设置为True,它将激活所有策略中每个交易的更新事件日志记录。也可以通过策略方法set_tradehistory在每个策略基础上完成。
optdatasTrue如果为 True 且在优化(并且系统可以预加载和使用runonce),则数据预加载将仅在主进程中完成,以节省时间和资源。测试显示,执行时间从83秒减少到66秒,约20%的速度提升。
optreturnTrue如果为True,优化结果将不会是完整的策略对象(和所有数据、指标、观察者…),而是具有以下属性的对象(与策略相同):
params(或p执行策略时的参数。
analyzers策略已执行的分析器。大多数情况下,仅需要分析器和参数来评估策略的性能。如果需要详细分析生成的值(例如指标),请将其关闭。测试显示,执行时间提高了13% - 15%。结合optdatas,总收益增加到32%。
oldsyncFalse从版本1.9.0.99开始,多个数据(相同或不同时间框架)的同步已更改,以允许不同长度的数据。如果希望使用数据0作为系统主控的数据的旧行为,请将此参数设置为True。
tzNone为策略添加全局时区。参数tz可以是:
  • None:在这种情况下,策略显示的日期时间将是UTC,这一直是标准行为。
  • pytz实例。将用作将UTC时间转换为所选时区。
  • 字符串。将尝试实例化pytz实例。
  • 整数。对于策略,使用self.datas可迭代对象中相应数据的相同时区(0将使用data0的时区)。
cheat_on_openFalse将调用策略的next_open方法。

这发生在next之前,并且在经纪人有机会评估订单之前。指标尚未重新计算。这允许发布考虑前一天指标的订单,但使用开盘价进行股份计算。

对于cheat_on_open订单执行,还要调用 cerebro.broker.set_coo(True)或实例化一个BackBroker(coo=True)(coo表示cheat-on-open)或将broker_coo参数设置为True。除非在下文中禁用,否则Cerebro会自动执行此操作。
broker_cooTrue这将自动调用经纪人的set_coo方法,并将其设置为True以激活cheat_on_open执行。只有在cheat_on_open也为True时才会执行。
quicknotifyFalse在传递下一个价格之前立即传递经纪人通知。对于回测没有影响,但对于实时经纪人,通知可能在条传递之前很久就发生。当设置为True时,将尽快传递通知(请参阅实时数据源中的qcheck)。为了兼容性,设置为False。可能会更改为True。

成员方法 #

  • addstorecb(callback)

添加一个回调以获取将由notify_store方法处理的消息。回调的签名必须支持以下内容:

callback(msg, *args, **kwargs)

实际接收的msg*args**kwargs是实现定义的(完全依赖于数据/经纪人/存储),但通常应该期望它们是可打印的,以便接收和实验。

  • notify_store(msg, *args, **kwargs)

在cerebro中接收存储通知。此方法可以在Cerebro子类中覆盖。实际接收的msg*args**kwargs是实现定义的(完全依赖于数据/经纪人/存储),但通常应该期望它们是可打印的,以便接收和实验。

  • adddatacb(callback)

添加一个回调以获取将由notify_data方法处理的消息。回调的签名必须支持以下内容:

callback(data, status, *args, **kwargs)

实际接收的*args**kwargs是实现定义的(完全依赖于数据/经纪人/存储),但通常应该期望它们是可打印的,以便接收和实验。

  • notify_data(data, status, *args, **kwargs)

在cerebro中接收数据通知。此方法可以在Cerebro子类中覆盖。实际接收的*args**kwargs是实现定义的(完全依赖于数据/经纪人/存储),但通常应该期望它们是可打印的,以便接收和实验。

  • adddata(data, name=None)

将数据源实例添加到混合中。如果name不为None,将放入data._name,用于装饰/绘图目的。

  • resampledata(dataname, name=None, **kwargs)

添加数据源以供系统重新采样。如果name不为None,将放入data._name,用于装饰/绘图目的。任何其他如timeframecompressiontodate等支持的参数将透明地传递。

  • replaydata(dataname, name=None, **kwargs)

添加数据源以供系统重放。如果name不为None,将放入data._name,用于装饰/绘图目的。任何其他如timeframecompressiontodate等支持的参数将透明地传递。

  • chaindata(*args, **kwargs)

将多个数据源链接为一个。如果作为命名参数传递并且name不为None,将放入data._name,用于装饰/绘图目的。如果为None,则使用第一个数据的名称。

  • rolloverdata(*args, **kwargs)

将多个数据源链接为一个。如果作为命名参数传递并且name不为None,将放入data._name,用于装饰/绘图目的。如果为None,则使用第一个数据的名称。任何其他kwargs将传递给RollOver类。

  • addstrategy(strategy, *args, **kwargs)

为单次运行添加策略类。在运行时进行实例化。argskwargs将在实例化期间按原样传递给策略。返回的索引可以与添加其他对象(如Sizer)引用兼容。

  • optstrategy(strategy, *args, **kwargs)

为优化添加策略类。在运行时进行实例化。argskwargs必须是包含要检查值的可迭代对象。例如:如果策略接受参数period,为了优化目的,调用optstrategy如下:

cerebro.optstrategy(MyStrategy, period=(15, 25))

这将执行值为15和25的优化。而:

cerebro.optstrategy(MyStrategy, period=range(15, 25))

将以period值15 -> 25(25不包含,因为Python中的范围是半开的)执行MyStrategy。如果传递了一个参数但不应优化,调用如下:

cerebro.optstrategy(MyStrategy, period=(15,))

注意period仍然作为一个可迭代对象传递……只有一个元素。backtrader无论如何都会尝试识别如下情况:

cerebro.optstrategy(MyStrategy, period=15)

如果可能,将创建一个内部伪可迭代对象。

  • optcallback(cb)

将回调添加到回调列表中,当每个策略运行时将与优化一起调用。签名:cb(strategy)

  • addindicator(indcls, *args, **kwargs)

添加指标类到混合中。在传递策略中进行实例化。

  • addobserver(obscls, *args, **kwargs)

添加观察者类到混合中。在运行时进行实例化。

  • addobservermulti(obscls, *args, **kwargs)

添加观察者类到混合中。在运行时进行实例化。将为系统中的每个数据添加一次。一个用例是观察单个数据的买入/卖出观察者。一个反例是观察系统范围值的CashValue

  • addanalyzer(ancls, *args, **kwargs)

添加分析器类到混合中。在运行时进行实例化。

  • addwriter(wrtcls, *args, **kwargs)

添加编写器类到混合中。在cerebro中进行实例化。

  • run(**kwargs)

执行回测的核心方法。传递给它的任何kwargs将影响实例化时Cerebro的标准参数值。如果cerebro没有数据,该方法将立即退出。返回值不同:

无优化: 包含使用addstrategy添加的策略类实例的列表。
优化: 包含使用addstrategy添加的策略类实例的列表的列表。

  • runstop()

如果从策略内部或其他地方(包括其他线程)调用,将尽快停止执行。

  • setbroker(broker)

为此策略设置特定的经纪人实例,替换从cerebro继承的经纪人。

  • getbroker()

返回经纪人实例。也可以通过broker属性访问。

  • plot(plotter=None, numfigs=1, iplot=True, start=None, end=None, width=16, height=9, dpi=300, tight=True, use=None, **kwargs)

绘制cerebro中的策略。如果plotter为None,将创建一个默认的Plot实例,并在实例化期间将kwargs传递给它。

`numfigs`将图表分成所指示的数量,以减少图表密度。<br/>
`iplot`:如果为True且在笔记本中运行,图表将内联显示。<br/>
`use`:将其设置为所需matplotlib后端的名称。它将优先于`iplot`。<br/>
`start`:策略日期时间线数组的索引或表示绘图开始的`datetime.date``datetime.datetime`实例。<br/>
`end`:策略日期时间线数组的索引或表示绘图结束的`datetime.date``datetime.datetime`实例。<br/>
`width`:保存图形的宽度(以英寸为单位)。<br/>
`height`:保存图形的高度(以英寸为单位)。<br/>
`dpi`:保存图形的质量(以每英寸点数为单位)。<br/>
`tight`:仅保存实际内容而不保存图形框架。
  • addsizer(sizercls, *args, **kwargs)

添加一个Sizer类(和args),作为添加到cerebro的任何策略的默认定量器。

  • addsizer_byidx(idx, sizercls, *args, **kwargs)

idx添加一个Sizer类。此idx是与addstrategy返回的索引兼容的引用。只有由idx引用的策略将收到此大小。

  • add_signal(sigtype, sigcls, *sigargs, **sigkwargs)

向系统添加一个信号,稍后将添加到SignalStrategy中。

  • signal_concurrent(onoff)

如果将信号添加到系统并且concurrent值设置为True,将允许并发订单。

  • signal_accumulate(onoff)

如果将信号添加到系统并且accumulate值设置为True,当已在市场中时进入市场,将允许增加头寸。

  • signal_strategy(stratcls, *args, **kwargs)

添加可以接受信号的SignalStrategy子类。

  • addcalendar(cal)

向系统添加一个全局交易日历。单个数据源可能有单独的日历覆盖全局日历。cal可以是TradingCalendar的实例、字符串或pandas_market_calendars的实例。字符串将实例化为PandasMarketCalendar(需要系统中安装模块pandas_market_calendar)。如果传递的是TradingCalendarBase的子类(而不是实例),它将被实例化。

  • addtz(tz)

也可以使用参数tz完成。为策略添加全局时区。参数tz可以是:

可选项描述
None在这种情况下,策略显示的日期时间将是UTC,这一直是标准行为。
pytz 实例将用作将UTC时间转换为所选时区。
字符串将尝试实例化pytz实例。
整数对于策略,使用self.datas中相应数据的时区(0就用data0的时区)。
  • add_timer(when, offset=datetime.timedelta(0), repeat=datetime.timedelta(0), weekdays=[], weekcarry=False, monthdays=[], monthcarry=True, allow=None, tzdata=None, strats=False, cheat=False, *args, **kwargs)

安排一个计时器以调用notify_timer。参数:

参数
when可以是datetime.time实例(见下文的tzdata),bt.timer.SESSION_START以参考会话开始,bt.timer.SESSION_END以参考会话结束。
offset必须是datetime.timedelta实例,用于偏移值when。在与SESSION_STARTSESSION_END组合使用时具有有意义的用途,以指示例如在会话开始后15分钟调用计时器。
repeat必须是datetime.timedelta实例,表示在第一次调用后,是否在同一会话内按计划的重复增量安排进一步的调用。
weekdays一个排序的可迭代对象,包含表示计时器可以实际调用的天数(iso代码,周一是1,周日是7)。如果未指定,计时器将在所有天都有效。
weekcarry默认:False,如果为True并且未看到工作日(例如:交易假期),计时器将在第二天执行(即使在新的一周内)。
monthdays一个排序的可迭代对象,包含表示每月应执行计时器的天数。例如总是在每月的15日。如果未指定,计时器将在所有天都有效。
monthcarry默认:True,如果未看到该天(周末、交易假期),计时器将在下一个可用日执行。
allow默认:None,一个回调,接收一个datetime.date实例,如果日期被允许用于计时器则返回True,否则返回False。
tzdata可以是None(默认)、一个pytz实例或一个数据源实例。
  • None:按面值解释when(这意味着将其处理为UTC,即使不是)。
  • - pytz实例:when将被解释为在所选时区本地时间指定。
  • 数据源实例:when将被解释为在数据源实例的tz参数指定的本地时间。
注意,如果whenSESSION_STARTSESSION_END并且tzdata为None,将使用系统中的第一个数据源(即self.data0)作为参考,以找出会话时间。
strats默认:False,也调用策略的notify_timer
cheat默认:False)如果为True,将在经纪人有机会评估订单之前调用计时器。这打开了发布基于开盘价的订单的机会,例如在会话开始前。
*args将传递给notify_timer的任何额外args。
**kwargs将传递给notify_timer的任何额外kwargs。返回值:创建的计时器。
  • notify_timer(timer, when, *args, **kwargs)

接收计时器通知,其中timer是由 add_timer 返回的计时器,when是调用时间。argskwargs是传递给add_timer的任何附加参数。实际的when时间可能稍后,但系统可能无法提前调用计时器。此值是计时器值,而不是系统时间。

  • add_order_history(orders, notify=True)

将订单历史直接添加到经纪人以进行性能评估。

orders:是一个可迭代对象(例如:列表、元组、迭代器、生成器),其中每个元素也是一个具有以下子元素(2种格式可能)的可迭代对象(具有长度):[datetime, size, price][datetime, size, price, data]注意,必须按日期时间升序排序(或生成排序的元素)。

具体说明如下:

参数描述
datetime是Python的日期/日期时间实例或格式为YYYY-MM-DD[THH:MM:SS[.us]]的字符串,其中括号内的元素是可选的。
size是一个整数(正数表示买入,负数表示卖出)。
price是一个浮点数/整数。
data如果存在,可以取以下任何值:
  • None - 将使用第一个数据源作为目标。
  • integer - 将使用该索引(在Cerebro中插入顺序)的数据。
  • string - 将使用具有该名称的数据,例如使用cerebro.adddata(data, name=value)分配的名称。

notify(默认:True):如果为True,系统中插入的第一个策略将收到根据每个订单的信息创建的人工订单通知。

注意

描述中隐含的是添加作为订单目标的数据源。例如,这是分析器(如跟踪回报)的必要条件。