🚀 AI 一键生成 joinquant 策略代码

JoinQuant 四大下单函数深度解析:如何选择最适合你策略的交易指令?

joinquant | 发布时间: 2025/12/18
以下内容由 EasyQuant 生成。

问题描述

请详细解释一下按股数下单、按目标股数下单、按价值下单和按目标价值下单这几个函数有什么区别?

解决方案

在聚宽(JoinQuant)的策略开发中,下单函数是最核心的操作接口。这四个函数主要分为两类维度:按“数量”还是按“金额”,以及按“增量”还是按“目标”

以下是这四个函数的详细区别解析:

1. 函数分类概览

维度 增量下单 (调整多少) 目标下单 (调整到多少)
按股数 (Amount) order order_target
按价值 (Value) order_value order_target_value

2. 详细解释

(1) order(security, amount, ...) —— 按股数下单

  • 含义:在当前持仓的基础上,增加减少指定数量的股票。
  • 参数逻辑
    • amount正数:买入指定股数。
    • amount负数:卖出指定股数。
  • 适用场景:定投策略(每次买100股)、网格交易(每跌一格买100股)。
  • 示例
    • 当前持有 0 股,执行 order('000001.XSHE', 100) $\rightarrow$ 最终持有 100 股。
    • 当前持有 500 股,执行 order('000001.XSHE', -200) $\rightarrow$ 最终持有 300 股。

(2) order_target(security, amount, ...) —— 按目标股数下单

  • 含义:通过买入或卖出,使该标的的最终持仓数量等于指定的 amount
  • 参数逻辑
    • 系统会自动计算(目标股数 - 当前持仓),得出需要买入还是卖出。
    • amount 必须为非负数(0 或 正数)。
  • 特殊机制:使用此接口时,若该标的有未完成的挂单,系统通常会先撤销未完成订单,以确保仓位调整准确。
  • 适用场景:清仓(设为0)、调仓(固定持仓数量)。
  • 示例
    • 当前持有 100 股,执行 order_target('000001.XSHE', 300) $\rightarrow$ 系统自动买入 200 股,最终持有 300 股。
    • 当前持有 500 股,执行 order_target('000001.XSHE', 0) $\rightarrow$ 系统自动卖出 500 股,最终持有 0 股(清仓)。

(3) order_value(security, value, ...) —— 按价值下单

  • 含义:在当前持仓的基础上,买入卖出指定金额对应的股票数量。
  • 参数逻辑
    • value正数:买入该金额对应的股票。
    • value负数:卖出该金额对应的股票。
    • 系统会自动根据当前股价计算股数:股数 = value / 当前价格(股票会自动向下取整到100的倍数)。
  • 适用场景:资金分配策略(如:用剩余资金的50%买入某股票)。
  • 示例
    • 股价 10 元,执行 order_value('000001.XSHE', 10000) $\rightarrow$ 买入约 1000 股(1万元市值)。

(4) order_target_value(security, value, ...) —— 按目标价值下单

  • 含义:通过买入或卖出,使该标的的最终持仓市值等于指定的 value
  • 参数逻辑
    • 系统自动计算:(目标市值 - 当前持仓市值)/ 当前价格,得出需要操作的股数。
    • value 必须为非负数。
  • 特殊机制:同样会先撤销该标的未完成的订单。
  • 适用场景:基于市值的权重调仓(如:让平安银行占总资产的 10%)。
  • 示例
    • 当前持仓市值 5 万元,执行 order_target_value('000001.XSHE', 80000) $\rightarrow$ 系统会自动买入约 3 万元市值的股票,使总持仓达到 8 万元。
    • 当前持仓市值 5 万元,执行 order_target_value('000001.XSHE', 0) $\rightarrow$ 卖出所有持仓(清仓)。

3. 核心区别总结表

特性 order order_target order_value order_target_value
输入单位 股数 (手数*100) 股数 (手数*100) 金额 (元) 金额 (元)
操作逻辑 增量 (+/-) 最终目标 (=) 增量 (+/-) 最终目标 (=)
正负值含义 正买 / 负卖 只能为正 (目标持仓) 正买 / 负卖 只能为正 (目标市值)
自动计算方向 否 (需手动指定) (自动判断买卖) 否 (需手动指定) (自动判断买卖)
清仓写法 需知道当前持仓量 amount=0 需知道当前市值 value=0
典型用途 定量买卖 调仓到指定数量 定额买卖 调仓到指定市值权重

4. 最佳实践建议

  1. 清仓操作:最推荐使用 order_target(security, 0)order_target_value(security, 0),因为它们不需要你先去查询当前持仓是多少,不容易出错。
  2. 定期调仓:如果你的策略是基于权重的(例如:沪深300指数增强,每只股票占比不同),推荐使用 order_target_value,它能自动处理股价波动带来的市值变化,直接调整到目标金额。
  3. A股整手限制:在使用 _value 后缀的函数时,系统会自动处理 A 股“买入必须是 100 的整数倍”的逻辑(通常向下取整),所以实际成交金额可能会略小于你输入的金额。

Q&A

Q: 如果我使用 order_target_value 买入,但资金不足怎么办?
A: 系统会根据你当前的可用资金(available_cash)计算最大可买入数量。如果目标价值需要的资金超过了可用资金,系统会买入尽可能多的股票(即全仓买入),并在日志中输出警告信息(Warning),但不会报错停止运行。

Q: order_target 会处理未成交的挂单吗?
A: 是的。order_targetorder_target_value 在执行前,通常会先检查该标的是否有未完成的挂单(Open Orders)。如果有,系统会先撤销这些旧订单,然后再计算需要买卖的数量,以防止重复买入或卖出导致持仓错误。

Q: 在回测中,order_value 是按什么价格计算股数的?
A: 在回测中,如果是按天回测,通常使用当天的开盘价(或根据滑点设置的价格)来估算股数;如果是按分钟回测,则使用当前分钟的收盘价或下一分钟的开盘价(取决于撮合机制设置)。实际成交时,会扣除手续费,因此实际花费的现金 = 成交金额 + 手续费。