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

QMT平台如何通过代码实现备兑证券锁定与解锁?(附Python源码)

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

问题描述

QMT 期权高级交易:证券锁定与解锁 API 降低备兑保证金占用
QMT 如何通过代码实现备兑证券锁定(opType=58)与解锁(opType=59)操作?

解决方案

QMT期权高级交易:证券锁定与解锁API降低备兑保证金占用

在进行期权备兑开仓(Covered Call)交易时,投资者需要使用标的证券(如股票或ETF)作为担保。为了防止标的证券被意外卖出并确保备兑开仓的合规性,QMT平台提供了证券锁定证券解锁功能。通过锁定标的证券,可以有效降低备兑交易的保证金占用。

本文将详细介绍如何通过QMT的 passorder 接口,在代码中实现证券锁定(opType=58)与解锁(opType=59)操作。


1. QMT 证券锁定与解锁 API 核心参数

在QMT中,证券锁定与解锁统一通过 passorder 接口执行。其核心参数配置如下:

  • opType (操作类型):
    • 58证券锁定(将标的证券锁定,准备用于备兑开仓)
    • 59证券解锁(将锁定的证券释放,恢复为普通可交易状态)
  • orderType (下单方式):
    • 1101:单股、单账号、普通、股/手方式下单
  • prType (选价类型):
    • 对于锁定和解锁操作,通常使用指定价 11 或最新价 5。由于锁定/解锁不涉及撮合交易,价格参数可填 0-1
  • volume (数量):
    • 需要锁定或解锁的证券数量(单位:股)。

2. Python 代码实现示例

以下是一个完整的QMT策略示例,展示了如何在初始化时绑定账号,并在 handlebar 中根据条件触发证券锁定与解锁。

#encoding:gbk
import time

def init(ContextInfo):
    # 1. 设定交易账号(请替换为您的实际期权资金账号)
    ContextInfo.my_account = '6000000058'
    ContextInfo.set_account(ContextInfo.my_account)
    
    # 2. 设定标的证券(例如:华夏上证50ETF)
    ContextInfo.target_stock = '510050.SH'
    
    # 标记是否已执行锁定,防止重复发送指令
    ContextInfo.has_locked = False

def handlebar(ContextInfo):
    # 仅在最后一根K线(最新Tick)执行交易逻辑
    if not ContextInfo.is_last_bar():
        return
        
    # 示例逻辑:当满足特定条件时,锁定10000股50ETF用于备兑
    if not ContextInfo.has_locked:
        print("正在触发证券锁定操作...")
        
        # 调用 passorder 进行证券锁定 (opType=58)
        # 参数说明:
        # opType=58 (证券锁定), orderType=1101 (单股单账号股数下单)
        # prType=5 (最新价), price=0 (锁定操作价格填0即可), volume=10000 (锁定10000股)
        passorder(58, 1101, ContextInfo.my_account, ContextInfo.target_stock, 5, 0, 10000, '备兑锁定策略', 1, 'lock_001', ContextInfo)
        
        ContextInfo.has_locked = True
        
    # 示例逻辑:如果需要释放锁定的证券,可以调用解锁操作 (opType=59)
    # 在实际策略中,这通常发生在备兑期权平仓或到期之后
    # print("正在触发证券解锁操作...")
    # passorder(59, 1101, ContextInfo.my_account, ContextInfo.target_stock, 5, 0, 10000, '备兑解锁策略', 1, 'unlock_001', ContextInfo)

3. 交易回报与状态监控

为了确保锁定或解锁指令成功执行,建议在策略中实现 order_callbackdeal_callback 回调函数,实时监控委托状态:

def order_callback(ContextInfo, orderInfo):
    # 监控委托状态变化
    if orderInfo.m_strInstrumentID == ContextInfo.target_stock:
        print(f"证券锁定/解锁委托状态更新: {orderInfo.m_nOrderStatus} (备注: {orderInfo.m_strRemark})")

def deal_callback(ContextInfo, dealInfo):
    # 监控成交状态
    if dealInfo.m_strInstrumentID == ContextInfo.target_stock:
        print(f"证券锁定/解锁操作执行成功,数量: {dealInfo.m_nVolume}")

4. 注意事项

  1. 账户权限:执行证券锁定与解锁前,请确保您的交易账户已开通期权备兑开仓权限,且账户内有足额的标的证券现货。
  2. 实盘限制:证券锁定与解锁属于实盘/模拟盘柜台业务,在纯历史回测模式下无实际意义,请在实盘或仿真交易环境中进行调试。
  3. 数量单位:期权标的证券锁定的单位通常为“股”(如 10000 股),请勿与期权合约的“张”混淆。