🚀 AI 一键生成 ptrade 策略代码

PTrade 信用账户管理:如何查询实时合约流水 (get_margin_contractreal)?

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

问题描述

如何查询当日融资融券的实时合约流水记录?

解决方案

在 PTrade 量化交易平台中,查询当日融资融券(两融)的实时合约流水记录,可以使用 get_margin_contractreal 函数。

以下是关于该函数的详细说明及代码示例。

1. 函数说明

  • 函数名称get_margin_contractreal()
  • 功能:用于查询当日的实时合约流水信息。
  • 适用范围:仅支持 PTrade客户端,且仅在 两融交易 模块可用(回测或其他模式不可用)。
  • 返回值:正常情况下返回一个 pandas.DataFrame 对象,包含了合约流水的详细信息;若查询异常或无数据则返回 None

2. 策略代码示例

以下代码展示了如何在盘中(handle_data)调用该接口并打印流水信息:

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

def handle_data(context, data):
    # 获取当日实时合约流水
    df_contract_real = get_margin_contractreal()
    
    # 判断返回值是否有效
    if df_contract_real is not None and not df_contract_real.empty:
        log.info("查询到当日实时合约流水记录:")
        log.info(df_contract_real)
        
        # 示例:遍历打印每一条流水的合约编号和发生金额
        # 注意:DataFrame的列名需参考API文档
        for index, row in df_contract_real.iterrows():
            compact_id = row['compact_id']      # 合约编号
            stock_code = row['stock_code']      # 证券代码
            occur_balance = row['occur_balance'] # 发生金额
            business_flag = row['business_flag'] # 业务标志
            
            log.info("合约编号: %s, 证券代码: %s, 业务标志: %s, 发生金额: %s" % (
                compact_id, stock_code, business_flag, occur_balance
            ))
    else:
        log.info("当前未查询到实时合约流水记录。")

3. 返回数据字段说明

get_margin_contractreal 返回的 DataFrame 包含以下主要字段(具体以券商柜台实际返回为准):

字段名 说明 类型
init_date 交易日期 int
compact_id 合约编号 str
stock_code 证券代码 str
compact_type 合约类别 (0-融资, 1-融券, 2-其他负债) str
business_flag 业务标志 int
occur_balance 发生金额 float
post_balance 后资金额 float
occur_amount 发生数量 float
post_amount 后证券额 float
occur_fare 发生费用 float
occur_interest 发生利息 float
remark 备注 str

4. 注意事项

  1. 环境限制:该函数无法在普通股票交易账户或回测环境中使用,必须在两融实盘交易环境中运行。
  2. 数据时效:该接口返回的是当日的“实时”流水,即当天的开仓、还款、还券等操作产生的流水记录。如果需要查询历史合约,请使用 get_margin_contract(查询存续合约)或其他历史查询接口。
  3. 异常处理:在实盘策略中,建议对返回结果进行 None 值判断,以防止因网络或柜台原因导致的数据获取失败进而引发报错。

Q&A

Q1: get_margin_contractrealget_margin_contract 有什么区别?
A1: get_margin_contractreal 用于查询当日发生的实时合约流水(如当日新开仓、当日产生的费用等动态记录);而 get_margin_contract 用于查询当前账户中存续的合约信息(即尚未了结的负债合约状态)。

Q2: 为什么我在回测中调用此函数报错或返回 None?
A2: 该函数是交易专用函数,依赖于柜台的实时推送数据。回测环境不支持两融柜台的实时流水查询,因此无法在回测中使用。

Q3: 如何判断合约流水的具体业务类型(如是融资开仓还是卖券还款)?
A3: 可以通过返回数据中的 business_flag(业务标志)字段来判断,或者结合 compact_type(合约类别)和 occur_amount/occur_balance 的正负值进行逻辑推断。具体业务标志代码需参考券商提供的柜台数据字典。