🚀 AI 一键生成 joinquant 策略代码

JoinQuant 平台如何执行融资买入交易?(margincash_open 详解)

joinquant | 发布时间: 2025/12/21
以下内容由 EasyQuant 生成。

问题描述

如何在策略中下达融资买入指令?

解决方案

在聚宽(JoinQuant)策略中,下达融资买入(向券商借钱买入股票)指令,主要使用 margincash_open 函数。

关键注意事项:
默认情况下,聚宽策略的账户类型是普通股票账户(stock)。要进行融资融券操作,必须在 initialize 函数中通过 set_subportfolios 将账户类型设置为融资融券账户(stock_margin)。

以下是具体的步骤和代码示例:

核心步骤

  1. 初始化账户:在 initialize 中设置 type='stock_margin'
  2. 检查标的:建议使用 get_margincash_stocks() 检查标的是否属于可融资标的。
  3. 下达指令:调用 margincash_open(security, amount) 进行融资买入。

策略代码示例

# -*- coding: utf-8 -*-
from jqdata import *

def initialize(context):
    # 1. 设定账户为融资融券账户 (必须步骤)
    # 如果不设置,默认为普通账户,无法调用融资接口
    set_subportfolios([SubPortfolioConfig(cash=context.portfolio.starting_cash, type='stock_margin')])
    
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 设定融资利率 (可选,默认8%)
    set_option('margincash_interest_rate', 0.08)
    # 设定融资保证金比率 (可选,默认100%)
    set_option('margincash_margin_rate', 1.0)

    # 每天开盘时运行
    run_daily(market_open, time='09:30')

def market_open(context):
    security = '000001.XSHE' # 平安银行
    
    # 2. 获取当前市场上所有可融资的标的列表
    margin_stocks = get_margincash_stocks()
    
    # 检查标的是否可融资
    if security in margin_stocks:
        # 3. 下达融资买入指令
        # 参数:标的代码,数量(股)
        # 这里的 1000 表示融资买入 1000 股
        order = margincash_open(security, 1000)
        
        if order:
            log.info(f"融资买入成功: {security}, 数量: 1000")
        else:
            log.info(f"融资买入失败: {security}")
    else:
        log.info(f"{security} 不是融资标的,无法进行融资买入")

    # 打印当前账户的融资负债
    # cash_liability 代表融资负债金额
    log.info(f"当前融资负债: {context.portfolio.cash_liability}")

API 函数说明

margincash_open

用于融资买入标的。

  • 函数原型margincash_open(security, amount, style=None, pindex=0)
  • 参数
    • security: 标的代码(如 '000001.XSHE')。
    • amount: 交易数量(股数),必须为正数。
    • style: 下单类型,默认为 None(市价单),也可以传入 LimitOrderStyle(限价单)。
    • pindex: 仓位索引,默认为 0。
  • 返回值Order 对象或者 None(如果创建委托失败)。

相关操作补充

融资买入后,通常涉及偿还负债,主要有两种方式:

  1. 卖券还款 (margincash_close)
    卖出持有的股票,资金自动用于归还融资负债。

    # 卖出 1000 股平安银行用于还款
    margincash_close('000001.XSHE', 1000)
    
  2. 直接还款 (margincash_direct_refund)
    使用账户内的可用现金直接归还融资负债。

    # 直接还款 10000 元
    margincash_direct_refund(10000)
    

Q&A

Q: 为什么调用 margincash_open 报错提示没有权限或函数不存在?
A: 最常见的原因是没有在 initialize 函数中初始化融资融券账户。请确保添加了代码:set_subportfolios([SubPortfolioConfig(cash=..., type='stock_margin')])。默认的 type='stock' 不支持融资融券。

Q: 如何查询一只股票是否可以融资买入?
A: 使用 get_margincash_stocks() 函数可以获取当前交易日所有可融资标的的列表。建议在下单前判断目标股票是否在该列表中。

Q: 融资买入的利息和保证金比例是多少?
A: 默认融资利率为年化 8%,默认保证金比例为 100%。您可以通过 set_option('margincash_interest_rate', value)set_option('margincash_margin_rate', value)initialize 中进行修改以匹配您的需求。

Q: 融资买入后,持仓成本 (avg_cost) 如何计算?
A: 融资买入会增加持仓数量,其成本计算逻辑与普通买入一致,即 (原持仓价值 + 新买入价值 + 手续费) / 总数量。但请注意,融资会产生负债 (cash_liability) 和利息 (interest),这些会在账户总资产中体现。