🚀 AI 一键生成 ptrade 策略代码

PTrade 两融风控:实时计算维持担保比例

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

问题描述

如何查询和计算信用账户的维持担保比例?

解决方案

在PTrade量化交易平台中,查询和计算信用账户(融资融券账户)的维持担保比例,主要依赖于 get_margin_assert() 函数。

该函数用于获取信用账户的资产负债信息,通过返回字典中的 担保资产 (assure_asset)负债总额 (total_debit) 两个字段即可计算出维持担保比例。

计算公式

$$ \text{维持担保比例} = \frac{\text{担保资产 (assure_asset)}}{\text{负债总额 (total_debit)}} \times 100% $$

实现步骤

  1. 调用 get_margin_assert() 获取信用资产信息字典。
  2. 从字典中提取 assure_asset(担保资产)和 total_debit(负债总额)。
  3. 进行除法运算计算比例(需注意分母为0的情况,即无负债时)。

策略代码示例

以下是一个完整的策略示例,展示了如何在盘中实时监控维持担保比例:

def initialize(context):
    # 初始化策略,设置一个标的用于回测或交易环境启动
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 获取信用账户资产信息
    # 注意:该函数仅在两融交易模块或两融回测中可用
    margin_info = get_margin_assert()
    
    # 判空保护,确保获取到了数据
    if margin_info:
        # 1. 获取担保资产 (总资产)
        assure_asset = margin_info.get('assure_asset', 0.0)
        
        # 2. 获取负债总额
        total_debit = margin_info.get('total_debit', 0.0)
        
        log.info("担保资产: %.2f, 负债总额: %.2f" % (assure_asset, total_debit))
        
        # 3. 计算维持担保比例
        if total_debit > 0:
            # 计算比例
            maintenance_ratio = assure_asset / total_debit
            # 转换为百分比格式
            ratio_percent = maintenance_ratio * 100
            
            log.info("当前维持担保比例: %.2f%%" % ratio_percent)
            
            # 示例风控逻辑:如果比例低于140%,打印警告
            if ratio_percent < 140:
                log.warning("警告:维持担保比例低于140%,请注意风险!")
                
        else:
            # 负债为0,说明没有融资融券负债,账户安全
            log.info("当前无负债,维持担保比例为安全状态 (无限大)")
            
    else:
        log.info("未能获取到信用资产信息,请检查是否为两融账号或两融回测环境。")

关键字段说明

在使用 get_margin_assert() 返回的字典中,以下是相关的关键字段:

字段名 类型 说明
assure_asset float 担保资产。即信用账户内的总资产(现金+证券市值)。
total_debit float 负债总额。包含融资合约金额、融券合约金额及相关利息费用等。
enable_bail_balance float 可用保证金。
fin_enable_quota float 融资可用额度。
slo_enable_quota float 融券可用额度。

注意事项

  1. 适用环境get_margin_assert 函数仅支持 Ptrade客户端 可用,且仅在 两融回测两融交易 模块可用。如果在普通股票账户回测中调用,可能会返回空字典或报错。
  2. 除零错误:在编写代码时,务必判断 total_debit 是否大于0。如果账户没有融资或融券负债,分母为0会导致程序报错。
  3. 数据更新频率:在实盘交易中,资产和负债数据通常由柜台推送或查询更新,建议在 handle_datarun_interval 中调用以获取最新状态。

Q&A

Q: 为什么我在回测中调用 get_margin_assert 返回了空字典?
A: 请检查您的回测环境设置。该函数仅在“融资融券”业务类型的回测中有效。如果您选择的是“普通股票”业务类型,该函数将无法获取数据。

Q: 维持担保比例低于多少会被平仓?
A: 这取决于券商的具体规定。通常情况下,维持担保比例低于130%即进入追保线(需追加担保物),低于110%或115%可能会触发强制平仓。具体数值请咨询您的开户券商。

Q: 如何获取具体的融资或融券合约负债?
A: 可以使用 get_margin_contract() 函数查询具体的合约明细,或者通过 get_margin_assert() 返回字典中的 fin_compact_balance (融资合约金额) 和 slo_compact_balance (融券合约金额,需结合数量和价格计算) 来查看。