问题描述
/
解决方案
在使用 ptrade 的 order_value(指定目标价值买入)函数时,实际委托的买入数量是由系统根据您设置的金额和当前股票价格自动计算得出的。您可能会发现实际买入的数量与您用计算器算出的理论值不完全一致,这主要是由于 A股市场的交易规则 以及 ptrade 底层的取整逻辑 决定的。
1. A股买入的“100股(1手)”整数倍限制
根据 A 股市场的交易规则,买入股票的数量必须是 100 股的整数倍。因此,order_value 在计算出理论买入股数后,会向下取整到最接近的 100 的倍数。
计算公式:
实际委托股数 = 向下取整 ( 设定买入金额 / 委托价格 / 100 ) * 100
举个例子:
假设您调用 order_value('600570.SS', 10000),希望买入价值 10000 元的恒生电子,当前最新价为 33 元。
- 理论股数 = 10000 / 33 ≈ 303.03 股。
- 系统取整 = 向下取整到 100 的倍数,即 300 股。
- 实际消耗资金 = 300 * 33 = 9900 元(不含手续费)。
这就是为什么您设置了 10000 元,但实际只买入了 300 股(而不是 303 股),且实际花费金额小于设定金额的原因。
2. ptrade 官方文档的取整说明
根据 ptrade API 文档的明确规定:
- 股票交易:该函数在委托股票时取整 100 股。
- 可转债交易:该函数在委托可转债时取整 10 张。
- 卖出特例:卖出所有股票时不受 100 股整数倍的限制(即如果因为分红送转产生了零股,卖出时可以一次性卖出零股)。
3. 价格波动导致的影响
如果您在使用 order_value 时没有传入 limit_price(限价)参数,系统在交易场景下会默认使用行情快照的最新价进行报单。由于行情是实时波动的,计算股数时使用的最新价可能与您预期下单时的价格有微小差异,这也会导致最终计算出的 100 股整数倍数量与您的预期产生偏差。
总结与建议
- 资金预留:由于向下取整的机制,
order_value实际消耗的资金通常会小于或等于您设定的value。 - 精确控制:如果您对买入的股数有严格的精确要求,建议先在代码中自行获取最新价(如通过
get_snapshot),手动计算好 100 的整数倍股数后,改用order(security, amount)函数按指定数量下单。