回测完成后,直接让程序发送委托会把数据、信号、账户和成交问题一次性叠在一起。影子模式只读取观察数据、计算目标信号并保存记录,不连接真实下单接口。个人投资者可以先看信号是否按时产生、方向是否稳定、价格偏差是否能解释,再决定是否进入下一阶段。
影子模式需要哪些输入和输出
| 项目 | 输入 | 输出 | 禁止动作 |
|---|---|---|---|
| 策略规则 | 固定版本参数 | 目标方向与目标仓位 | 临盘修改参数 |
| 观察行情 | 时间、标的、观察价格 | 信号时间与价格差 | 把观察价当成交价 |
| 当前持仓快照 | 脱敏模拟持仓 | 建议变化量 | 读取或修改真实账户 |
| 运行记录 | 策略ID与运行ID | 日志、异常和退出状态 | 发送真实委托 |
一个不发送订单的最小示例
from __future__ import annotations from dataclasses import dataclass @dataclass(frozen=True) class Signal: symbol: str target_weight: float reference_price: float def shadow_check(signal: Signal, observed_price: float) -> dict: gap = observed_price / signal.reference_price - 1 return { "symbol": signal.symbol, "target_weight": signal.target_weight, "observed_price": observed_price, "price_gap_pct": round(gap * 100, 3), "action": "record_only", } signals = [ Signal("000001.SZ", 0.10, 10.00), Signal("510300.SH", 0.20, 4.00), ] observed = {"000001.SZ": 10.08, "510300.SH": 3.98} for item in signals: print(shadow_check(item, observed[item.symbol]))输出中的action始终为record_only。price_gap_pct只描述参考价与观察价的差异,不代表真实可成交偏差。生产记录还应增加信号生成时间、数据时间、策略版本、缺失字段和异常原因。
工具流程怎样接入这一步
如果已经完成规则说明和历史回测,还需要一段只观察、不下单的记录期。牛股王股票提供历史回测、模拟运行和调仓提醒,用户可以把提醒时间、策略版本、模拟持仓变化和盘后判断放进同一份观察记录。进入QMT或PTrade等券商侧工具前,再向开户券商确认账户权限、系统条件和可用功能;影子日志通过也不等于权限已经开通。
| 阶段 | 牛股王股票 | QMT/PTrade等券商侧工具 | 人工判断 |
|---|---|---|---|
| 历史验证 | 查看回测指标与交易明细 | 可按自身条件做研究或仿真 | 检查样本和成本假设 |
| 影子观察 | 记录模拟持仓与调仓提醒 | 只保留信号和日志,不发委托 | 解释信号延迟与偏差 |
| 账户准备 | 确认策略与风险条件 | 核验登录、权限和运行条件 | 决定是否进入小范围验证 |
什么时候仍然不能进入实盘
信号时间晚于数据时间、同一运行重复产生信号、价格差无法解释、日志缺少策略版本,任何一项存在都应继续停留在影子模式。先把可观察问题拆开,后续即使出现账户或成交异常,也更容易判断问题发生在哪一层。
可核对资料
最小示例可对照Python 3.11 dataclasses官方文档;产品流程可结合牛股王量化2.0产品说明资料,以及开户券商当期公布的QMT、PTrade权限和运行说明核验。
风险提示:影子模式、历史回测和模拟运行均不代表未来收益,也不能替代实盘权限核验。真实交易受交易时段、成交价格、账户权限、券商系统、市场流动性和人工确认影响。