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

joinquant 信用账户实战:如何调用融资买入(margincash_open)与融券卖出(marginsec_open)接口?

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

问题描述

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

Title: joinquant 信用账户实战:margincash_open 与 marginsec_open 接口详解

Question: 如何在 joinquant 中调用融资买入和融券卖出 API?

解决方案

joinquant 信用账户实战:margincash_open 与 marginsec_open 接口详解

在聚宽(JoinQuant)平台进行融资融券(两融)交易,需要先配置信用账户,再使用特定的融资融券 API 接口。本文将详细介绍如何初始化信用账户以及调用 margincash_open(融资买入)和 marginsec_open(融券卖出)接口。


一、初始化融资融券信用账户

默认的 subportfolios[0] 账户类型为普通股票账户(type='stock'),不支持融资融券操作。要使用融资融券功能,必须在 initialize 函数中设置 type='stock_margin'

def initialize(context):
    # 设置动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 获取初始资金
    init_cash = context.portfolio.starting_cash 
    
    # 设定子账户为融资融券账户
    set_subportfolios([SubPortfolioConfig(cash=init_cash, type='stock_margin')])
    
    # (可选)设置融资/融券利率与保证金比率
    set_option('margincash_interest_rate', 0.08)  # 融资年利率 8%
    set_option('marginsec_interest_rate', 0.10)   # 融券年利率 10%
    set_option('margincash_margin_rate', 1.0)     # 融资保证金比例 100%
    set_option('marginsec_margin_rate', 1.0)      # 融券保证金比例 100%

二、核心 API 接口详解

1. 融资买入:margincash_open

语法:
margincash_open(security, amount, style=None, pindex=0)

  • security: 标的代码(如 '000001.XSHE')。
  • amount: 买入数量(正整数,需为 100 的整数倍)。
  • style: 订单类型,None 表示市价单(MarketOrderStyle),也可指定限价单 LimitOrderStyle(price)
  • pindex: 对应信用账户的仓位索引,默认为 0

2. 融券卖出:marginsec_open

语法:
marginsec_open(security, amount, style=None, pindex=0)

  • security: 标的代码(如 '000001.XSHE')。
  • amount: 卖出数量(正整数,需为 100 的整数倍)。
  • style: 订单类型。
  • pindex: 仓位索引,默认为 0

3. 相关平仓/还款接口

  • 卖券还款margincash_close(security, amount)
  • 直接还款margincash_direct_refund(value)
  • 买券还券marginsec_close(security, amount)
  • 直接还券marginsec_direct_refund(security, amount)

三、检查标的是否支持融资融券

在下单前,建议使用聚宽提供的接口判断标的是否属于两融标的:

  • get_margincash_stocks():获取可融资标的列表。
  • get_marginsec_stocks():获取可融券标的列表。
# 判断平安银行是否可以融资与融券
is_cash_target = '000001.XSHE' in get_margincash_stocks()
is_sec_target = '000001.XSHE' in get_marginsec_stocks()

四、完整实战代码示例

以下是一个简单的演示策略,开盘时检查标的并分别进行融资买入与融券卖出操作:

from jqdata import *

def initialize(context):
    set_option('use_real_price', True)
    # 设置两融账户
    set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='stock_margin')])
    
    g.security = '000001.XSHE'
    run_daily(market_open, time='9:30')

def market_open(context):
    security = g.security
    
    # 1. 检查是否在融资/融券列表中
    can_cash = security in get_margincash_stocks()
    can_sec = security in get_marginsec_stocks()
    
    # 2. 执行融资买入
    if can_cash:
        order_res = margincash_open(security, 1000)
        if order_res:
            log.info("融资买入成功: %s" % security)
            
    # 3. 执行融券卖出
    if can_sec:
        order_res = marginsec_open(security, 1000)
        if order_res:
            log.info("融券卖出成功: %s" % security)

五、注意事项

  1. 权限设置:必须在 initialize 中使用 set_subportfolios 将账户类型设置为 stock_margin,否则调用两融 API 时会抛出异常。
  2. T+1 还券限制:当日融券卖出获得的股票或资金在 T+1 日后方可用于还券与还款。
  3. 数据延时get_margincash_stocksget_marginsec_stocks 获取的是上交所、深交所最新披露的数据,无法获取当天未完结交易日的数据。