问题描述
解决方案
在PTrade中,查询某只股票的融券保证金比例和融券状态,需要使用 get_enslo_security_info 函数。
该函数仅在两融交易模块(包括回测和实盘)可用。它返回一个字典,包含了股票的融券相关信息。
核心步骤
- 调用接口:使用
get_enslo_security_info()获取融券信息字典。 - 提取数据:根据股票代码从字典中获取对应的详细信息。
- 查看字段:
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" 为深圳)。
注意事项
- 账户权限:该函数必须在融资融券(信用)账户环境下运行,普通股票账户无法获取此数据。
- 股票池设置:建议先通过
set_universe设置股票池,系统通常会优先拉取股票池内标的的信息。 - 返回值检查:如果某只股票不是融券标的,或者券商端没有该股票的融券数据,字典中可能不会包含该股票的 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 查询结果为准。