AI 面壁者:在线市场状态实验室
用彼此隔离、强制保持差异的模拟策略族群,在无前瞻数据的每日竞赛中观察市场状态;产出趋势、震荡或恐慌的风控信号,而非买卖指令。
《AI 面壁者:在线市场状态实验室》
版本:V1.0(严格在线竞赛构想) 状态:构想中 定位:本地运行的模拟交易与市场状态观察工具,不接入真实资金、不提供投资建议。
一句话定义
把一组带有不同“世界观约束”的模拟策略,放进一个每天结算、每天淘汰、绝不偷看下一交易日的竞争环境中;最终观察的不是哪只策略明天买什么,而是哪类策略在当下市场结构中更容易存活。
系统的日输出只允许是三类风险状态:
- 0 / 趋势市:顺势、较长持有周期的族群整体更稳定;
- 1 / 震荡市:对冲、均衡与低换手策略相对占优;
- 2 / 恐慌市:防御、波动过滤与轻仓策略的存活率显著提高。
它是一个“市场脾气计”,不是预测器,更不是自动下单系统。
核心原则
| 原则 | 约束 |
|---|---|
| 严格在线 | 任一交易日的决策只能读取截至上一交易日收盘时已经可得的数据。 |
| 时间可审计 | 每份行情、特征、信号、订单和结算均记录 as_of 时间,之后不得覆写。 |
| 模拟优先 | 只做纸面交易;不保存券商密钥,不产生真实订单。 |
| 多样性优先 | 角色的持仓周期、风险预算和允许动作由赛道锁定,不能靠进化抹平差异。 |
| 同赛道竞争 | 淘汰与繁殖只发生在同类角色内部,不能用短线暴利淘汰防御策略。 |
| 风控优先 | 最终状态评估优先看回撤、稳定性与族群存活率,不按单日收益率封王。 |
| 可证伪 | 每天保留输入快照与决策结果;任何结果都能回放到当日可见信息。 |
每日“断头台”时间线
以下以交易日 T 为例。具体时点应随目标市场的实际交易日历配置,不能写死。
| 阶段 | 时间 | 允许做什么 | 明确禁止 |
|---|---|---|---|
| 结算 | T 日收盘后 | 写入收盘价、净值、成交、回撤、排名与淘汰结果。 | 用 T+1 数据修正 T 日决策。 |
| 数据封存 | T 日收盘后 | 为每个数据源打时间戳,生成 T 日可见数据快照。 | 覆盖历史快照或补写当日已作出的订单。 |
| 进化窗口 | T 日收盘至 T+1 盘前 | 仅依据封存快照更新策略参数、生成 T+1 订单。 | 读取 T+1 开盘、盘中、收盘或事后修订数据。 |
| 执行 | T+1 盘中 | 按盘前冻结的规则撮合模拟订单,应用滑点、手续费和成交限制。 | 根据盘中结果临时改策略、撤回或改价。 |
| 再结算 | T+1 收盘后 | 开始下一轮结算。 | 将事后表现回填成盘前知识。 |
数据截断的实现规则
- 每个运行批次创建不可变的
decision_snapshot_id。 - 特征计算查询必须带
published_at <= cutoff_at条件,而非仅按交易日期过滤。 - 订单保存
created_at、effective_date、snapshot_id与策略版本哈希。 - 结算程序只能读取对应日期的行情快照,不能调用“最新数据”接口。
- 数据供应商若会修订历史行情,原始响应需要按日归档;修订版只能用于数据质量报告,不能改写已完成竞赛。
角色与强制赛道
角色不是界面皮肤,而是防止全部族群收敛为同一种短线噪音策略的“基因锁”。初版只开三个赛道,每个赛道可有 20—100 个变体。
赛道 A:长周期格雷
- 初始模拟资金:100 万;
- 世界观:市场存在可持续但缓慢的趋势,频繁交易会损耗优势;
- 硬约束:最短持仓 5 个交易日;超过换手率上限即扣分或判负;
- 可变基因:行业偏好、趋势确认阈值、仓位上限、止损/减仓阈值;
- 评价重点:滚动回撤、持仓稳定性、风险调整后收益。
赛道 B:套利猫
- 初始模拟资金:100 万;
- 世界观:单边判断并不可靠,结构性对冲比方向押注更重要;
- 硬约束:至少持有 3 个满足预定义相关性或暴露约束的品种;净敞口与单品种权重受限;
- 可变基因:对冲比例、相关性窗口、再平衡阈值、行业中性权重;
- 评价重点:波动率、最大回撤、净敞口稳定度与交易成本后的净值。
赛道 C:恐慌老头
- 初始模拟资金:1000 万;
- 世界观:不确定性升高时,保住资本比追逐收益重要;
- 硬约束:只有预先定义的恐慌/波动指标相对昨日升高时才允许加仓;其余时间仅可空仓、持有现金或轻仓;
- 可变基因:恐慌阈值、加仓幅度、风险资产上限、退出速度;
- 评价重点:压力日损失、尾部回撤、风险暴露与存活率。
初版需先明确目标市场和可交易品种。若使用中国市场,不能直接把 VIX 当作唯一条件;应选择可稳定取得、发布时点明确的本地波动代理指标,或把跨市场指标的时区与可见时间写入规则。
竞争、淘汰与繁殖
每日结算指标
每个代理在收盘后计算:
- 当日与累计净值;
- 最大回撤与滚动波动率;
- 交易成本、滑点与换手率;
- 规则违规次数;
- 同赛道标准化分数;
- 族群的存活率与策略分散度。
建议采用滚动多指标评分,而不是单日收益排名:
score = 风险调整收益
- 回撤惩罚
- 成本惩罚
- 规则违规惩罚
- 与同赛道过度相似的惩罚
淘汰与补充
- 每个赛道独立排序,末位 20% 标记为淘汰;
- 保留赛道内前 20% 作为亲本候选,而非只复制第一名;
- 子代只能继承本赛道允许变动的参数;硬约束不可变异;
- 使用小幅扰动与随机新血,避免所有子代复制同一组参数;
- 记录亲本、变异参数、随机种子和产生时间;
- 设置最短观察期,例如 20 个交易日内不因单日表现淘汰,降低噪音驱动的“进化”。
市场状态信号
系统不发布“买入/卖出/标的代码”,只产生观察信号。一个可解释的初版规则如下:
| 状态 | 触发倾向 | 输出含义 |
|---|---|---|
| 趋势市 / 0 | 格雷赛道的中位数得分、存活率和净值平滑度连续占优 | 长周期顺势逻辑更适配当前样本。 |
| 震荡市 / 1 | 套利猫赛道的风险调整表现与分散度占优 | 对冲与低方向暴露逻辑相对适配。 |
| 恐慌市 / 2 | 恐慌老头在压力日显著减少回撤,且存活率连续提高 | 风险控制逻辑更有韧性,应提高人工复核频率。 |
| 未确认 | 三赛道信号分歧大,或样本/数据质量不足 | 不下结论,只展示不确定性。 |
信号必须同时展示:最近 N 日赛道存活率、各赛道中位回撤、状态置信度、数据完整性和“未确认”原因。连续三日只是观察窗口,不应被包装成确定性的仓位建议。
极简技术架构
先以单机、单进程为目标;Ray 只在代理数量或特征计算规模确实需要并行时引入。
行情/日历数据源
↓(定时抓取与原始归档)
Python 任务调度器
├── 数据时间截断与快照
├── 策略/角色引擎
├── 模拟撮合与风控
├── 赛道评分、淘汰与变异
└── 状态信号生成
↓
SQLite(初版)
↓
FastAPI(只读查询与配置接口)
↓
轻量仪表盘(Streamlit 或现有网站中的独立页面)
不在第一版引入的组件
- 真实交易接口、券商凭证与自动下单;
- Ray 集群、Redis、微服务和 PostgreSQL;
- LLM 自由生成交易代码或盘中临时决策;
- 面向他人的荐股、收益承诺或自动化投资建议。
最小数据模型
| 表 / 实体 | 关键字段 | 目的 |
|---|---|---|
market_snapshots | snapshot_id, symbol, published_at, cutoff_at, 原始响应路径 | 证明决策时可见的数据。 |
agents | agent_id, track, genome, parent_ids, created_at | 记录角色、参数与谱系。 |
decisions | agent_id, snapshot_id, effective_date, strategy_hash, orders | 固化盘前决策。 |
fills | order_id, filled_at, price, slippage, fee | 可解释的模拟成交。 |
daily_metrics | agent_id, trade_date, nav, drawdown, turnover, score | 每日净值和同赛道评分。 |
evolution_events | trade_date, track, eliminated_ids, child_ids, seed | 淘汰与繁殖审计。 |
regime_signals | trade_date, state, confidence, evidence | 仪表盘展示的最终观察结果。 |
分阶段实施计划
Phase 0:规则与数据契约(1 周)
- 确定单一目标市场、交易日历、交易品种池和唯一行情源;
- 明确每类数据的发布时点、时区、修订规则和缺失处理;
- 写出不可违反的线上数据截断测试用例;
- 定义撮合假设:开盘/收盘成交、滑点、手续费、涨跌停与停牌规则;
- 明确“恐慌指标”的来源与本地市场适配方式。
验收:给任意一个决策,均能列出当时可见的完整输入快照。
Phase 1:单角色纸面交易骨架(1—2 周)
- Python + SQLite 建立快照、订单、成交与净值表;
- 实现一个冻结规则的格雷代理;
- 用模拟时钟跑过连续交易日,验证 T+1 数据不能被读取;
- 输出每日日志与净值 CSV。
验收:删除未来行情后,过去生成的每笔订单完全不变。
Phase 2:三赛道与模拟撮合(2—3 周)
- 加入套利猫和恐慌老头的硬约束;
- 实现统一的成本、滑点、持仓和违规检查;
- 为每赛道创建小族群,例如每类 20 个代理;
- 实现同赛道评分、观察期、淘汰和受限变异。
验收:任何子代都无法突破所属赛道的硬约束;各赛道都能独立排名。
Phase 3:每日任务与仪表盘(1—2 周)
- 配置本地定时任务与失败重试;
- FastAPI 提供只读的净值、排名、谱系和信号接口;
- 用 Streamlit 或独立网页展示赛道面板;
- 展示数据截至时间、策略版本、状态证据和任务日志。
验收:每日运行失败、缺数或迟到时,仪表盘明确显示“未确认”,不生成伪信号。
Phase 4:长期在线观察(至少 3—6 个月)
- 每天按真实时间运行,不以事后数据调参;
- 定期检查族群相似度、数据质量与规则违规;
- 只记录观察结论,不根据短期结果扩大复杂度;
- 月度复盘系统本身,而不是把复盘结果回填进已发生的决策。
验收:形成可审计的运行档案与三条赛道净值/回撤/存活率曲线。
主要风险与护栏
| 风险 | 护栏 |
|---|---|
| 前瞻性偏差 | 快照不可变、决策哈希、按 published_at 查询、自动化时间截断测试。 |
| 过拟合近期噪音 | 最短观察期、滚动评分、参数变异限幅、赛道内多亲本繁殖。 |
| 策略同质化 | 硬赛道约束、相似度惩罚、随机新血与持仓重叠监控。 |
| 模拟成交过于乐观 | 保守滑点、手续费、成交上限、停牌与不可成交订单处理。 |
| 数据源不稳定 | 原始响应归档、缺失标记、任务重试;数据不完整时只输出“未确认”。 |
| 把信号误当建议 | 固定免责声明;界面不展示下单按钮、不输出具体买卖指令。 |
| 系统过早复杂化 | 先单机 SQLite;只有明确性能瓶颈后才考虑 Ray、Redis 或 PostgreSQL。 |
当前决策
- 只做模拟交易与市场状态观察,不接真实资金;
- 将“无前瞻”定义为数据与决策可审计的硬约束;
- 采用长周期格雷、套利猫、恐慌老头三条隔离赛道;
- 按同赛道淘汰与繁殖,避免跨风格的短期收益竞赛;
- 确定首个市场、品种池与可靠数据源;
- 完成 Phase 0 的时间截断测试;
- 实现单角色纸面交易骨架;
- 连续在线运行后,再决定是否需要 Ray 与更复杂的前端。
真正需要验证的不是“AI 能否猜中明天”,而是:在严格不偷看未来、强制保持差异的条件下,哪一类风险逻辑更适合解释眼前的市场结构。