🚀 AI 一键生成 qmt 策略代码

passorder 函数 prType 参数详解:使用涨跌停价快速成交

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

问题描述

如何在策略里以涨停价买入或跌停价卖出?

解决方案

在 QMT 策略中,要以涨停价买入跌停价卖出,最直接的方法是使用核心交易函数 passorder,并将报价类型参数 prType 设置为 12(代表涨跌停价)。

核心逻辑

  • 函数passorder
  • 参数 prType:设置为 12
    • 当执行买入操作(opType=23)时,prType=12 会自动使用涨停价报单。
    • 当执行卖出操作(opType=24)时,prType=12 会自动使用跌停价报单。
  • 参数 price:当 prType 为 12 时,具体的 price 数值会被忽略,通常填 -10 即可。

代码示例

以下是一个完整的策略示例,展示了如何在 handlebar 中以涨停价买入平安银行,并以跌停价卖出。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 设置资金账号 (请替换为您真实的资金账号)
    ContextInfo.accID = '6000000000'
    ContextInfo.set_account(ContextInfo.accID)
    
    print("策略初始化完成")

def handlebar(ContextInfo):
    # 获取当前K线索引
    index = ContextInfo.barpos
    # 获取当前时间
    realtime = ContextInfo.get_bar_timetag(index)
    
    # 示例代码:仅在最后一根K线(实时行情)运行
    if not ContextInfo.is_last_bar():
        return

    # ------------------------------------------------------------------
    # 场景 1:以涨停价买入 100 股 平安银行 (000001.SZ)
    # ------------------------------------------------------------------
    # opType=23 (买入)
    # orderType=1101 (单股单账号普通股/手下单)
    # prType=12 (涨跌停价 -> 买入时即为涨停价)
    # price=-1 (忽略)
    # volume=100 (股数)
    passorder(23, 1101, ContextInfo.accID, '000001.SZ', 12, -1, 100, ContextInfo)
    print("已发出涨停价买入委托")

    # ------------------------------------------------------------------
    # 场景 2:以跌停价卖出 100 股 平安银行 (000001.SZ)
    # ------------------------------------------------------------------
    # opType=24 (卖出)
    # prType=12 (涨跌停价 -> 卖出时即为跌停价)
    passorder(24, 1101, ContextInfo.accID, '000001.SZ', 12, -1, 100, ContextInfo)
    print("已发出跌停价卖出委托")

参数详解

passorder(opType, orderType, accountID, orderCode, prType, price, volume, ContextInfo) 中:

  1. opType (操作类型):
    • 23: 股票买入
    • 24: 股票卖出
  2. prType (报价类型):
    • 12: 涨跌停价。这是实现你需求的关键参数。
    • (注:虽然文档附录中有 40 代表涨停价,41 代表跌停价,但在 passorder 中通常使用 12 即可根据买卖方向自动匹配)
  3. price (价格):
    • prType 设为 12 时,此参数无效,填 -1 即可。

常见问题 Q&A

Q: 为什么使用涨停价买入?
A: 在实盘交易中,以涨停价挂单买入(或跌停价卖出)通常是为了确保成交(即“市价单”的一种模拟方式),系统会以对手方最优价格成交,未成交部分会继续挂在涨停价上。

Q: 这种方式支持回测吗?
A: 支持。在回测模式下,prType=12 会按照当根 K 线的涨跌停价格进行撮合逻辑处理。

Q: 如果我想用 order_shares 等辅助函数怎么办?
A: 辅助函数如 order_sharesstyle 参数虽然支持 'MARKET'(市价),但 QMT 的 passorder 更加底层和精确。如果你必须使用涨/跌停价,建议直接使用 passorder。如果使用辅助函数,通常无法直接指定“涨停价”这个概念,除非你手动计算价格并使用 'FIX' 模式。

Q: 如何手动计算涨跌停价并下单(不推荐,但可行)?
A: 你可以通过 get_instrumentdetail 获取昨收价,然后根据证券类型(主板10%,科创/创业20%)计算涨跌停价格,然后使用 prType=11 (指定价) 下单。但直接使用 prType=12 更安全且方便。