🚀 AI 一键生成 joinquant 策略代码
立即体验

JoinQuant 平台 order_target_value 目标价值下单函数使用技巧与调仓实战

joinquant | 发布时间: 2026/7/23
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 调仓实战:order_target_value 目标价值下单技巧

Question: 如何使用 order_target_value 进行准确的仓位目标价值调整?

解决方案

JoinQuant 调仓实战:order_target_value 目标价值下单技巧

在 JoinQuant(聚宽)量化交易平台中,order_target_value 是进行组合管理和调仓时最核心的交易 API 之一。与按固定股数/手数或固定价值下单不同,order_target_value 会根据标的当前持仓和最新价格,自动计算买卖差额并调整仓位至目标价值


一、order_target_value 函数语法与参数解析

order_target_value(security, value, style=None, side='long', pindex=0, close_today=False)

常用参数说明:

  1. security: 标的代码(如股票 '000001.XSHE'、期货 'IF2312.CCFX')。
  2. value: 期望的标的最终价值(单位:元)。若调至 0 则代表全仓卖出/平仓。
    • 股票价值计算公式:$
      \text{value} = \text{最新价} \times \text{股数}
      $
    • 期货保证金计算公式:$
      \text{value} = \text{最新价} \times \text{手数} \times \text{保证金率} \times \text{合约乘数}
      $
  3. style: 下单类型,默认为 None(即 MarketOrderStyle() 市价单),也可指定 LimitOrderStyle(price) 限价单。
  4. side: 'long'(多单,默认)或 'short'(空单,仅期货/融资融券支持)。
  5. pindex: 子仓位序号,默认为 0
  6. close_today: 平今字段,仅对上期所、能源中心和中金所生效。

二、核心核心调仓技巧与注意事项

  1. 自动撤单机制:使用 order_target_value 时,如果该标的当前存在未完成的挂单,系统会自动取消先前未完成的订单,确保调仓逻辑不因历史挂单冲突。
  2. 最小交易单位限制(A股手倍数):在买入股票时,系统会自动向下取整为 100 股(1手)的整数倍;卖出清仓时则不受 100 股限制。
  3. 资金与持仓校验:如果目标买入价值超出账户可用现金,系统会根据最大可用资金进行受限下单,并在日志中打印警告。
  4. 科创板/创业板保护价:若对科创板标的进行市价下单,建议配合 MarketOrderStyle(limit_price) 指定保护价。

三、实战代码示例:基于组合优化的动态目标价值调仓

以下策略展示了如何在月度开盘时,利用 order_target_value 将总资产按比例分配给目标股票池:

import jqdata

def initialize(context):
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 设置基准
    set_benchmark('000300.XSHG')
    # 设定手续费
    set_order_cost(OrderCost(open_tax=0, close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    # 设定要交易的股票池
    g.stocks = ['000001.XSHE', '600000.XSHG', '600519.XSHG', '000858.XSHE']
    
    # 每月第一个交易日开盘调仓
    run_monthly(rebalance, monthday=1, time='09:30')

def rebalance(context):
    # 获取当前账户总权益
    total_value = context.portfolio.total_value
    
    # 1. 优先清仓不在目标股票池中的持仓
    for stock in context.portfolio.positions:
        if stock not in g.stocks:
            order_target_value(stock, 0)
            log.info("清仓标的: %s" % stock)
            
    # 2. 目标权重平分(每只股票占 25% 仓位)
    target_per_stock = total_value * 0.25
    
    # 3. 使用 order_target_value 一键调整目标价值
    for stock in g.stocks:
        # 检查是否停牌
        current_data = get_current_data()
        if not current_data[stock].paused:
            order_target_value(stock, target_per_stock)
            log.info("调整标的 %s 目标价值至: %.2f 元" % (stock, target_per_stock))