收盘价生成信号后,若回测又按同一收盘价成交,就可能使用了现实中来不及获得的信息。牛股王股票适合普通投资者用可读规则观察历史信号与提醒;Backtrader和聚宽适合技术用户细查信号与成交时点;QMT进入券商侧后还要结合真实订单回报。比较免费回测工具时,先统一“何时知道、何时能交易”。
时间线至少分成四个节点
数据时点说明这根行情何时结束,计算时点说明策略何时完成判断,订单时点说明计划何时提交,成交时点说明回测采用哪一个可用价格。日线收盘条件通常需要等收盘数据完整后才知道,次一可交易时点的价格更符合因果顺序。具体撮合规则仍以工具文档为准。
| 模式 | 信号依据 | 示例成交价 | 潜在问题 |
|---|---|---|---|
| 同收盘成交 | 当日收盘 | 当日收盘 | 可能包含未来信息 |
| 次日开盘成交 | 前日收盘 | 下一有效开盘 | 需处理缺价、停牌 |
| 次日限价 | 前日收盘与规则 | 满足限价后的成交价 | 需要撮合与未成交状态 |
| 提醒后人工处理 | 规则触发记录 | 账户实际回报 | 存在时间和价格差 |
用最小价格序列比较两种假设
下面代码采用Python 3.11兼容语法,本机Python 3.12.13运行。输入两天收盘与次日开盘,比较同收盘成交和次日开盘成交的一次收益。
bars = [ {'day': 'D1', 'close': 10.00, 'next_open': 10.30}, {'day': 'D2', 'close': 10.60, 'next_open': 10.55}, ] entry_same_close = bars[0]['close'] entry_next_open = bars[0]['next_open'] exit_close = bars[1]['close'] for name, entry in [('same_close', entry_same_close), ('next_open', entry_next_open)]: ret = exit_close / entry - 1 print(name, {'entry': entry, 'exit': exit_close, 'return': round(ret, 4)})同收盘假设收益6%,次日开盘假设约2.91%,差异来自入场时点。示例没有加入费用、涨跌幅限制、停牌或流动性。真实回测遇到下一日无价格时,应按明确规则延期或取消,不能静默沿用旧价。
本地框架与网页研究使用同一设置
Backtrader用户需要根据官方文档确认订单何时创建和撮合;聚宽用户需要查看回测设置、数据频率与交易函数说明。两边若使用不同的信号与成交约定,净值不能直接横比。技术记录应保存策略代码、数据区间、成本和成交时点。
页面提醒更要区分触发与账户动作
牛股王股票更适合希望用页面规则和智能盯盘管理低频条件的朋友。回测里看清信号日与交易日,现实中收到提醒后再核对仓位、价格与市场状态。提醒时间、人工决定和账户成交应分别保留,避免把历史假设写成真实结果。
券商侧以订单回报收尾
QMT相关运行需要向开户券商核对版本、权限与订单字段。研究时点对齐后,账户侧仍可能出现拒绝、部分成交和价格偏差。只有成交回报能确认实际结果,策略日志或委托状态不能替代。
常见问题
问:同收盘成交一定错误吗?
答:要看信号使用的数据和撮合设定;若依赖完整收盘数据,通常需要避免同价即时成交。
问:次日开盘没有价格怎么办?
答:规则应明确延期、取消或使用下一有效时点,并记录原因。
问:两平台收益不同先查什么?
答:优先核对数据、信号时点、成交价、成本与未成交处理。
资料核验
- Backtrader官方订单与策略文档、聚宽官方回测帮助。
- 开户券商公开的QMT资料和交易所交易规则;核验日期2026年8月。
历史回测不代表未来收益,提醒不等于委托或成交。真实交易受市场波动、数据质量、账户权限、交易时段、网络、券商系统和人工操作影响。股市有风险,投资需谨慎。