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

ptrade 平台如何查询融券标的可用数量并实现自动融券卖出?(附 Python 源码)

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

问题描述

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

Title: ptrade 两融策略:融券卖出风控与券源可用量查询

Question: ptrade 如何查询融券标的可用数量并实现自动融券卖出?

解决方案

ptrade 融券标的可用数量查询与自动化融券卖出实现指南

在融资融券(两融)量化交易中,融券卖出常用于对冲大盘风险或捕捉个股下行Alpha收益。然而,融券交易受限于券商的券源池库存以及实时可用额度。如果直接下单而不预先查询可用数量,极易导致委托废单。

本文将详细介绍如何在 ptrade 量化平台上通过 API 实时查询融券标的可用数量,并构建带有风控机制的自动化融券卖出策略。


一、核心 API 接口说明

1. 查询融券标的最大可卖数量

  • 接口get_marginsec_open_amount(security, price=None)
  • 说明:查询当前信用账户针对某只股票在指定价格下最大可融券卖出的股数。
  • 返回值:字典格式,例如 {'600030.SS': 10000}

2. 查询融券头寸与券源详细信息

  • 接口get_enslo_security_info(cash_group=None)
  • 说明:获取信用账户中所有可融券标的的详细券源信息(包含保证金比例、融券状态、可用数量等)。
  • 返回值:字典套字典,包含 enable_amount(可用数量)、slo_status(融券状态,0为正常)等。

3. 融券卖出下单

  • 接口marginsec_open(security, amount, limit_price=None)
  • 说明:发起融券卖出委托。
  • 参数
    • security:股票代码(如 '600030.SS'
    • amount:卖出数量(正整数,必须为 100 的整数倍)
    • limit_price:委托限价(不传则默认取当前最新价)

二、自动化融券卖出与风控策略代码

以下是一个完整的 ptrade 量化策略源码,展示了如何在盘中进行双均线死叉信号检测、券源可用量校验以及自动融券下单:

# ptrade 融券卖出策略示例

def initialize(context):
    # 设置目标交易标的(需确保属于融券标的)
    g.security = '600030.SS'  # 中信证券
    set_universe(g.security)
    g.flag = False            # 防止重复下单标识

def before_trading_start(context, data):
    g.flag = False
    # 检查策略是否在两融交易业务环境下运行
    if get_business_type() != 'rzrq':
        log.error('当前策略非两融业务类型,融券接口将无法正常执行!')

def handle_data(context, data):
    if g.flag:
        return
    
    security = g.security
    
    # 1. 计算均线指标(5日均线与10日均线)
    df = get_history(10, '1d', 'close', security, fq=None, include=False)
    ma5 = df['close'][-5:].mean()
    ma10 = df['close'][-10:].mean()
    
    # 2. 触发死叉空头信号(MA5 下穿 MA10)
    if ma5 < ma10:
        # 3. 校验券源与最大可融券数量
        marginsec_dict = get_marginsec_open_amount(security)
        if not marginsec_dict or security not in marginsec_dict:
            log.warning('无法获取标的 %s 的融券额度信息' % security)
            return
            
        max_sell_amount = marginsec_dict.get(security, 0)
        log.info('标的 %s 当前最大可融券卖出数量为: %d' % (security, max_sell_amount))
        
        # 4. 风控判断:可用券量必须 >= 100 股
        if max_sell_amount >= 100:
            # 按照最小单位 100 股整取进行下单(此处示例取可卖量的 50% 且向下取整)
            order_amount = int((max_sell_amount * 0.5) // 100) * 100
            if order_amount >= 100:
                # 取当前最新价作为限价单价格
                current_price = data[security]['close']
                order_id = marginsec_open(security, order_amount, limit_price=current_price)
                log.info('成功提交融券卖出委托,订单ID: %s, 委托数量: %d, 价格: %.2f' % (order_id, order_amount, current_price))
                g.flag = True
        else:
            log.warning('标的 %s 可用融券量不足 100 股,取消下单' % security)

三、两融风控与注意事项

  1. 两融权限与环境marginsec_openget_marginsec_open_amount 等接口仅在 两融实盘/模拟盘 环境下可用,普通股票账户调用会报错。
  2. 最小下单单位:融券卖出下单数量必须为 100 股的整数倍,必须通过 int(amount // 100) * 100 进行向下取整处理。
  3. 价格笼子与限价:深交所与科创板存在申报价格范围限制,建议通过 get_snapshot 获取实时买一/卖一档价格或参考保护限价,避免报单因超出价格笼子而被柜台废单。