3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在股票期权交易中,**备兑开仓(Covered Call)**是指在拥有标的股票持仓的基础上,卖出对应数量的认购期权(CALL),以获取期权权利金收入。利用 QMT 平台的 Python API,用户可以实现证券锁定、备兑开仓、备兑平仓以及证券解锁的全流程自动化。
根据 QMT 交易接口 passorder 的说明,期权交易涉及的核心 opType 参数如下:
passorder 将标的股票锁定,生成备兑持仓额度。以下策略演示如何在 QMT 中完成从证券锁定 -> 备兑开仓以及满足条件后的备兑平仓 -> 证券解锁全流程:
#encoding:gbk
import time
def init(ContextInfo):
# 1. 设定资金账号与交易标的
ContextInfo.accID = '6000000058'
ContextInfo.set_account(ContextInfo.accID)
# 标的现货与期权代码示例
ContextInfo.underlying = '510300.SH' # 标的 ETF
ContextInfo.option_code = '10003280.SHO' # 对应认购期权合约
# 设置全局状态标记
ContextInfo.locked = False
ContextInfo.covered_open = False
def handlebar(ContextInfo):
# 确保只在最后一根 K 线运行最新逻辑
if not ContextInfo.is_last_bar():
return
# 获取当前期权最新价格及相关数据
opt_tick = ContextInfo.get_full_tick([ContextInfo.option_code])
if ContextInfo.option_code not in opt_tick:
return
last_price = opt_tick[ContextInfo.option_code]['lastPrice']
# ---------------- 流程 1:证券锁定 与 备兑开仓 ----------------
if not ContextInfo.locked:
# 锁定 10000 股 510300.SH 股票用于备兑(以最新价/指定价提交)
print(f"开始执行证券锁定: {ContextInfo.underlying}")
passorder(58, 1101, ContextInfo.accID, ContextInfo.underlying, 5, -1, 10000, 'CoveredCall', 1, ContextInfo)
ContextInfo.locked = True
elif ContextInfo.locked and not ContextInfo.covered_open:
# 备兑开仓:卖出 1 张期权合约(对应 10000 股标的)
print(f"开始执行备兑开仓: {ContextInfo.option_code}")
passorder(54, 1101, ContextInfo.accID, ContextInfo.option_code, 5, -1, 1, 'CoveredCall', 1, ContextInfo)
ContextInfo.covered_open = True
# ---------------- 流程 2:备兑平仓 与 证券解锁 ----------------
# 示例平仓条件:当期权价格降低至止盈目标(如 0.0010)时执行平仓解锁
elif ContextInfo.covered_open and last_price <= 0.0010:
print(f"触发平仓信号,当前期权价格: {last_price}")
# 1. 备兑平仓(买入平仓期权合约)
passorder(55, 1101, ContextInfo.accID, ContextInfo.option_code, 5, -1, 1, 'CoveredCall', 1, ContextInfo)
# 2. 证券解锁(将锁定的标的解封)
passorder(59, 1101, ContextInfo.accID, ContextInfo.underlying, 5, -1, 10000, 'CoveredCall', 1, ContextInfo)
ContextInfo.covered_open = False
ContextInfo.locked = False
order_callback 和 position_callback 等实时回报函数判定委托是否完全成交,再驱动下一步订单,避免因未成交导致备兑开仓失败。passorder 的 quickTrade 参数设为 1,实现信号实时快速发出。