3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,融资融券(两融)账户的负债管理至关重要。如果不能及时了结到期负债或在持有现金时自动还款,可能会产生不必要的利息支出。QMT(迅投极速量化交易系统)提供了丰富的信用交易接口,允许投资者通过 Python 代码实时查询负债合约并执行自动化还款。
本文将详细介绍如何使用 get_debt_contract 接口查询负债,并结合 passorder 接口实现自动还款策略。
get_debt_contract(accId)accId (string) - 信用资金账号。StkCompacts)的列表。每个对象包含以下常用属性:
m_strInstrumentID:证券代码m_strInstrumentName:证券名称m_dRealCompactBalance:未还合约金额(本金)m_dRealCompactInterest:未还合约利息m_eCompactType:合约类型(48-融资,49-融券)m_nRetEndDate:归还截止日期passorder()在执行还款操作时,我们需要通过 passorder 发送特定的操作指令(opType):
opType = 29:买券还券(针对融券负债)opType = 31:卖券还款(针对融资负债)opType = 30:直接还券opType = 32:直接还款以下是一个完整的 QMT 自动化策略示例。策略在初始化时绑定信用账户,并在每日交易时间内定时检查负债情况。如果发现融资负债,且账户中持有对应股票,则自动执行卖券还款;如果是融券负债,则执行买券还券。
#encoding:gbk
import datetime
def init(ContextInfo):
# 设定信用账号(请替换为您的真实两融账号)
ContextInfo.accid = '6000000248'
ContextInfo.set_account(ContextInfo.accid)
# 设置定时器:每天 14:30 触发自动检查与还款逻辑
ContextInfo.run_time("auto_repay_logic", "1nDay", "2023-10-01 14:30:00", "SH")
print("QMT两融自动还款策略初始化成功!")
def handlebar(ContextInfo):
pass
def auto_repay_logic(ContextInfo):
print("开始执行每日负债检查...")
# 1. 获取负债合约明细
debt_list = get_debt_contract(ContextInfo.accid)
if not debt_list:
print("当前账户无未结清负债。")
return
# 2. 获取当前持仓信息,用于判断是否有券可还
position_info = get_trade_detail_data(ContextInfo.accid, 'CREDIT', 'POSITION')
holdings = {pos.m_strInstrumentID: pos.m_nCanUseVolume for pos in position_info}
for debt in debt_list:
code = debt.m_strInstrumentID
name = debt.m_strInstrumentName
unpaid_balance = debt.m_dRealCompactBalance
unpaid_interest = debt.m_dRealCompactInterest
total_debt = unpaid_balance + unpaid_interest
compact_type = debt.m_eCompactType # 48: 融资, 49: 融券
print(f"发现负债 -> 证券: {code}({name}), 类型: {'融资' if compact_type == 48 else '融券'}, 待还总额: {total_debt:.2f}")
# 3. 自动化还款决策
if compact_type == 48: # 融资负债
# 如果持仓中有该股票,执行卖券还款
if code in holdings and holdings[code] > 0:
repay_vol = holdings[code]
print(f"执行【卖券还款】: 证券 {code}, 数量 {repay_vol} 股")
# opType=31: 卖券还款, orderType=1101: 单股单账号股数下单, prType=5: 最新价
passorder(31, 1101, ContextInfo.accid, code, 5, -1, repay_vol, '自动融资还款', 1, ContextInfo)
elif compact_type == 49: # 融券负债
# 融券负债需要买入证券还券
# 假设根据策略逻辑,当需要还券时,直接以最新价买入对应数量进行还券
# 实际操作中需注意可用资金是否充足
unpaid_vol = debt.m_nRealCompactVol # 获取未还合约数量
if unpaid_vol > 0:
print(f"执行【买券还券】: 证券 {code}, 数量 {unpaid_vol} 股")
# opType=29: 买券还券, prType=5: 最新价
passorder(29, 1101, ContextInfo.accid, code, 5, -1, unpaid_vol, '自动融券还款', 1, ContextInfo)
run_time)时,建议使用 1nDay(每日一次)避免在同一个 K 线或 Tick 周期内重复触发下单。prType=5)。在实际交易中,为确保快速成交,可考虑使用对手价(prType=14)或最优五档即成剩撤等报价方式。