🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

ptrade 量化交易中 order 系列下单函数有什么区别?

ptrade | 发布时间: 2026/6/1
以下内容由 EasyQuant 生成。

问题描述

order、order_target、order_value、order_target_value这几个下单函数有什么区别?

解决方案

在 ptrade 量化交易平台中,orderorder_targetorder_valueorder_target_value 是四个最常用的股票委托下单函数。它们的主要区别在于控制下单的维度(数量 vs 价值/金额)以及下单的逻辑(增量/相对量 vs 目标量/绝对量)

以下是这四个函数的详细对比与解析:

1. 核心区别速览

函数名 控制维度 下单逻辑 适用场景
order 数量 (股/张) 增量买卖:买入或卖出指定数量的标的。 明确知道要买卖多少股时(如:买入1000股)。支持国债逆回购。
order_target 数量 (股/张) 目标数量:自动计算差额,使最终持仓达到指定数量。 调仓到固定股数时(如:将持仓调整至5000股)。
order_value 价值 (元) 增量买卖:买入或卖出指定金额的标的。 按固定金额加减仓时(如:加仓10000元)。
order_target_value 价值 (元) 目标价值:自动计算差额,使最终持仓市值达到指定金额。 资金比例调仓时(如:将某只股票的仓位调整至50000元)。

2. 函数详解与代码示例

(1) order(security, amount, limit_price=None) - 按数量买卖

  • 说明:最基础的下单函数。amount 为正数表示买入,负数表示卖出。
  • 特例:这是四个函数中唯一支持国债逆回购的函数(逆回购需传入负数,且绝对值>=10)。
  • 示例
# 买入 1000 股恒生电子
order('600570.SS', 1000)
# 卖出 500 股恒生电子
order('600570.SS', -500)
# 以 39 元限价买入 100 股
order('600570.SS', 100, limit_price=39)

(2) order_target(security, amount, limit_price=None) - 指定目标数量买卖

  • 说明:系统会自动获取当前持仓,并计算需要买入或卖出的差额,使得最终持仓数量等于 amount
  • 示例
# 假设当前持有 600570.SS 股票 200 股
# 执行下句后,系统会自动买入 800 股,使最终持仓达到 1000 股
order_target('600570.SS', 1000)

# 清仓该股票(目标数量设为 0)
order_target('600570.SS', 0)

(3) order_value(security, value, limit_price=None) - 指定目标价值买卖

  • 说明:按金额下单。系统会根据当前最新价(或限价)计算出能买卖的股数(向下取整到100的倍数)。value 为正数表示买入,负数表示卖出。
  • 示例
# 买入价值约 10000 元的恒生电子股票
order_value('600570.SS', 10000)
# 卖出价值约 5000 元的恒生电子股票
order_value('600570.SS', -5000)

(4) order_target_value(security, value, limit_price=None) - 指定持仓市值买卖

  • 说明:系统会自动计算当前该股票的持仓市值,并买入或卖出差额部分,使得最终持仓市值接近 value
  • 示例
# 假设当前持有 600570.SS 市值 20000 元
# 执行下句后,系统会自动买入约 30000 元的股票,使总市值达到 50000 元
order_target_value('600570.SS', 50000)

# 清仓该股票(目标市值设为 0)
order_target_value('600570.SS', 0)

3. 实盘交易中的重要注意事项(避坑指南)

在使用带有 target 字眼的函数(order_targetorder_target_value)时,在实盘/模拟盘交易环境中需要特别谨慎:

  1. 持仓同步时滞导致重复下单
    • 实盘中,柜台返回持仓数据通常有延迟(例如 6 秒左右)。
    • 如果在短时间内(如一个 handle_data 周期内或连续的 tick 中)多次调用 order_target,由于持仓数量尚未更新,系统会认为目标未达成,从而重复发送买入/卖出委托
  2. 未成交订单的影响
    • 如果第一笔委托未完全成交且未撤单,再次调用 order_target 时,引擎可能不会将“在途委托”计算在内,同样会导致重复下单。

建议

  • 在低频策略(如日线调仓)中使用 target 类函数较为安全。
  • 在高频策略或分钟/Tick级策略中,建议优先使用 orderorder_value,并在代码中自行维护一个逻辑仓位变量,或者在下单前严格检查 get_open_orders()(未完成订单)和 get_position()(当前持仓),以避免重复下单风险。