3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投/国信 QMT)平台中,进行融资融券(两融)交易时,可以通过 API 自动执行信用账户特有的还款操作,如卖券还款(卖出持仓证券归还融资欠款)和直接还款(使用资金账户可用资金归还融资欠款)。
QMT 通过 passorder 接口统一处理股票、期货及两融交易。针对信用账户,opType(操作类型)参数提供了专门的指令编码:
| 操作类型说明 | opType 值 | 说明 |
|---|---|---|
| 卖券还款 | 31 |
卖出证券,卖出所得资金自动用于偿还融资负债 |
| 直接还款 | 32 |
直接使用账户内可用资金偿还融资负债 |
| 信用账号股票买入 | 33 |
使用担保品或融资资金买入股票 |
| 信用账号股票卖出 | 34 |
普通卖出信用账户持仓股票 |
通过调用 passorder 并将 opType 设置为 31 实现:
# 卖券还款示例:以最新价卖出 1000 股 600000.SH 用于还款
passorder(31, 1101, ContextInfo.accIDCredit, '600000.SH', 5, -1, 1000, ContextInfo)
通过调用 passorder 并将 opType 设置为 32 实现:
# 直接还款示例:使用 10000 元可用资金进行直接还款
passorder(32, 1102, ContextInfo.accIDCredit, '600000.SH', 5, -1, 10000, ContextInfo)
以下策略展示了如何在 init 中绑定两融资金账号,并在符合条件时查询负债明细并触发自动还款逻辑:
#encoding:gbk
import time
def init(ContextInfo):
# 设定两融资金账号
ContextInfo.accIDCredit = '6000000248'
ContextInfo.set_account(ContextInfo.accIDCredit)
ContextInfo.has_repaid = False
def handlebar(ContextInfo):
# 仅在最后一根 Bar 执行
if not ContextInfo.is_last_bar():
return
# 避免重复触发
if ContextInfo.has_repaid:
return
# 1. 查询信用账户负债合约明细
debt_contracts = get_debt_contract(ContextInfo.accIDCredit)
if not debt_contracts:
print("当前账户无负债合约")
return
for debt in debt_contracts:
print(f"合约代码: {debt.m_strInstrumentID}, 未还金额: {debt.dUnRepayBalance}")
# 2. 示例逻辑:如存在特定股票融资负债,执行卖券还款
if debt.m_strInstrumentID == '600000.SH' and debt.dUnRepayBalance > 0:
print("触发卖券还款逻辑...")
# 使用最新价(prType=5)卖出 1000 股进行卖券还款(opType=31, orderType=1101)
passorder(31, 1101, ContextInfo.accIDCredit, '600000.SH', 5, -1, 1000, '两融自动还款', 1, 'order_repay_01', ContextInfo)
ContextInfo.has_repaid = True
break
init 中调用 ContextInfo.set_account() 绑定两融账号,否则无法接收主推及查询信用明细。prType 推荐使用对手价(14)或最新价(5),以确保还款委托快速成交。quickTrade 参数设置为 1(立即触发),可避免因等待 K 线走完而延迟还款。