3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在进行期权备兑开仓(Covered Call)交易时,投资者需要使用标的证券(如股票或ETF)作为担保。为了防止标的证券被意外卖出并确保备兑开仓的合规性,QMT平台提供了证券锁定与证券解锁功能。通过锁定标的证券,可以有效降低备兑交易的保证金占用。
本文将详细介绍如何通过QMT的 passorder 接口,在代码中实现证券锁定(opType=58)与解锁(opType=59)操作。
在QMT中,证券锁定与解锁统一通过 passorder 接口执行。其核心参数配置如下:
58:证券锁定(将标的证券锁定,准备用于备兑开仓)59:证券解锁(将锁定的证券释放,恢复为普通可交易状态)1101:单股、单账号、普通、股/手方式下单11 或最新价 5。由于锁定/解锁不涉及撮合交易,价格参数可填 0 或 -1。以下是一个完整的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)
为了确保锁定或解锁指令成功执行,建议在策略中实现 order_callback 和 deal_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}")