🚀 AI 一键生成 qmt 策略代码

QMT 资金管理深度解析:如何精确控制仓位比例?

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

问题描述

我想用总资产的一部分资金去买入一只股票,应该怎么做?如果我想把这只股票的仓位调整到总资产的10%,又该怎么做?

解决方案

在 QMT 量化交易平台中,针对您的两个需求,分别有对应的便捷交易函数可以使用:

  1. 用总资产的一部分资金买入:使用 order_percent 函数。
  2. 将仓位调整到总资产的特定比例:使用 order_target_percent 函数。

核心函数说明

  • order_percent(stockcode, percent, ...)

    • 含义:下单金额等于目前投资组合总价值(市值+现金)的一定百分比。
    • 场景:您想用总资产的 5% 去买入某只股票(不考虑当前该股票已有的持仓)。
    • 参数percent 为小数,例如 0.05 代表 5%。正数代表买入,负数代表卖出。
  • order_target_percent(stockcode, tar_percent, ...)

    • 含义:买入或卖出股票,自动调整该股票的仓位,使其市值占整个投资组合总价值的目标百分比。
    • 场景:无论当前持有多少,您希望操作后,这只股票的市值刚好占总资产的 10%。如果当前持有 0%,它会买入 10%;如果当前持有 20%,它会卖出直到剩下 10%。
    • 参数tar_percent 为目标比例小数,例如 0.1 代表 10%。

策略代码示例

以下是一个完整的 Python 策略示例,展示了如何在 handlebar 中实现这两个功能。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置资金账号,请替换为您真实的资金账号
    ContextInfo.accID = '6000000000'
    # 绑定账号,用于接收回报
    ContextInfo.set_account(ContextInfo.accID)
    
    print("策略初始化完成")

def handlebar(ContextInfo):
    # 获取当前K线对应的股票代码(假设在主图运行)
    # 也可以直接指定,如 stock_code = '000001.SZ'
    stock_code = ContextInfo.stockcode 
    
    # 获取当前账号ID
    account_id = ContextInfo.accID
    
    # ------------------------------------------------------------------
    # 场景 1:用总资产的一部分资金去买入
    # ------------------------------------------------------------------
    # 示例:以最新价买入,买入金额为总资产的 5%
    # 注意:这里是“增量”买入。如果总资产100万,这里会下单买入5万元市值的股票。
    # order_percent(stock_code, 0.05, ContextInfo, account_id)
    
    # ------------------------------------------------------------------
    # 场景 2:把这只股票的仓位调整到总资产的 10%
    # ------------------------------------------------------------------
    # 示例:以最新价调整仓位,使其市值占比达到 10%
    # 注意:这里是“目标”调整。
    # 如果当前持仓占比为 0%,系统会买入 10%;
    # 如果当前持仓占比为 15%,系统会卖出 5%,使其降至 10%。
    order_target_percent(stock_code, 0.10, ContextInfo, account_id)
    
    # ------------------------------------------------------------------
    # 补充说明:
    # 上述函数默认使用 'LATEST' (最新价) 下单。
    # 如果需要指定价格类型(如对手价 'COMPETE' 或 指定价 'FIX'),可以增加参数。
    # 例如:使用对手价将仓位调整到 10%
    # order_target_percent(stock_code, 0.10, 'COMPETE', ContextInfo, account_id)

注意事项

  1. 资金不足:如果账户可用资金不足以支付下单金额(例如满仓状态下继续调用 order_percent 买入),API 将不会创建发送订单。
  2. 整手调整:A股交易单位为 100 股(1手)。API 会自动根据金额计算股数并向下取整到 100 的倍数。
  3. 总资产定义:这里的“总资产”通常指该资金账号下的 总资产(Total Asset),即 可用资金 + 持仓市值 + 冻结资金
  4. 回测与实盘:这两个函数在回测和实盘模式下均可使用。在回测中,默认以收盘价结算(除非指定了价格类型);在实盘中,默认以最新价下单。

Q&A

Q: order_percentorder_target_percent 有什么本质区别?
A: order_percent增量操作,它只关心本次要买卖多少比例的资产,不考虑你手里原本有多少货。order_target_percent目标导向操作,它关心的是最终结果,会自动计算当前持仓和目标持仓的差额来进行买卖。

Q: 如果我想用指定价格(例如限价)来调整仓位怎么办?
A: 您可以在函数中传入价格类型和价格参数。例如,想以 10.5 元的价格将仓位调整到 10%,可以写:order_target_percent('000001.SZ', 0.10, 'FIX', 10.5, ContextInfo, account_id)

Q: 这里的百分比是 0-100 还是 0-1?
A: 参数使用的是小数0.1 代表 10%,1.0 代表 100%。请务必注意不要填错,否则可能导致满仓或下单失败。