🚀 AI 一键生成 qmt 策略代码

QMT 融资融券策略开发:如何使用 API 进行两融交易?

qmt | 发布时间: 2025/11/26
以下内容由 EasyQuant 生成。

问题描述

如何通过代码实现融资买入或融券卖出操作?

解决方案

在 QMT (Quantitative Trading Platform) 中,实现融资买入(Margin Buy)和融券卖出(Short Sell)的核心在于使用 passorder 函数,并指定正确的操作类型参数 (opType)。

核心概念

passorder 是 QMT 的综合下单函数。对于信用交易(两融),关键参数 opType 的取值如下:

  • 27:融资买入 (Margin Buy)
  • 28:融券卖出 (Short Sell)

此外,还有相关的还款还券操作类型(供参考):

  • 29:买券还券
  • 30:直接还券
  • 31:卖券还款
  • 32:直接还款

代码实现

以下是一个完整的策略示例,展示了如何在 handlebar 函数中进行融资买入和融券卖出。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置资金账号,注意:这里必须填写您的【信用账号】(两融账号)
    # 格式通常为字符串
    ContextInfo.credit_account = '88000001' 
    
    # 设置账号,用于接收交易回报
    ContextInfo.set_account(ContextInfo.credit_account)
    
    print("策略初始化完成,信用账号已设置")

def handlebar(ContextInfo):
    # 获取当前K线索引
    index = ContextInfo.barpos
    # 获取当前时间
    realtime = ContextInfo.get_bar_timetag(index)
    
    # 示例:只在最后一根K线(实时行情)运行,避免回测时重复下单
    if not ContextInfo.is_last_bar():
        return

    # --- 融资买入示例 ---
    # 操作类型 27 代表融资买入
    # 下单方式 1101 代表单股、单账号、普通、股数下单
    # 报价类型 5 代表最新价
    # 价格 -1 (当报价类型为最新价时,此参数无效,但需占位)
    # 数量 100 股
    opType_margin_buy = 27
    orderType = 1101
    stock_code = '600000.SH' # 浦发银行
    price_type = 5 # 最新价
    price = -1
    volume = 100
    
    print(f"尝试融资买入 {stock_code} {volume}股")
    passorder(opType_margin_buy, orderType, ContextInfo.credit_account, stock_code, price_type, price, volume, ContextInfo)

    # --- 融券卖出示例 ---
    # 操作类型 28 代表融券卖出
    opType_short_sell = 28
    stock_code_short = '600036.SH' # 招商银行
    
    print(f"尝试融券卖出 {stock_code_short} {volume}股")
    passorder(opType_short_sell, orderType, ContextInfo.credit_account, stock_code_short, price_type, price, volume, ContextInfo)

关键参数详解

在使用 passorder 进行两融交易时,请务必注意以下参数设置:

  1. opType (操作类型):

    • 设置为 27 进行融资买入(向券商借钱买股票)。
    • 设置为 28 进行融券卖出(向券商借股票卖出)。
  2. accountID (资金账号):

    • 必须填入开通了融资融券权限的信用资金账号。如果填入普通股票账号,下单将会失败。
  3. orderType (下单方式):

    • 通常使用 1101(单股、单账号、普通、按股数下单)。
    • 如果需要按金额下单,可以使用 1102(按金额),但需注意两融交易通常对“手”有严格限制。
  4. prType (报价类型):

    • 常用值:5 (最新价), 11 (指定价/模型价), 4 (卖一价), 6 (买一价)。
    • 如果是融券卖出,建议关注盘口挂单情况,避免因价格变动导致无法成交。

注意事项

  1. 标的限制:并非所有股票都支持融资融券。在下单前,请确保该标的在券商的两融标的池中。
  2. 额度与保证金:融资买入需要有足够的可用保证金,融券卖出需要券商有足够的券源且账户有足够保证金。可以使用 query_credit_opvolume 接口查询最大可下单量。
  3. 回测模式:在回测模式下,QMT 会模拟信用账户的成交,但不会产生真实的借贷利息计算细节,主要用于验证信号逻辑。
  4. 实盘交易:请务必在实盘运行前,将策略中的账号替换为真实的信用账号,并确保已登录交易端。

Q&A

Q: 如何查询某个标的是否支持融资或融券?
A: QMT API 没有直接返回标的“是否属于两融标的”的布尔值接口,但可以通过 get_instrumentdetail(stockcode) 获取合约详情,或者直接调用 query_credit_opvolume 查询可买/可卖数量,如果返回数量为 0,可能是资金不足或非标的。

Q: 融资买入后如何偿还负债?
A: 可以通过 passorder 函数,将 opType 设置为 31 (卖券还款) 来卖出持仓偿还融资负债,或者设置为 32 (直接还款) 使用现金偿还。

Q: 融券卖出后如何了结?
A: 可以通过 passorder 函数,将 opType 设置为 29 (买券还券) 从二级市场买入股票归还,或者设置为 30 (直接还券) 使用现券归还。

Q: 为什么我的融券卖出废单了?
A: 常见原因包括:1. 该股票不是融券标的;2. 券商没有券源;3. 信用账户担保比例过低;4. 委托价格不符合交易所规定(例如融券卖出价格通常不得低于最新成交价)。