🚀 AI 一键生成 ptrade 策略代码
立即体验

ptrade 两融交易如何实时监控已用保证金与利息负债?(附风控策略源码)

ptrade | 发布时间: 2026/8/9
以下内容由 EasyQuant 生成。

问题描述

ptrade 两融策略风控:通过 get_margin_contract 实时监控已用保证金与负债
在 ptrade 两融交易中,怎样通过 API 实时查询我的信用账户已用保证金和利息负债?

解决方案

ptrade 两融交易实时监控已用保证金与利息负债指南

在进行融资融券(两融)量化交易时,风险控制是策略生死存亡的关键。信用账户具有杠杆效应,一旦市场剧烈波动,若不及时监控已用保证金利息负债,极易触发强制平仓。

ptrade 提供了丰富的两融专属 API,其中 get_margin_contract()(合约查询)和 get_margin_assert()(信用资产查询)是实现实时风控的核心接口。


一、 核心 API 介绍

1. get_margin_contract() — 合约级细粒度监控

该接口返回一个 DataFrame,包含当前账户下所有未了结的两融合约明细。通过它,你可以精确计算每一笔头寸的负债和保证金占用:

  • used_bail_balance:已用保证金(元)。
  • compact_interest:合约利息金额(元)。
  • real_compact_interest:日间实时利息金额(元)。
  • total_debit:该合约负债总额(元)。
  • compact_type:合约类别(0-融资,1-融券,2-其他负债)。

2. get_margin_assert() — 账户级全局监控

该接口返回一个 dict,用于快速获取整个信用账户的宏观资产状况:

  • total_debit:负债总额(元)。
  • assure_asset:担保资产(元)。
  • enable_bail_balance:可用保证金(元)。
  • fin_compact_interest / slo_compact_interest:融资/融券合约利息。

二、 实时风控策略源码示例

以下源码展示了如何在 handle_data 中实时获取两融账户数据,并在已用保证金占比过高利息负债超过阈值时,进行日志预警并限制开仓。

def initialize(context):
    # 设置操作的股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 设定风控阈值
    g.MAX_DEBIT_LIMIT = 500000.0  # 最大允许负债总额(元)
    g.MAX_MARGIN_USAGE_RATIO = 0.8  # 最大保证金占用比例 (已用/总担保)

def handle_data(context, data):
    # 1. 获取账户级全局信用资产信息
    margin_assert = get_margin_assert()
    if not margin_assert:
        log.warning("未能获取到信用资产信息!")
        return
        
    total_debit = margin_assert.get('total_debit', 0.0)          # 负债总额
    assure_asset = margin_assert.get('assure_asset', 0.0)        # 担保资产
    enable_bail = margin_assert.get('enable_bail_balance', 0.0)  # 可用保证金
    
    # 2. 获取合约级详细数据(计算已用保证金与实时利息)
    contract_df = get_margin_contract()
    
    total_used_bail = 0.0
    total_real_interest = 0.0
    
    if contract_df is not None and not contract_df.empty:
        # 汇总所有合约的已用保证金
        total_used_bail = contract_df['used_bail_balance'].sum()
        # 汇总所有合约的日间实时利息
        total_real_interest = contract_df['real_compact_interest'].sum()
    
    # 3. 计算风控指标
    # 保证金占用率 = 已用保证金 / (已用保证金 + 可用保证金)
    total_bail = total_used_bail + enable_bail
    margin_usage_ratio = (total_used_bail / total_bail) if total_bail > 0 else 0.0
    
    # 4. 打印实时监控日志
    log.info("------ 信用账户实时风控监控 ------")
    log.info(f"账户总负债: {total_debit:.2f} 元 | 实时产生总利息: {total_real_interest:.2f} 元")
    log.info(f"已用保证金: {total_used_bail:.2f} 元 | 可用保证金: {enable_bail:.2f} 元")
    log.info(f"当前保证金占用率: {margin_usage_ratio * 100:.2f}%")
    
    # 5. 风控逻辑触发
    if total_debit > g.MAX_DEBIT_LIMIT:
        log.error(f"【风控预警】当前总负债 {total_debit:.2f} 元已超过上限 {g.MAX_DEBIT_LIMIT} 元,暂停融资开仓!")
        # 执行相应的平仓或限制开仓逻辑...
        
    if margin_usage_ratio > g.MAX_MARGIN_USAGE_RATIO:
        log.error(f"【风控预警】保证金占用率 {margin_usage_ratio*100:.2f}% 超过安全阈值 {g.MAX_MARGIN_USAGE_RATIO*100:.2f}%,请注意爆仓风险!")
        # 限制进一步开仓

三、 开发者注意事项

  1. 客户端限制:两融专属查询函数(如 get_margin_contractget_margin_assert仅支持 PTrade 客户端实盘/仿真交易环境,在普通股票回测中无法使用。
  2. 数据更新频率get_margin_contract() 获取的是柜台实时同步的数据,但高频调用可能会对柜台造成压力,建议在 handle_data(分钟级)或通过 run_interval 设定合理的时间间隔(如 10 秒以上)进行轮询监控。