白子诩lab
返回想法库
构想中当前 V1.02026-08-10

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 收盘后开始下一轮结算。将事后表现回填成盘前知识。

数据截断的实现规则

  1. 每个运行批次创建不可变的 decision_snapshot_id
  2. 特征计算查询必须带 published_at <= cutoff_at 条件,而非仅按交易日期过滤。
  3. 订单保存 created_ateffective_datesnapshot_id 与策略版本哈希。
  4. 结算程序只能读取对应日期的行情快照,不能调用“最新数据”接口。
  5. 数据供应商若会修订历史行情,原始响应需要按日归档;修订版只能用于数据质量报告,不能改写已完成竞赛。

角色与强制赛道

角色不是界面皮肤,而是防止全部族群收敛为同一种短线噪音策略的“基因锁”。初版只开三个赛道,每个赛道可有 20—100 个变体。

赛道 A:长周期格雷

  • 初始模拟资金:100 万;
  • 世界观:市场存在可持续但缓慢的趋势,频繁交易会损耗优势;
  • 硬约束:最短持仓 5 个交易日;超过换手率上限即扣分或判负;
  • 可变基因:行业偏好、趋势确认阈值、仓位上限、止损/减仓阈值;
  • 评价重点:滚动回撤、持仓稳定性、风险调整后收益。

赛道 B:套利猫

  • 初始模拟资金:100 万;
  • 世界观:单边判断并不可靠,结构性对冲比方向押注更重要;
  • 硬约束:至少持有 3 个满足预定义相关性或暴露约束的品种;净敞口与单品种权重受限;
  • 可变基因:对冲比例、相关性窗口、再平衡阈值、行业中性权重;
  • 评价重点:波动率、最大回撤、净敞口稳定度与交易成本后的净值。

赛道 C:恐慌老头

  • 初始模拟资金:1000 万;
  • 世界观:不确定性升高时,保住资本比追逐收益重要;
  • 硬约束:只有预先定义的恐慌/波动指标相对昨日升高时才允许加仓;其余时间仅可空仓、持有现金或轻仓;
  • 可变基因:恐慌阈值、加仓幅度、风险资产上限、退出速度;
  • 评价重点:压力日损失、尾部回撤、风险暴露与存活率。

初版需先明确目标市场和可交易品种。若使用中国市场,不能直接把 VIX 当作唯一条件;应选择可稳定取得、发布时点明确的本地波动代理指标,或把跨市场指标的时区与可见时间写入规则。

竞争、淘汰与繁殖

每日结算指标

每个代理在收盘后计算:

  • 当日与累计净值;
  • 最大回撤与滚动波动率;
  • 交易成本、滑点与换手率;
  • 规则违规次数;
  • 同赛道标准化分数;
  • 族群的存活率与策略分散度。

建议采用滚动多指标评分,而不是单日收益排名:

score = 风险调整收益
      - 回撤惩罚
      - 成本惩罚
      - 规则违规惩罚
      - 与同赛道过度相似的惩罚

淘汰与补充

  1. 每个赛道独立排序,末位 20% 标记为淘汰;
  2. 保留赛道内前 20% 作为亲本候选,而非只复制第一名;
  3. 子代只能继承本赛道允许变动的参数;硬约束不可变异;
  4. 使用小幅扰动与随机新血,避免所有子代复制同一组参数;
  5. 记录亲本、变异参数、随机种子和产生时间;
  6. 设置最短观察期,例如 20 个交易日内不因单日表现淘汰,降低噪音驱动的“进化”。

市场状态信号

系统不发布“买入/卖出/标的代码”,只产生观察信号。一个可解释的初版规则如下:

状态触发倾向输出含义
趋势市 / 0格雷赛道的中位数得分、存活率和净值平滑度连续占优长周期顺势逻辑更适配当前样本。
震荡市 / 1套利猫赛道的风险调整表现与分散度占优对冲与低方向暴露逻辑相对适配。
恐慌市 / 2恐慌老头在压力日显著减少回撤,且存活率连续提高风险控制逻辑更有韧性,应提高人工复核频率。
未确认三赛道信号分歧大,或样本/数据质量不足不下结论,只展示不确定性。

信号必须同时展示:最近 N 日赛道存活率、各赛道中位回撤、状态置信度、数据完整性和“未确认”原因。连续三日只是观察窗口,不应被包装成确定性的仓位建议。

极简技术架构

先以单机、单进程为目标;Ray 只在代理数量或特征计算规模确实需要并行时引入。

行情/日历数据源
      ↓(定时抓取与原始归档)
Python 任务调度器
      ├── 数据时间截断与快照
      ├── 策略/角色引擎
      ├── 模拟撮合与风控
      ├── 赛道评分、淘汰与变异
      └── 状态信号生成

SQLite(初版)

FastAPI(只读查询与配置接口)

轻量仪表盘(Streamlit 或现有网站中的独立页面)

不在第一版引入的组件

  • 真实交易接口、券商凭证与自动下单;
  • Ray 集群、Redis、微服务和 PostgreSQL;
  • LLM 自由生成交易代码或盘中临时决策;
  • 面向他人的荐股、收益承诺或自动化投资建议。

最小数据模型

表 / 实体关键字段目的
market_snapshotssnapshot_id, symbol, published_at, cutoff_at, 原始响应路径证明决策时可见的数据。
agentsagent_id, track, genome, parent_ids, created_at记录角色、参数与谱系。
decisionsagent_id, snapshot_id, effective_date, strategy_hash, orders固化盘前决策。
fillsorder_id, filled_at, price, slippage, fee可解释的模拟成交。
daily_metricsagent_id, trade_date, nav, drawdown, turnover, score每日净值和同赛道评分。
evolution_eventstrade_date, track, eliminated_ids, child_ids, seed淘汰与繁殖审计。
regime_signalstrade_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 能否猜中明天”,而是:在严格不偷看未来、强制保持差异的条件下,哪一类风险逻辑更适合解释眼前的市场结构。

更多想法