3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT (迅投策略交易系统) 的 Python API 中,针对信用账户(两融账户)进行融券卖出交易及风险控制,主要涉及三个核心步骤:查询可融券源、执行融券卖出/买券还券 以及 实时监控维持担保比例与风险度。
可融券源查询 (get_enable_short_contract)
get_enable_short_contract(accId)m_strInstrumentID、融券保证金比例 m_dSloRatio、可融数量 m_nEnableAmount 等对象属性)。信用账户交易 (passorder)
opType = 28opType = 29opType = 30passorder(28, 1101, accId, '600000.SH', 5, -1, 1000, ContextInfo)账户回调与风控监控 (account_callback)
ContextInfo.set_account(accId) 绑定账户后,当账户状态或资金变动时触发 account_callback(ContextInfo, accountInfo)。accountInfo.m_dPerAssurescaleValue: 个人维持担保比例。accountInfo.m_dRealRiskDegree: 实时风险度。accountInfo.m_dSloDebt: 融券负债。#encoding:gbk
import time
def init(ContextInfo):
# 设定信用资金账号
ContextInfo.accId = '6000000248'
ContextInfo.set_account(ContextInfo.accId)
# 设置风控阀值:维持担保比例低于 150% 时预警并止损平仓
ContextInfo.min_assure_scale = 1.50
# 策略运行标志位
ContextInfo.has_traded = False
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 1. 检查并打印可用券源
short_contracts = get_enable_short_contract(ContextInfo.accId)
target_code = '600000.SH'
can_short = False
for item in short_contracts:
if item.m_strInstrumentID == target_code and item.m_nEnableAmount > 0:
can_short = True
print(f"找到券源 {target_code},可融数量: {item.m_nEnableAmount},保证金比例: {item.m_dSloRatio}")
break
# 2. 满足条件执行融券卖出(仅下单一次示例)
if can_short and not ContextInfo.has_traded:
# opType=28: 融券卖出,orderType=1101: 单股单账号股数下单,prType=5: 最新价
passorder(28, 1101, ContextInfo.accId, target_code, 5, -1, 1000, ContextInfo)
print(f"对 {target_code} 发起融券卖出 1000 股")
ContextInfo.has_traded = True
def account_callback(ContextInfo, accountInfo):
"""
信用账户回调函数:实时监控维持担保比例,防止爆仓
"""
if accountInfo.m_strAccountID != ContextInfo.accId:
return
# 获取维持担保比例与实时风险度
assure_scale = accountInfo.m_dPerAssurescaleValue
risk_degree = accountInfo.m_dRealRiskDegree
print(f"[账户监控] 维持担保比例: {assure_scale:.2f}, 实时风险度: {risk_degree:.2f}")
# 维持担保比低于预警线触发风控逻辑
if 0 < assure_scale < ContextInfo.min_assure_scale:
print(f"【警告】当前维持担保比 {assure_scale:.2f} 低于预警线 {ContextInfo.min_assure_scale}!执行买券还券止损。")
# opType=29: 买券还券,以最新价买入平仓
passorder(29, 1101, ContextInfo.accId, '600000.SH', 5, -1, 1000, ContextInfo)
passorder 前调用 get_enable_short_contract 实时校验 m_nEnableAmount。opType=29 (买券还券):用资金从二级市场买入股票还券。opType=30 (直接还券):直接将持仓中的现券划转归还融券负债。