经纪人-通过Fillers设置交易量/仓位大小 – backtrader中文教程
在使用交易量执行订单时,反向交易经纪人模拟有一个默认策略:
- 忽略成交量
这是基于两个前提:
- 市场交易流动性足以一次性完全吸收买/卖订单
- 真实的体积匹配需要一个真实的世界
一个简单的例子是
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
)分配给订单执行价格以用于匹配的交易量百分比