在使用交易量执行订单时,反向交易经纪人模拟有一个默认策略

  • 忽略成交量

这是基于两个前提:

  • 市场交易流动性足以一次性完全吸收买/卖订单
  • 真实的体积匹配需要一个真实的世界

    一个简单的例子是Fill or Kill订单。即使到分时 分辨率和足够的成交量反向交易经纪人也不知道市场上碰巧有多少额外的参与者来区分这样的订单是否会匹配或不会匹配到该Fill部分,或者是否顺序应该是Kill

但是经纪人可以接受Volume Fillers来确定在给定时间点有多少交易量必须用于订单匹配

filler签名

backtrader生态系统中的填充器可以是任何与以下签名匹配的可调用对象:

callable(order, price, ago)

 

  • order是要执行的订单

    该对象可以访问data作为操作目标的对象、创建大小/价格、执行价格/大小/剩余大小和其他详细信息

  • price订单将被执行的位置
  • ago是按data顺序查找数量和价格元素的索引

    在几乎所有情况下,这将是0(当前时间点),但在一个角落情况下,以涵盖Close订单,这可能是-1

    例如,要访问条形音量,请执行以下操作:

barvolume = order.data.volume[ago]

__call__可调用对象可以是一个函数,也可以是支持该方法的类的实例,例如:

class MyFiller(object):
    def __call__(self, order, price, ago):
        pass

向代理添加filler

最直接的方法是使用set_filler

import backtrader as bt

cerebro = Cerebro()
cerebro.broker.set_filler(bt.broker.fillers.FixedSize())

第二种选择是完全替换broker,尽管这可能仅适用于BrokerBack已重写部分功能的子类:

import backtrader as bt

cerebro = Cerebro()
filler = bt.broker.fillers.FixedSize()
newbroker = bt.broker.BrokerBack(filler=filler)
cerebro.broker = newbroker

样本

backtrader源包含一个名为的示例,该示例volumefilling允许测试一些集成的fillers(最初是全部)

参考

class backtrader.fillers.FixedSize()

使用柱中交易量的百分比返回给定订单的执行大小。

这个百分比是用参数设置的perc

参数:

  • size(默认None值:)要执行的最大大小。如果小于大小,则执行时柱的实际交易量也是一个限制

    如果此参数的值评估为 False,则将使用柱的整个交易量来匹配订单

类 backtrader.fillers.FixedBarPerc()

使用柱中交易量的百分比返回给定订单的执行大小。

从给定价格的分配量中,将使用 perc 百分比

参数:

  • perc(默认值:100.0(有效值:0.0 - 100.0

    用于执行订单的成交量栏百分比

class backtrader.fillers.BarPointPerc()

返回给定订单的执行大小。 卷将均匀分布在高低范围内,使用 minmov 进行分区。

从给定价格的分配量中,将使用 perc 百分比

参数:

  • minmov(默认0.01

    最小价格变动。用于划分范围以在可能的价格之间按比例分配数量

  • perc(默认值:100.0(有效值:0.0 - 100.0

    分配给订单执行价格以用于匹配的交易量百分比