问题描述
下单数量和成交比例的关系是什么
解决方案
在 PTrade 量化回测环境中,set_volume_ratio 函数用于设置单笔委托的成交比例,以模拟真实交易场景中的盘口流动性限制。
1. 委托数量大于成交比例计算数量时的处理机制
根据 PTrade 官方文档的规定:假如委托下单数量大于成交比例计算后的数量,系统会按成交比例计算后的数量进行撮合成交,而差额部分(即未成交的委托数量)不会继续挂单,会被直接废弃。
这意味着,在回测中,你的单笔订单不会因为数量过大而一直处于等待成交的状态,超出流动性限制的部分会被直接取消。
2. 下单数量与成交比例的关系
set_volume_ratio(volume_ratio) 函数中的 volume_ratio 参数定义了本周期最大成交数量占本周期市场可成交总量的比例(默认值为 0.25,即四分之一)。
它们之间的关系可以通过以下公式理解:
- 本周期最大允许成交量 = 本周期市场实际总成交量 ×
volume_ratio
具体撮合逻辑如下:
- 情况 A(下单量较小):如果 你的下单数量 $\le$ 本周期最大允许成交量,那么你的订单将全部成交。
- 情况 B(下单量过大):如果 你的下单数量 $>$ 本周期最大允许成交量,那么你的订单将部分成交(成交量 = 本周期最大允许成交量),剩余未成交的部分将不再挂单。
示例说明
假设你设置了 set_volume_ratio(0.2)(即最大成交比例为 20%),在某个分钟周期内,某只股票的市场总成交量为 10,000 股。
- 本周期最大允许成交量 = 10,000 × 0.2 = 2,000 股。
- 如果你下单买入 1,500 股,因为 1,500 < 2,000,你的订单会全部成交 1,500 股。
- 如果你下单买入 3,000 股,因为 3,000 > 2,000,你的订单只会成交 2,000 股,剩下的 1,000 股会被直接取消,不会顺延到下一个周期。
代码示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 将最大成交数量设置为本周期可成交总量的二分之一 (50%)
set_volume_ratio(volume_ratio=0.5)
def handle_data(context, data):
# 假设下单量极大,系统会根据 50% 的比例截断成交,超出部分不挂单
order(g.security, 1000000)
总结:设置成交比例是为了防止回测中出现“用极大的资金买入流动性极差的股票却能瞬间全部成交”的不合理现象,使回测结果更贴近实盘。