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

QMT 资金管理:使用 order_target_value 实现自动化调仓与组合再平衡

qmt | 发布时间: 2026/8/3
以下内容由 EasyQuant 生成。

问题描述

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

Title: QMT 资金管理:使用 order_target_value 实现自动化调仓与组合再平衡

Question: 如何在 QMT 中使用 order_target_value 按照目标金额进行自动调仓?

解决方案

QMT 资金管理:使用 order_target_value 实现自动化调仓与组合再平衡

在量化投资中,资金管理与持仓调整是策略风险控制的关键环节。QMT(迅投 QuantMaster)平台提供了便捷的下单函数 order_target_value,允许开发者直接指定持仓的目标金额,由系统自动计算当前持仓与目标价值的差额并生成对应的买卖委托。


一、order_target_value 函数详解

order_target_value 的作用是买入或卖出证券,使其持仓市值达到指定的金额

1. 函数签名与参数说明

order_target_value(stockcode, tar_value[, style, price], ContextInfo[, accId])
  • stockcode: 股票/证券代码,如 '000002.SZ'
  • tar_value: 目标持仓金额(单位:元),必须为非负数。
  • style: 下单选价类型,默认为 'LATEST'(最新价)。可选参数包含:'FIX'(指定价)、'COMPETE'(对手价)、'MARKET'(市价)等。
  • price: 指定价格(当 style 为 'FIX' 时生效)。
  • ContextInfo: QMT 策略全局上下文对象。
  • accId: 交易资金账号。

2. 执行逻辑

  • 无持仓时:买入目标金额 tar_value 的证券(按1手=100股自动向下取整)。
  • 已有持仓时
    • 当前持仓市值 < tar_value:买入差额部分;
    • 当前持仓市值 > tar_value:卖出多余部分;
    • tar_value = 0:卖出全部持仓实现清仓。

二、核心应用场景:多标的动态再平衡策略

以两只股票(如平安银行 000001.SZ 和万科A 000002.SZ)为例,演示如何使用 order_target_value 实现定期的等权重组合再平衡。

策略代码示例

#encoding:gbk
import time

def init(ContextInfo):
    # 设定交易股票池
    ContextInfo.stock_pool = ['000001.SZ', '000002.SZ']
    ContextInfo.set_universe(ContextInfo.stock_pool)
    
    # 设置交易账号(请替换为实际资金账号)
    ContextInfo.account_id = '6000000248'
    ContextInfo.set_account(ContextInfo.account_id)
    
    # 设置总计划分配资金
    ContextInfo.total_target_fund = 200000.0  # 总预算20万元
    print("策略初始化完成,目标股票池:", ContextInfo.stock_pool)

def handlebar(ContextInfo):
    # 仅在最后一根 K 线(盘中最新行情)时执行调仓
    if not ContextInfo.is_last_bar():
        return
    
    # 计算每只股票应分配的目标金额(等权重划分)
    num_stocks = len(ContextInfo.stock_pool)
    target_per_stock = ContextInfo.total_target_fund / num_stocks
    
    print(f"开始执行组合再平衡,单只股票目标持仓金额: {target_per_stock} 元")
    
    # 遍历股票池执行自动化调仓
    for stock in ContextInfo.stock_pool:
        # 使用 order_target_value 调仓至目标价值
        # 采用最新价 LATEST 进行委托
        order_target_value(stock, target_per_stock, 'LATEST', 0, ContextInfo, ContextInfo.account_id)
        print(f"标的 {stock} 已发送目标调仓指令,目标金额: {target_per_stock}")

三、注意事项与最佳实践

  1. 手数字符限制:A股市场一手为 100 股,order_target_value 会自动将目标交易量向下调整为 100 股的整数倍。
  2. 资金不足风险:若可用资金不足以补足差额买入,QMT 平台将放弃创建并发送该笔订单,编写策略时建议预留足够的可用资金。
  3. 回测与实盘差异:在回测模式下,除了 'FIX'(指定价)外,其他下单选价类型均以当期 K 线收盘价结算;实盘模式下则按照实际选价类型(如 'LATEST' 最新价)下单。
  4. 清仓操作:欲快速平仓某只股票,只需将 tar_value 设为 0 即可:order_target_value('000002.SZ', 0, ContextInfo, accId)