def add_cumulative_increments(raw_updates): # 在阶段筛选以前还原日内累计量额。
ordered = raw_updates.sort_values(['order_book_id', 'trade_date', 'datetime']).copy() # 固定证券日内原始更新顺序。
day_groups = ordered.groupby(['order_book_id', 'trade_date'], sort=False) # 限制差分不跨证券或交易日。
first_in_day = day_groups.cumcount().eq(0) # 标记每天第一条原始更新。
ordered['volume_increment'] = day_groups['volume'].diff().mask(first_in_day, ordered['volume']) # 首条以零为基线,其余使用真实前驱。
ordered['turnover_increment'] = day_groups['total_turnover'].diff().mask(first_in_day, ordered['total_turnover']) # 对累计成交额执行相同规则。
return ordered # 返回尚未按市场阶段筛选的增量表。
baseline_rows = [('TEST', '2021-11-01', '09:29:00', 'opening_call', 100, 1000), ('TEST', '2021-11-01', '09:30:00', 'continuous', 130, 1300), ('TEST', '2021-11-01', '11:30:00', 'continuous', 150, 1520), ('TEST', '2021-11-01', '13:00:00', 'continuous', 180, 1850), ('TEST', '2021-11-01', '14:57:00', 'closing_call', 200, 2100), ('TEST', '2021-11-02', '09:29:00', 'opening_call', 80, 800), ('TEST', '2021-11-02', '09:30:00', 'continuous', 100, 1020)] # 覆盖阶段边界、午休与跨日重置。
baseline_probe = pd.DataFrame(baseline_rows, columns=['order_book_id', 'trade_date', 'clock_time', 'market_phase', 'volume', 'total_turnover']) # 建立最小累计字段合同。
baseline_probe['trade_date'] = pd.to_datetime(baseline_probe['trade_date']) # 解析机制测试交易日。
baseline_probe['datetime'] = pd.to_datetime(baseline_probe['trade_date'].dt.strftime('%Y-%m-%d') + ' ' + baseline_probe['clock_time']) # 组合日内排序时间。
baseline_probe = add_cumulative_increments(baseline_probe) # 在任何阶段过滤前执行累计差分。
continuous_probe = baseline_probe.loc[baseline_probe['market_phase'].eq('continuous')].copy() # 差分完成后才选择连续竞价。
assert baseline_probe[['volume_increment', 'turnover_increment']].ge(0).all().all() # 核验量额增量均非负。
assert continuous_probe.loc[continuous_probe['datetime'].eq(pd.Timestamp('2021-11-01 09:30:00')), 'volume_increment'].iloc[0] == 30 # 首条连续竞价使用开盘集合竞价累计值作基线。
assert continuous_probe.loc[continuous_probe['datetime'].eq(pd.Timestamp('2021-11-01 13:00:00')), 'volume_increment'].iloc[0] == 30 # 午休后沿用上午最后更新而不重置。
assert continuous_probe.loc[continuous_probe['trade_date'].eq(pd.Timestamp('2021-11-01')), 'volume_increment'].sum() == 80 # 连续阶段成交量等于三次真实更新之和。
assert continuous_probe.loc[continuous_probe['trade_date'].eq(pd.Timestamp('2021-11-01')), 'turnover_increment'].sum() == 850 # 连续阶段成交额按同一基线守恒。
assert baseline_probe.loc[baseline_probe['trade_date'].eq(pd.Timestamp('2021-11-02')), 'volume_increment'].iloc[0] == 80 # 新交易日首条记录重新以零为基线。
tick_eligibility_audit # 并列输出当前归档零合格文件的实证资格证据。