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

PTrade 盘后复盘指南:如何使用 get_deliver 与 get_fundjour 提取历史交割单与资金流水

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

问题描述

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

Title: PTrade 盘后复盘:利用 get_deliver 与 get_fundjour 提取历史交割单与资金流水

Question: 如何使用 ptrade 接口导出并分析历史交割单与资金流水账单?

解决方案

PTrade 盘后复盘:利用 get_deliver 与 get_fundjour 提取历史交割单与资金流水

在量化交易实盘运行过程中,盘后对账与复盘是评估策略表现、校验成交细节和管理资金安全的重要环节。PTrade 平台提供了 get_deliver(获取历史交割单)和 get_fundjour(获取历史资金流水)两个接口,帮助开发者轻松提取历史交易与资金变更记录。


1. 接口使用说明与注意事项

  • 适用场景:仅在实盘交易模块可用,且仅支持在 before_trading_start(盘前)或 after_trading_end(盘后)阶段调用。
  • 查询范围:仅支持查询上一个交易日(包含)之前的历史数据,无法查询当日实时发生的交割或资金流水。
  • 账户类型:仅支持查询普通股票账户(非融资融券账户)。
  • 数据格式:返回柜台原始数据列表(list[dict]),不同券商柜台返回的字段可能存在微小差异,使用时需根据具体柜台字段进行解析。

2. 接口详解

2.1 获取历史交割单:get_deliver

get_deliver(start_date, end_date)
  • 参数
    • start_date (str):开始日期,格式为 'YYYYMMDD'(如 '20230101')。
    • end_date (str):结束日期,格式为 'YYYYMMDD'(如 '20230131')。
  • 主要返回字段
    • stock_code:证券代码
    • stock_name:证券名称
    • entrust_bs:成交方向(1-买,2-卖)
    • business_amount:成交数量
    • business_price:成交价格
    • business_balance:成交金额
    • occur_balance:发生金额/清算金额
    • clear_balance:结算资金

2.2 获取历史资金流水:get_fundjour

get_fundjour(start_date, end_date)
  • 参数
    • start_date (str):开始日期,格式为 'YYYYMMDD'
    • end_date (str):结束日期,格式为 'YYYYMMDD'
  • 主要返回字段
    • init_date:交易日期
    • business_name:业务名称(如“证券买入”、“证券卖出”)
    • occur_balance:发生金额(正数表示流入,负数表示流出)
    • post_balance:变动后资金余额
    • remark:备注信息

3. 实盘复盘策略代码示例

以下示例展示了如何在 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):
    # 获取上一交易日与当前交易日日期
    pre_date = str(get_trading_day(-1)).replace('-', '')
    current_date = context.blotter.current_dt.strftime('%Y%m%d')
    
    log.info('--- 开始盘后复盘数据提取 ---')
    
    # 1. 提取历史交割单
    delivers = get_deliver(pre_date, current_date)
    log.info('历史交割单提取结果:')
    for item in delivers:
        log.info('日期: %s, 代码: %s, 名称: %s, 方向: %s, 数量: %s, 价格: %s' % (
            item.get('init_date'),
            item.get('stock_code'),
            item.get('stock_name'),
            item.get('business_name'),
            item.get('business_amount'),
            item.get('business_price')
        ))
        
    # 2. 提取历史资金流水
    fundjours = get_fundjour(pre_date, current_date)
    log.info('历史资金流水提取结果:')
    for item in fundjours:
        log.info('日期: %s, 业务: %s, 变动金额: %s, 变动后余额: %s, 备注: %s' % (
            item.get('init_date'),
            item.get('business_name'),
            item.get('occur_balance'),
            item.get('post_balance'),
            item.get('remark')
        ))

4. 常见问题(FAQ)

Q1:为什么调用接口返回空列表 []

  • 检查查询日期是否包含当天。get_deliverget_fundjour 仅能查询历史交易日(最晚截至上一个交易日),若 start_dateend_date 仅设为今天且今天尚未结算,将无数据返回。
  • 确认账户是否为普通股票账户(两融账户不适用此接口)。

Q2:能否在 handle_data 盘中事件里实时获取流水?

  • 不能。这两个接口受柜台结算限制,仅支持在 before_trading_startafter_trading_end 阶段调用。盘中如需查看订单成交,请使用 get_trades() 或通过 on_trade_response 监听回调。