外观
期货分钟回测
支持纯期货账户的 1m 回测,可交易真实月合约及连续系列,例如 RB2701.SHF、RB.SHF、RBL.SHF、IFL.CFX。系列委托在真实月合约上成交与记账;tick、混合账户和中途恢复未开放。
固定费率、四向 API、持仓归属和结算机制沿用期货账户。本页补充分钟的执行时间、连续系列路由和信息边界。
加载与运行
直接使用期货完整示例,将其中两项设置为:
python
FREQUENCY = "1m"
MATCHING = "next_bar"该示例把 FREQUENCY 同时传给加载器和 base.frequency,并保存 pkl 与 HTML,无需另找策略项目。在 init 中 subscribe 月合约或系列;普通订单可以使用 next_bar/current_bar/vwap,含义见撮合配置。
start/end 都是交易日,不是自然日期。加载器从历史分钟表按 trading_date 读取,并保留实际 trade_time,不混入近期实时桶。2026-09-07 的商品夜盘包含 09-04 晚及 09-05 凌晨;2026-10-08 节后首日只有当日日盘。无需自行改写时间或补出夜盘。
外部提供数据可用 attach_minute_bars。期货分钟必须有 instrument、trade_time、trading_date、open/high/low/close、volume、amount、open_interest;trade_time 使用上海本地无时区时间。成交量为手、成交额为元,不乘日线的 10000。日线与日历须覆盖这些交易日,字段不全或没有交易日日线会失败。
start/end 决定分钟加载范围;可传 history_start 单独提前加载日线预热,不加载预热区间的分钟。系列自动按每日盘中路由加载分钟;直接交易的月份合约须显式加入 codes。其余自动扩展月份仅提供日线,用于结算和选择到期后继。
分钟须覆盖 bundle.start/end 内所需且有成交的合约/交易日;外部挂载行情遵循相同范围。
日线有成交但整日分钟缺失会失败。零成交量日允许无分钟,照常结算;局部缺分钟不填充,也不能仅凭静态时段判断是无成交还是数据缺口。
连续系列路由
回测将 D 日 mapping 视为 D 日结算时可用,下一交易日盘中沿用结算目标,全日固定,不读取当日 mapping 决定盘中委托。输入映射不包含历史发布时间;这是框架的路由假设,不表示复原了供应商实际发布过程。
- 日终按当日 mapping 移仓;映射合约到期时,选择同品种、当日已上市且到期月份更晚的最近合约,下一交易日沿用该后继。
- 尚未上市的目标不能提前交易;保留当前有效路由,等待映射目标上市。初始映射若指向未上市合约且无法确定有效路由,则报错。
- 路由与有无持仓无关,空仓期间也更新。首次回测从开始日前一交易日映射及到期规则确定初始路由。
- 系列只在
handle_bar下单。get_future_series_contract(series)返回当前交易日盘中路由,可在盘前、盘中、盘后查询;订单与成交的 order_book_id 仍是真实月合约,series 保留归属。 bar_dict[series]和盘中快照使用路由合约的原始分钟价格。系列分钟历史按各交易日的固定路由拼接,不复权,跨换月可能跳价;adjust_type="post"明确拒绝。长期信号可用系列后复权日线。- 系统移仓沿用结算价模型,不受普通分钟订单的成交限制;不能据分钟成交规则推断移仓也会延迟或部分完成。
order_to 提交的是订单,反转的平仓、开仓并不保证同时成功。next_bar 策略应等待订单实际成交后再推进目标,挂单期间不重复提交。拒单或部分成交后的终止、补单或重新评估应由策略明确,框架不替策略保证目标仓位。
时间与回调
| 属性 | 夜盘示例 | 用途 |
|---|---|---|
context.now、bar.datetime | 2026-09-04 21:00 | 自然时间、信号时点 |
context.trading_date | 2026-09-07 | 今昨仓、费用与日终归属,类型为 date |
bar.trading_date | 20260907 | bar 的交易日整数 |
每个交易日只调用一次 before_trading,发生在该日最早已加载分钟之前;夜盘跨午夜不重复盘前或结算。实际分钟网格由数据决定,订阅、持仓或挂单相关合约在该时刻有 bar 才触发 handle_bar。
不同合约不一定同时有 bar;访问 bar_dict[code] 后先检查 bar.isnan。缺 bar 时不使用未来价撮合,已有持仓在下次有效报价前沿用上次估值。
不调用 open_auction:历史一分钟数据不是独立竞价订单簿。按源数据 trade_time 作为该条 bar 的可用时点,不自行平移一分钟;09:00、09:30、21:00 记录原样保留。AFTER_TRADING 在交易日 15:30,随后日终结算;国债正常 15:15 的分钟记录会执行。
成交与保证金
next_bar 是目标合约下一根可用 bar 的开盘价;其他合约的分钟不能使它提前成交。休市期间保留未成交订单,交易日结束仍未成交的订单按 broker 规则拒绝并释放冻结资金,不自动带到下一交易日。成交量、涨跌停和滑点约束继续生效。
按交易日划分今昨仓。周五夜盘开仓、周一日盘平仓属于同一交易日;close_today=True 按该交易日今仓计算费用。
分钟模式采用分时保证金:
- 盘中:同合约此前已知结算保证金与当日最低保证金取最大值。
- 结算:切换到当日结算保证金与最低档的最大值。
- 新上市合约无历史值时使用当日最低档,仍缺则失败。
最低档视为交易日前已知的交易所要求,不模拟券商加收与盘中临时公告。普通日频仍采用每日统一参数口径。账户权益不大于零时的默认清仓规则不等同于期货公司完整追保规则。
历史数据与快照
- 分钟 OHLCV、持仓量来自当前分钟;prev_close、prev_settlement、涨跌停按 trading_date 关联。
- 分钟 bar 的 settlement 为 NaN,不提前暴露当日最终结算价。
history_bars(..., "1m", include_now=False)默认不包含当前 bar;True 包含当前已完成记录。支持 trading_date 字段,时间戳仍为自然时间。- 盘中日线历史默认截至上一交易日;请求完整当日日线的 include_now=True 会报错。盘后可以读取当日日线。
current_snapshot只累计当前交易日至当前自然时刻的分钟记录。当日尚无记录时不能取得快照;盘前快照按既有 API 返回上一交易日日线。- 首日夜盘的合约上市判断、bar 的日线均值/VWAP 和交易状态均使用交易日。月合约不复权。
结果与验收
账户、持仓、净值和风险指标按交易日结算后记录。trades 的 datetime 是自然成交时间,trading_date 是交易日,trading_datetime 是交易日加钟表时间;夜盘记录不要按 trading_datetime 排自然先后。
分钟期货 HTML/Excel 分列“成交时间”和“交易日”,按自然时间排序,日期筛选按交易日。结果保留完整成交价,页面数字格式不改变底层精度。日度成交金额与持仓时长按交易日归集。
核对实际成交时,检查它是否使用目标合约信号之后的可用分钟、真实原始价格及正确交易日。多标的可能在不同分钟成交;不能把一组独立订单视为同时成交的组合。日频和分钟若使用不同信号或成交时点,净值不必相同。