🚀 AI 一键生成 ptrade 策略代码

PTrade 两融数据:使用 get_enslo_security_info 查询融券状态与保证金率

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

问题描述

怎么查询某只股票的融券保证金比例和融券状态?

解决方案

在PTrade中,查询某只股票的融券保证金比例和融券状态,需要使用 get_enslo_security_info 函数。

该函数仅在两融交易模块(包括回测和实盘)可用。它返回一个字典,包含了股票的融券相关信息。

核心步骤

  1. 调用接口:使用 get_enslo_security_info() 获取融券信息字典。
  2. 提取数据:根据股票代码从字典中获取对应的详细信息。
  3. 查看字段
    • slo_ratio: 融券保证金比例。
    • slo_status: 融券状态("0":正常,"1":暂停,"2":作废)。

策略代码示例

以下是一个完整的策略示例,展示如何在盘中查询指定股票(如恒生电子 600570.SS)的融券信息:

def initialize(context):
    # 设置需要查询的股票代码
    g.security = '600570.SS'
    # 设置股票池
    set_universe(g.security)

def handle_data(context, data):
    # 获取融券信息
    # 注意:该函数通常返回当前股票池或持仓相关的融券信息
    slo_info_dict = get_enslo_security_info()
    
    # 判断返回结果是否为空
    if slo_info_dict:
        # 尝试获取指定股票的信息
        stock_info = slo_info_dict.get(g.security)
        
        if stock_info:
            # 获取融券保证金比例
            ratio = stock_info.get('slo_ratio')
            # 获取融券状态
            status = stock_info.get('slo_status')
            
            # 状态代码翻译
            status_desc = "未知"
            if status == '0':
                status_desc = "正常"
            elif status == '1':
                status_desc = "暂停"
            elif status == '2':
                status_desc = "作废"
            
            log.info("股票代码: %s" % g.security)
            log.info("融券保证金比例: %s" % ratio)
            log.info("融券状态: %s (%s)" % (status, status_desc))
            log.info("完整信息: %s" % stock_info)
        else:
            log.info("未查询到股票 %s 的融券信息,可能该股非融券标的或无券源。" % g.security)
    else:
        log.info("未获取到任何融券信息,请检查是否处于两融账号环境。")

字段详细说明

get_enslo_security_info 返回的字典中,单只股票包含以下关键字段:

  • slo_ratio (float): 融券保证金比例(例如 0.6 代表 60%)。
  • slo_status (str): 融券状态。
    • "0": 正常(可以融券卖出)。
    • "1": 暂停(暂停融券卖出)。
    • "2": 作废。
  • enable_amount (int): 融券可用数量。
  • exchange_type (str): 交易类别(通常 "1" 为上海,"2" 为深圳)。

注意事项

  1. 账户权限:该函数必须在融资融券(信用)账户环境下运行,普通股票账户无法获取此数据。
  2. 股票池设置:建议先通过 set_universe 设置股票池,系统通常会优先拉取股票池内标的的信息。
  3. 返回值检查:如果某只股票不是融券标的,或者券商端没有该股票的融券数据,字典中可能不会包含该股票的 Key,代码中需要做好判空处理。

Q&A

Q1: get_enslo_security_info 函数支持传入参数吗?
A1: 支持传入 cash_group 参数(int类型),用于指定两融头寸性质。1 表示普通头寸,2 表示专项头寸。如果不传参,默认查询普通头寸。

Q2: 如果返回的 slo_status 是 "1" (暂停),我还能下单融券卖出吗?
A2: 不能。状态为暂停时,柜台会拒绝融券卖出(marginsec_open)的委托。

Q3: 如何查询某只股票是否在交易所的融券标的名单中?
A3: 可以使用 get_marginsec_stocks() 函数,它会返回上交所和深交所披露的所有可融券标的列表。但要注意,在标的名单中不代表券商一定有券源(enable_amount),具体可用数量需以 get_enslo_security_info 查询结果为准。