问题描述
解决方案
在 PTrade 量化交易平台中,查询融券负债的“买券还券”最大可买数量,需要使用 get_marginsec_close_amount 函数。
该函数用于查询在进行“买券还券”操作时,某个标的的最大可买数量。
函数说明
get_marginsec_close_amount(security, price=None)
- 使用场景:仅支持 PTrade 客户端可用,仅在两融交易模块可用(回测中无法连接柜台查询实时额度)。
- 参数:
security(str): 股票代码(例如'600519.SS')。price(float, 可选): 限定价格。如果不传,通常按当前市价或柜台规则计算。
- 返回值:
- 返回一个字典 (
dict),Key 为股票代码,Value 为最大可买数量(int)。 - 如果查询失败或无数据,返回空字典
{}。
- 返回一个字典 (
策略代码示例
以下是一个完整的策略示例,展示如何在盘中查询指定标的的买券还券最大可买数量:
def initialize(context):
# 初始化策略,设置要操作的标的
# 注意:必须是两融标的
g.security = '600519.SS'
set_universe(g.security)
def handle_data(context, data):
# 仅在交易模式下运行,避免回测报错(虽然该函数仅交易可用,加判断更稳健)
if is_trade():
# 1. 不指定价格查询(通常按市价)
max_amount_info = get_marginsec_close_amount(g.security)
if max_amount_info:
max_qty = max_amount_info.get(g.security)
log.info("【市价】股票 %s 买券还券最大可买数量: %s" % (g.security, max_qty))
else:
log.info("查询失败或无数据")
# 2. 指定价格查询(例如指定价格为 1700.00)
# limit_price = 1700.00
# max_amount_info_limit = get_marginsec_close_amount(g.security, price=limit_price)
# if max_amount_info_limit:
# max_qty_limit = max_amount_info_limit.get(g.security)
# log.info("【限价 %s】股票 %s 买券还券最大可买数量: %s" % (limit_price, g.security, max_qty_limit))
注意事项
- 账户类型:此函数仅适用于信用账户(两融账户),普通账户调用无意义或返回空。
- 柜台连接:该数据直接来源于券商柜台,因此必须在实盘或模拟盘交易连接状态下才能获取有效数据。
- 负债前提:通常只有在您持有该标的的融券负债(即之前融券卖出过)时,查询“买券还券”数量才有实际意义。如果没有负债,理论上不需要进行买券还券操作。
Q&A
Q: get_marginsec_close_amount 和 get_margincash_close_amount 有什么区别?
A:
get_marginsec_close_amount是查询买券还券(针对融券负债)的最大可买数量。get_margincash_close_amount是查询卖券还款(针对融资负债)的最大可卖数量。
Q: 为什么我在回测中调用这个函数返回 None 或空字典?
A: 该函数属于交易专用函数,依赖于柜台的实时资产和负债数据。回测环境是基于历史数据的沙箱环境,无法连接真实柜台获取信用资产信息,因此在回测中不可用。
Q: 返回的数量单位是什么?
A: 返回的是股数(int 类型)。