Backtrader 文档学习-Strategy

Backtrader 文档学习-Strategy

策略通过方法的形式体现生命周期。
是BackTrader的核心模块,需要好好研读。

1.Strategy

  • (1)怀胎
    在init中创建indicator和需要的属性值
  • (2)出生
    start方法,策略启动,start默认是空方法
  • (3)儿童
    prenext方法,indicator 在init初始化的时候设置了成熟期的时间,称为最小周期。上面在 __init__创建了一个周期=15的SimpleMovingAverage。
  • (4)成人
    next方法,一旦系统生成15个bar,SMA缓存了足够的用于启动的数据,策略就可以真正执行。
    nextstart方法执行一次,是从prenext切换到next的标志,nextstart默认执行是调用next方法。
  • (5)生育
    策略中并没有真正的生育,但是从某种意义上来说是存在的,因为如果优化用不同的参数的话,系统会实例化多次。算是生育吧
  • (6)死亡
    stop方法,系统通知策略重启,恢复所有设置,默认是空方法。

策略就像现实世界中的交易员一样,会在事件发生时得到通知。实际上在每一个next循环在回测过程中 :

  • 通过notify_order(order)获得订单状态变化的通知
  • 通过notify_trade(trade)通知所有开仓/更新/平仓交易
  • 通过notify_cashvalue(cash,value)通知在broker中当前现金和投资组合
  • 通过notify_fund(cash,value,fundvalue,shares)跟踪broker中当前现金和投资组合,以及基金价值和份额
  • 通过notify_store(msg,*args,**kwargs)实现特定事件 ,请参见Cerebro的关于store的说明。event将被传递给策略,即使已经被传递给cerebro实例(通过重写notify_store方法或通过回调)

策略像交易者有机会在市场期间通过next方法试图实现获利

  • buy方法 是做多或减少/平仓空头的头寸
  • sell方法 是做空或减少/平仓多头的头寸
  • close方法 是平仓存在的仓位
  • cancel方法 是取消尚未执行的订单

2. How to Buy/Sell/Close

order常用的方法是Buy和Sell方法。当被调用时,它们返回一个订单(或子类)实例作参考。该订单具有唯一的参考标识符,可用于对比。

order的参数:

  • data(默认:无) 必须为其创建订单的数据。如果没有,则将使用系统中的第一个数据,即self.datas[0]或self.data0(也称为self.data)
  • size(默认值:无) 用于订单的数据单位的大小(正值)。 如果没有,将使用通过getsizer检索的sizer来确定大小。
  • price(默认值:无) 如要设置的价格(实时broker会对其进行限制,如果格式不符合最小报价单位要求)
    None对market订单和close订单是有效(市价决定价格)
    对于limit限价单、stop止损单和stoplimit单,该值price决定是否触发,(在限价单limit的情况下,触发点显然是订单应该匹配price)
  • exectype(默认值:None) 执行订单的类型:
    • Order.Market or None,市价单将以next可用价格执行。回测中,next使用第二天的开盘价执行订单。
    • Order.Limit,只能以给定价格或更低(好)价格执行的订单
    • Order.Stop,止损价格被触发,和订单一样执行。
    • Order.StopLimit,以价格触发的订单,隐含限价订单执行,价格由pricelimit执行,理解应该是止损单的止损价格。
    • numeric value: 如果是一个与matplotlib编码中的日期时间相对应的值(backtrader使用的日期时间),就是该数字能转换成正确的日期,可以生成一个在该时间(截止日期)之前有效的订单。

如果backtrader直接支持的4种订单执行类型还不够用,例如在交互时broker,可以将作为kwargs传递:

orderType='LIT', lmtPrice=10.0, auxPrice=9.8

将重写backtrader创建的设置,并生成一个触及限价单,触及价格为9.8,限价为10.0。

3.Information Bits

策略的长度总是等于主数据(datas[0])的长度,可以用len(self) 。
如果正在replay数据或正载入数据,并且新tick正在到达相同的时间点,调用next而不改变长度 。(没有理解 ?)

4.Member Attributes

未完待续

你可能感兴趣的:(BackTrader,数据分析,量化,BackTrader)