3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易实盘运行过程中,盘后对账与复盘是评估策略表现、校验成交细节和管理资金安全的重要环节。PTrade 平台提供了 get_deliver(获取历史交割单)和 get_fundjour(获取历史资金流水)两个接口,帮助开发者轻松提取历史交易与资金变更记录。
before_trading_start(盘前)或 after_trading_end(盘后)阶段调用。list[dict]),不同券商柜台返回的字段可能存在微小差异,使用时需根据具体柜台字段进行解析。get_deliverget_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:结算资金get_fundjourget_fundjour(start_date, end_date)
start_date (str):开始日期,格式为 'YYYYMMDD'。end_date (str):结束日期,格式为 'YYYYMMDD'。init_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):
# 获取上一交易日与当前交易日日期
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')
))
Q1:为什么调用接口返回空列表 []?
get_deliver 和 get_fundjour 仅能查询历史交易日(最晚截至上一个交易日),若 start_date 与 end_date 仅设为今天且今天尚未结算,将无数据返回。Q2:能否在 handle_data 盘中事件里实时获取流水?
before_trading_start 和 after_trading_end 阶段调用。盘中如需查看订单成交,请使用 get_trades() 或通过 on_trade_response 监听回调。