🚀 AI 一键生成 ptrade 策略代码

PTrade 风控实战:如何计算并监控信用账户维持担保比例?

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

问题描述

如何在代码中计算信用账户的维持担保比例?

解决方案

在PTrade中,计算信用账户(两融账户)的维持担保比例,主要依赖于 get_margin_assert() 函数。该函数返回一个包含信用资产信息的字典,其中包含了计算所需的“担保资产”和“负债总额”。

计算公式

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

实现步骤

  1. 调用 get_margin_assert() 获取信用资产数据。
  2. 从返回的字典中提取 assure_asset(担保资产)和 total_debit(负债总额)。
  3. 进行除法运算计算比例(注意处理负债为0的情况,避免除以零错误)。

代码示例

以下是一个完整的策略示例,展示如何在 handle_data 中计算并打印当前的维持担保比例:

def initialize(context):
    # 初始化策略,设置股票池(示例)
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    # 1. 获取信用资产信息
    # 注意:该函数仅在两融交易模块(实盘或两融回测)中可用
    margin_assets = get_margin_assert()
    
    if margin_assets:
        # 2. 提取担保资产和负债总额
        # assure_asset: 担保资产
        total_assets = margin_assets.get('assure_asset', 0.0)
        # total_debit: 负债总额
        total_liabilities = margin_assets.get('total_debit', 0.0)
        
        # 3. 计算维持担保比例
        # 必须判断负债是否大于0,避免除以0报错
        if total_liabilities > 0:
            # 维持担保比例 = 担保资产 / 负债总额
            maintenance_ratio = total_assets / total_liabilities
            
            # 打印结果 (保留4位小数)
            log.info("当前担保资产: %.2f, 当前负债总额: %.2f" % (total_assets, total_liabilities))
            log.info("当前维持担保比例: %.4f%%" % (maintenance_ratio * 100))
            
            # 示例逻辑:如果维保比例低于140% (1.4),发出警告
            if maintenance_ratio < 1.4:
                log.warning("警报:维持担保比例低于140%,请注意风险!")
                
        else:
            # 如果没有负债,维持担保比例通常视为无穷大或安全状态
            log.info("当前无负债,无需计算维持担保比例。担保资产: %.2f" % total_assets)
    else:
        log.info("未能获取到信用资产信息,请检查是否处于两融账号环境。")

关键字段说明

根据PTrade API文档,get_margin_assert() 返回的字典中包含以下关键字段:

  • assure_asset: 担保资产(浮点数)。即账户中所有可用作担保的现金和证券市值的总和。
  • total_debit: 负债总额(浮点数)。即融资合约金额、融券合约金额以及相关利息费用的总和。

注意事项

  1. 适用环境:此代码仅在两融交易(信用账户)环境中有效。如果在普通股票账户回测中调用 get_margin_assert(),可能会返回空字典或报错。
  2. 除零保护:在编写策略时,务必检查 total_debit 是否为0。如果账户没有融资融券负债,分母为0会导致程序崩溃。
  3. 数据更新get_margin_assert() 获取的是柜台提供的实时或准实时数据,具体更新频率取决于券商柜台的推送机制。

Q&A

Q: get_margin_assert() 函数在普通股票账户回测中能用吗?
A: 不能。该函数仅支持 PTrade 客户端可用,且仅在两融交易模块(包括两融回测和实盘)可用。普通账户调用会返回空数据或无效数据。

Q: 维持担保比例低于多少会被平仓?
A: 这取决于券商的具体规定。通常情况下,维持担保比例低于 130% 会触发追保(追加保证金),低于 110%115% 可能会触发强制平仓。建议在策略中设置高于券商警戒线的阈值(如140%或150%)进行风控。

Q: 如何获取具体的融资或融券负债明细?
A: 可以通过 get_margin_assert() 返回字典中的其他字段获取,例如:

  • fin_compact_balance: 融资合约金额
  • slo_compact_fare: 融券合约费用
  • fin_compact_interest: 融资合约利息
    具体字段请参考 API 文档中的 get_margin_assert 部分。