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

QMT 平台如何使用 order_percent 函数实现等比例仓位分配?(附 Python 源码)

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

问题描述

qmt 资金管理:使用 order_percent 实现等比例仓位分配
QMT 的 order_percent 下单函数怎么用?如何实现单只股票占总资产 10% 的比例下单?

解决方案

QMT 资金管理:使用 order_percent 实现等比例仓位分配

在量化交易中,科学的资金管理和仓位控制是策略稳健运行的核心。QMT 平台提供了 order_percent 函数,允许投资者根据当前投资组合价值(持仓市值 + 现金总和)的指定百分比进行买入或卖出操作。本文将详细介绍该函数的使用方法,并给出一个实现单只股票占总资产 10% 比例下单的完整策略示例。


1. order_percent 函数详解

1.1 函数定义

order_percent(stockcode, percent[, style, price], ContextInfo[, accId])

1.2 参数说明

  • stockcode: 字符串类型,股票代码(例如 '000002.SZ')。
  • percent: 双精度浮点数,下单比例。范围为 [-1, 1]。正数代表买入,负数代表卖出。例如 0.1 表示买入占总资产 10% 价值的股票。
  • style: 字符串类型,可选参数,下单选价类型。默认为最新价 'LATEST'。可选值包括:
    • 'LATEST': 最新价
    • 'FIX': 指定价(需配合 price 参数)
    • 'COMPETE': 对手价
    • 'MARKET': 市价
    • 'SALE5' ~ 'SALE1': 卖5至卖1价
    • 'BUY1' ~ 'BUY5': 买1至买5价
  • price: 双精度浮点数,可选参数,当 style'FIX' 时有效,表示指定的下单价格。
  • ContextInfo: QMT 策略运行环境对象。
  • accId: 字符串类型,可选参数,资金账号。若不填则默认使用最后一次设置的账号。

1.3 核心机制与注意事项

  1. 资产基准: 比例的计算基准是目前投资组合价值(即当前账号的持仓市场价值与可用现金的总和)。
  2. 股数圆整: 自动计算出的下单股数会被向下调整为整手(A股 1 手 = 100 股)的倍数。
  3. 资金检查: 如果可用资金不足以支付计算出的下单金额,该 API 将不会创建和发送订单。
  4. 回测结算: 在回测模式下,除了指定价('FIX')外,其他选价类型均以当前 K 线的收盘价进行撮合结算。

2. 核心代码示例:单股占总资产 10% 比例下单

以下是一个完整的 QMT Python 策略示例。该策略在初始化时绑定资金账号,并在运行到最后一根 K 线时,以最新价买入占总资产 10% 比例的平安银行(000001.SZ)。

#coding:gbk

def init(ContextInfo):
    # 1. 设定交易账号(请替换为您的实际账号)
    ContextInfo.accid = '6000000248'
    ContextInfo.set_account(ContextInfo.accid)
    
    # 2. 设定股票池
    ContextInfo.stock = '000001.SZ'
    ContextInfo.set_universe([ContextInfo.stock])
    
    print("策略初始化完成,绑定账号:", ContextInfo.accid)

def handlebar(ContextInfo):
    # 仅在最后一根 K 线(最新行情)触发下单,避免历史 K 线重复触发
    if ContextInfo.is_last_bar():
        # 设定下单比例为 10% (0.1)
        order_ratio = 0.1
        
        print(f"触发下单信号:以最新价买入 {ContextInfo.stock},目标比例 {order_ratio * 100}%")
        
        # 调用 order_percent 函数
        order_percent(
            ContextInfo.stock, 
            order_ratio, 
            'LATEST', 
            ContextInfo, 
            ContextInfo.accid
        )

3. 常见问题与进阶技巧

  • Q: 为什么调用了 order_percent 却没有委托记录?

    • A: 请检查:1. 您的资金账号是否成功登录并绑定(set_account);2. 账户内可用现金是否足够买入最少 1 手(100股)该股票;3. 是否在非交易时间或历史 K 线上运行且未开启回测。
  • Q: 如何实现等比例卖出套现?

    • A: 将 percent 参数设为负数即可。例如,order_percent('000001.SZ', -0.05, ContextInfo) 表示卖出占当前总资产 5% 价值的平安银行股票。