🚀 AI 一键生成 joinquant 策略代码
立即体验

joinquant 融券交易指南:如何使用 marginsec_direct_refund API 实现直接还券?

joinquant | 发布时间: 2026/8/1
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 融券交易指南:marginsec_direct_refund 直接还券流程

Question: 在 joinquant 的信用账户中如何使用 API 完成直接还券操作?

解决方案

joinquant 融券交易指南:marginsec_direct_refund 直接还券流程

在 JoinQuant(聚宽)量化交易平台中,进行融资融券(信用交易)时,可以通过调用 marginsec_direct_refund 函数将现有的股票持仓直接归还给券商以完成还券操作。


一、 融资融券账户初始化设置

在使用任何融资融券 API(包括直接还券)之前,必须在策略的 initialize(context) 函数中将子账户类型设置为信用账户 stock_margin。默认的 stock 类型账户不支持融券与还券指令。

def initialize(context):
    # 获取初始资金
    init_cash = context.portfolio.starting_cash
    # 设置账户类型为融资融券账户 ('stock_margin')
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])

二、 marginsec_direct_refund 函数说明

marginsec_direct_refund 用于使用账户中已持有的证券直接归还融券负债,无需发起卖券或买券交易。

语法格式:

marginsec_direct_refund(security, amount, pindex=0)

参数解析:

  • security (str): 标的代码,例如 '000001.XSHE'
  • amount (int): 还券数量(股数)。
  • pindex (int): 子账户索引,默认为 0

三、 还券逻辑与注意事项

  1. 持仓要求:账户当前多头持仓中必须拥有足够数量的该标的股票。若当前无持仓或持仓不足,直接还券会失败。此时需先通过普通买入 order 购买对应股票后再执行直接还券。
  2. T+1 还券规则:当日融券卖出的证券,当日不能归还;还券时会扣除对应的融券利息。
  3. 还券优先原则:直接还券时,可以使用当日买入的证券归还(不受 T+1 限制),且系统会优先使用当日买入的证券进行归还。

四、 完整代码示例

以下是在 JoinQuant 策略中买入股票并直接还券的完整代码示例:

import jqdata

def initialize(context):
    # 1. 设定基准与动态复权
    set_benchmark('000300.XSHG')
    set_option('use_real_price', True)
    
    # 2. 初始化信用账户
    init_cash = context.portfolio.starting_cash
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
    
    # 3. 设置全局变量
    g.security = '000001.XSHE'
    
    # 4. 定时运行策略
    run_daily(market_open, time='10:00')

def market_open(context):
    security = g.security
    refund_amount = 1000
    
    # 检查持仓是否满足还券要求
    current_position = context.portfolio.positions[security].total_amount
    
    if current_position < refund_amount:
        # 如果持仓不足,先通过买入订单获取股票
        need_to_buy = refund_amount - current_position
        log.info("持仓不足,买入 %s 股 %s" % (need_to_buy, security))
        order(security, need_to_buy)
    
    # 执行直接还券操作
    log.info("开始执行直接还券操作: %s, 数量: %s" % (security, refund_amount))
    marginsec_direct_refund(security, refund_amount, pindex=0)