问题描述
为什么算法交易的实际委托数量不是精确值?
解决方案
在 ptrade 量化交易平台中,算法交易的实际委托数量有时并非您在代码中计算出的精确值,这主要是由于交易所的交易规则以及 ptrade 底层的自动圆整(取整)机制所决定的。
1. 委托数量的圆整规则
根据 ptrade API 文档,为了符合交易所的申报要求,平台在处理委托下单时会自动对数量进行取整:
- 股票交易:每次买入或卖出股票时,系统会自动向下取整为 100 股的整数倍(即 1 手)。
- 可转债交易:每次买入或卖出可转债时,系统会自动向下取整为 10 张的整数倍(即 1 手)。
2. 涉及自动圆整的 API 接口
以下常用的下单接口均受此圆整规则限制:
order(security, amount):按数量买卖order_target(security, amount):指定目标数量买卖order_value(security, value):指定目标价值买卖order_target_value(security, value):指定持仓市值买卖
例如,如果您使用 order_value('600570.SS', 10000) 买入价值 10000 元的股票,假设当前股价为 33 元,理论数量为 303.03 股。ptrade 会自动将其圆整为 300 股进行委托。
3. 唯一的例外:清仓卖出
圆整规则有一个重要的例外情况:当您卖出所有持仓(清仓)时,不受 100 股或 10 张的整数倍限制。这意味着您可以顺利卖出因分红送转等原因产生的“零股”。
例如,使用 order_target('600570.SS', 0) 或 order('600570.SS', -当前全部持仓量) 时,即使持仓量是 150 股,也会全部卖出。
4. 开发者建议
为了避免圆整机制对您的策略逻辑产生意外影响(例如资金利用率不足或目标仓位偏差),建议在策略代码中:
- 自行处理取整逻辑:在调用
order等接口前,先在代码中计算好 100 的整数倍数量,做到心中有数。 - 注意日志警告:当回测或交易中实际委托数量与设定数量不一致时,ptrade 系统会在日志中输出警告信息,请密切关注日志以便排查问题。