🚀 AI 一键生成 ptrade 策略代码

PTrade 两融实战:如何获取买券还券的最大可买数量 (get_marginsec_close_amount)?

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

问题描述

如何查询融券负债的买券还券最大可买数量?

解决方案

在 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))

注意事项

  1. 账户类型:此函数仅适用于信用账户(两融账户),普通账户调用无意义或返回空。
  2. 柜台连接:该数据直接来源于券商柜台,因此必须在实盘或模拟盘交易连接状态下才能获取有效数据。
  3. 负债前提:通常只有在您持有该标的的融券负债(即之前融券卖出过)时,查询“买券还券”数量才有实际意义。如果没有负债,理论上不需要进行买券还券操作。

Q&A

Q: get_marginsec_close_amountget_margincash_close_amount 有什么区别?
A:

  • get_marginsec_close_amount 是查询买券还券(针对融券负债)的最大可买数量。
  • get_margincash_close_amount 是查询卖券还款(针对融资负债)的最大可卖数量。

Q: 为什么我在回测中调用这个函数返回 None 或空字典?
A: 该函数属于交易专用函数,依赖于柜台的实时资产和负债数据。回测环境是基于历史数据的沙箱环境,无法连接真实柜台获取信用资产信息,因此在回测中不可用。

Q: 返回的数量单位是什么?
A: 返回的是数(int 类型)。