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

ptrade 账户盘后复盘:如何利用 get_deliver 与 get_fundjour 提取历史账单?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade 账户盘后复盘:利用 get_deliver 与 get_fundjour 提取历史账单

Question: 如何在 ptrade 中获取历史交割单和资金流水进行盘后交易复盘?

解决方案

ptrade 账户盘后复盘:利用 get_deliver 与 get_fundjour 提取历史账单

在自动化量化交易与策略回测/实盘运营中,盘后复盘是验证交易逻辑、核对账户资金与持仓变动的重要环节。ptrade 量化交易平台提供了 get_deliver(获取历史交割单)与 get_fundjour(获取历史资金流水)两大关键 API,帮助开发者实现自动化的盘后账单提取与复盘分析。


一、接口基本说明与使用限制

1. 使用场景与运行阶段

  • 运行环境:仅支持在交易模块中使用(研究或回测模块不适用)。
  • 调用阶段:仅支持在盘前函数 before_trading_start 和盘后函数 after_trading_end 中调用。
  • 适用账户:仅支持普通股票账户(非融资融券/两融账户)。
  • 查询时间限制:只能查询上一个交易日(含)之前的历史数据,无法实时查询当天的实时交割单或资金流水。

二、API 参数与返回值详解

1. get_deliver - 获取历史交割单信息

接口语法:

get_deliver(start_date, end_date)

参数说明:

  • start_date (str): 开始日期,格式必须为 'YYYYMMDD'(如 '20230101')。
  • end_date (str): 结束日期,格式必须为 'YYYYMMDD'(如 '20230131')。

返回值格式:

返回包含字典的列表 list[dict],每个字典代表一条柜台返回的交割单记录。常用解析字段包括:

  • stock_code: 证券代码
  • stock_name: 证券名称
  • business_name: 业务名称(如“证券买入”、“证券卖出”)
  • business_amount: 成交数量
  • business_price: 成交价格
  • business_balance: 成交金额
  • occur_balance: 发生金额(含手续费等结算资金)
  • post_balance: 变动后资金余额

2. get_fundjour - 获取历史资金流水信息

接口语法:

get_fundjour(start_date, end_date)

参数说明:

  • start_date (str): 开始日期,格式必须为 'YYYYMMDD'
  • end_date (str): 结束日期,格式必须为 'YYYYMMDD'

返回值格式:

返回包含字典的列表 list[dict],每个字典代表一条资金流水记录。常用解析字段包括:

  • business_date: 业务日期
  • business_name: 业务名称(如“证券买入”、“资金存取”等)
  • occur_balance: 发生金额
  • post_balance: 变动后可用资金余额
  • remark: 柜台备注信息

三、盘后自动复盘完整示例代码

以下示例展示了如何在 after_trading_end 盘后阶段调用这两个接口,提取最近一个交易日的账单信息并输出日志:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    pass

def after_trading_end(context, data):
    # 1. 获取上一交易日日期(格式为 YYYYMMDD)
    last_trade_day = get_trading_day(-1).strftime('%Y%m%d')
    log.info("开始提取上一交易日 (%s) 的复盘数据..." % last_trade_day)
    
    # 2. 获取历史交割单
    deliver_list = get_deliver(last_trade_day, last_trade_day)
    if deliver_list:
        log.info("--- 历史交割单明细 (共 %d 条) ---" % len(deliver_list))
        for item in deliver_list:
            code = item.get('stock_code', 'N/A')
            name = item.get('stock_name', 'N/A')
            action = item.get('business_name', 'N/A')
            amount = item.get('business_amount', 0)
            price = item.get('business_price', 0.0)
            balance = item.get('business_balance', 0.0)
            log.info("[%s] %s(%s) | 操作: %s | 数量: %s | 价格: %.2f | 金额: %.2f" % 
                     (last_trade_day, name, code, action, amount, price, balance))
    else:
        log.info("上一交易日无交割单数据记录")
        
    # 3. 获取历史资金流水
    fund_list = get_fundjour(last_trade_day, last_trade_day)
    if fund_list:
        log.info("--- 历史资金流水明细 (共 %d 条) ---" % len(fund_list))
        for fund in fund_list:
            b_name = fund.get('business_name', 'N/A')
            occur = fund.get('occur_balance', 0.0)
            post = fund.get('post_balance', 0.0)
            remark = fund.get('remark', '')
            log.info("[%s] 业务: %s | 发生金额: %.2f | 剩余金额: %.2f | 备注: %s" % 
                     (last_trade_day, b_name, occur, post, remark))
    else:
        log.info("上一交易日无资金流水数据记录")

四、复盘注意事项

  1. 柜台字段差异处理:不同券商及其背后的柜台系统(如恒生 UFT、迅投等)返回的字典字段名称可能存在细微差异。实际编写复盘脚本时,建议先对返回的原始字典进行 log.info 打印,确认具体 Key 之后再进行定向字段解析。
  2. 调用频率与性能:避免在盘前/盘后短时间内重复密集发起历史账单查询,适度进行数据缓存或将对账结果保存至本地/Notebook 存储中。