3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易与自动化策略运行过程中,盘后对账与交易复盘是确保资金安全、核对撮合成本及评估策略表现的关键环节。PTrade 平台提供了 get_deliver(获取历史交割单)和 get_fundjour(获取历史资金流水)两个核心 API,方便开发者在盘后事件中自动化提取柜台原数据进行对账。
get_deliver 和 get_fundjour 仅支持在交易模块的 before_trading_start(盘前)和 after_trading_end(盘后)阶段调用,无法在盘中 handle_data 或 tick_data 中触发。get_deliver(start_date, end_date)
start_date (str):开始日期,格式为 'YYYYMMDD'(如 '20230101')。end_date (str):结束日期,格式为 'YYYYMMDD'(如 '20230110')。list[dict],每个字典代表一条交割记录,包含股票代码、成交数量、成交价格、手续费(佣金、印花税、过户费等)、发生金额及清算金额等。get_fundjour(start_date, end_date)
start_date (str):开始日期,格式为 'YYYYMMDD'。end_date (str):结束日期,格式为 'YYYYMMDD'。list[dict],每个字典代表一条资金变动流水,包含发生金额(occur_balance)、变动后余额(post_balance)、业务名称(business_name,如“证券买入”、“银证转账”)及备注描述等。以下策略展示了如何在每日收盘后的 after_trading_end 触发器中,提取过去一段时间的交割单与资金流水并打印或进行复盘:
import pandas as pd
def initialize(context):
# 设置股票池
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 盘中交易逻辑
pass
def after_trading_end(context, data):
# 获取上一交易日日期并格式化
prev_date = context.previous_date.strftime('%Y%m%d')
current_date = context.blotter.current_dt.strftime('%Y%m%d')
log.info("=== 开始执行盘后对账与数据提取 ===")
# 1. 提取历史交割单
delivers = get_deliver(prev_date, current_date)
if delivers:
df_delivers = pd.DataFrame(delivers)
log.info("历史交割单获取成功,记录数: %d" % len(df_delivers))
# 打印关键对账字段(股票代码、业务名称、成交价、发生数量、清算金额等)
for item in delivers:
stock_code = item.get('stock_code', '')
business_name = item.get('business_name', '')
amount = item.get('business_amount', 0)
price = item.get('business_price', 0)
clear_balance = item.get('clear_balance', 0)
log.info("交割记录: [%s] %s %d股@%.3f元, 清算金额: %.2f" %
(stock_code, business_name, amount, price, clear_balance))
else:
log.info("指定范围内无交割单记录")
# 2. 提取历史资金流水
fundjours = get_fundjour(prev_date, current_date)
if fundjours:
df_fundjours = pd.DataFrame(fundjours)
log.info("历史资金流水获取成功,记录数: %d" % len(df_fundjours))
for item in fundjours:
b_name = item.get('business_name', '')
occur_bal = item.get('occur_balance', 0)
post_bal = item.get('post_balance', 0)
remark = item.get('remark', '')
log.info("资金流水: %s, 变动金额: %.2f, 变动后余额: %.2f, 备注: %s" %
(b_name, occur_bal, post_bal, remark))
else:
log.info("指定时间内无资金流水变动")
get_research_path(),可将获取到的 DataFrame 数据导出为 CSV 文件保存至研究目录,便于后续可视化或二次建模分析。try...except 结构,增强策略盘后运行的健壮性。