as-event/DATA_MODEL.md

324 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Bionic Trader 数据模型
> 全部库表、Milvus 集合、Redis 键与 MongoDB 集合的 Schema 与上下游关系。存储拓扑与连接配置见 `ARCHITECTURE.md` §2.2。
约定:
- 股票代码在不同库里有两种格式 —— **交易所前缀式**`SH600000` / `SZ000001``strategy_daily_results`、`gp_day_data`、**因子分表 `gp_stock_factor_pro_*``symbol`** 用)与 **Tushare 式**`600000.SH` / `000001.SZ`PG、行情 Redis、盘中告警流用。代码里通过 `parts[1]+parts[0]` 互转。
> ⚠️ 2026-07-07 实测更正:因子分表 `symbol` 为**前缀式**`SH603501` 命中、`603501.SH` 查空),早期文档误记为 Tushare 式。全链取数一律传前缀式给 `DataLoader`。
- 日期同样有两种:`INT YYYYMMDD``strategy_daily_results`、`trade_date`)与 `DATE`/`DATETIME`。
---
## 1. MySQL-A · 本地库 `db_gp_cj`192.168.18.199
原始行情与筹码,主要供旧形态线与宏观情绪使用。
### 1.1 `gp_day_data` — 原始日线(模型 `DayData`
⚠️ 价格字段是 **VARCHAR**,读出后必须 `pd.to_numeric` 转换。
| 字段 | 类型 | 说明 |
|---|---|---|
| `id` | BIGINT PK | 自增 |
| `symbol` | VARCHAR(255) idx | 个股代码 |
| `timestamp` | DATETIME idx | 交易时间 |
| `volume` | BIGINT | 成交量 |
| `open` / `high` / `low` / `close` | VARCHAR(255) | 价格(字符串存储) |
| `chg` | VARCHAR | 涨跌额 |
| `percent` | DECIMAL(10,2) | 涨跌幅 % |
| `turnoverrate` | DECIMAL(10,2) | 换手率 |
| `amount` | BIGINT | 成交额 |
| `pb` / `pe` / `ps` | DECIMAL(10,2) | 估值 |
| `pre_close` | DECIMAL(10,2) | 前收 |
消费者:`slicer.py`(旧)、`backtester.py`/`tasks_backtest.py`(旧)、`visualizer.py`(旧)、`curve_algo._fetch_future_prices`、**`DataLoader._append_raw_daily_fallback`V7.2 日线兜底因子分表尾部缺行时按重叠日对账后补尾2026-07-07 起)**。
### 1.2 `gp_chip_data` — 筹码分布
| 字段 | 说明 |
|---|---|
| `symbol`, `trade_date` | 主键维度 |
| `winner_rate` | 获利盘比例 |
| `cost_5pct` / `cost_50pct` / `cost_95pct` | 成本分位 |
消费者:`data_loader.fetch_chip_data` → `get_resistance_support_map`(算支撑压力)。
### 1.3 `zs_day_data` — 大盘指数日线
| 字段 | 说明 |
|---|---|
| `symbol` | 指数代码000001.SH / 399001.SZ / 000688.SH / 399006.SZ |
| `timestamp` | 日期 |
| `close` | 收盘 |
| `percent` | 涨跌幅 |
| `amount` | 成交额 |
消费者:`MarketSentimentAnalyzer`(大脑第 3 步「水温」)、`GlobalIndexLoader`Miner预留
> **注意**`intraday_watcher` 读 `strategy_daily_results` 走 `PROXY_DB_URL`ShardingSphere 代理 192.168.16.153:3307已前置 16.150 主业务库),与日终主链路写入库(`SOURCE_DB_EXT_DSN`/16.150)一致,**不读本库**。早期文档误记为本库(`DB_MYSQL_URL`/18.199),已订正。
---
## 2. MySQL-B · 外部主业务库 `factordb_mysql`192.168.16.150
系统的运行主库。`tasks_brain.db_engine` 与 `daily_scan_v2.engine` 都指向这里。
### 2.1 `gp_stock_factor_pro_YYYYMM` — 按月分表的前复权因子(核心特征源)
每月一张表(如 `gp_stock_factor_pro_202405`)。`data_loader._get_sharded_table_names` 按日期范围拼 `UNION ALL` 查询。
关键字段(`data_loader.fetch_technical_factors` 选取):
| 字段 | 说明 |
|---|---|
| `symbol`(→ts_code), `trade_date` | 维度 |
| `close_qfq` / `open_qfq` / `high_qfq` / `low_qfq` | 前复权 OHLC |
| `pct_chg`, `vol`, `amount`, `turnover_rate`, `volume_ratio` | 量价 |
| `pe_ttm`, `pb`, `total_mv`, `circ_mv` | 估值/市值 |
| `macd_dif_qfq` / `macd_dea_qfq` / `macd_qfq` | MACD |
| `kdj_k_qfq` / `kdj_d_qfq` / `kdj_qfq` | KDJ |
| `rsi_qfq_12`, `atr_qfq`, `cci_qfq` | RSI/ATR/CCI |
| `boll_upper_qfq` / `boll_lower_qfq` / `boll_mid_qfq` | 布林带 |
| `obv_qfq` | **OBV向量「资金」通道的核心缺它则降级用 vol** |
消费者:`DataLoader.get_daily_data`(几乎所有模块的行情入口)、`FactorCalculator`(在线向量)、`MinerController`(离线向量)。
### 2.2 `strategy_daily_results` — 核心产出表
系统最终结论落库于此。**无随代码提供的建表 DDL需手工建立**(建表语句见 `DEPLOYMENT.md` §4。写入方 `tasks_brain.save_to_database``INSERT ... ON DUPLICATE KEY UPDATE`,唯一键应为 `(stock_code, trade_date)`)。
| 字段 | 类型 | 说明 |
|---|---|---|
| `stock_code` | VARCHAR | 交易所前缀式(`SZ000001` |
| `trade_date` | INT | YYYYMMDD |
| `signal_type` | VARCHAR | `BUY` / `WATCH` / `SELL` / `DROPPED``AVOID` 入库时映射为 `SELL` |
| `confidence_score` | INT | 0100 |
| `support_level` / `pressure_level` | DECIMAL | 支撑/压力位 |
| `analysis_summary` | TEXT | 中文研报Markdown |
| `raw_logic_json` | TEXT/JSON | 完整 decision JSON`forecast` / `forecast_script` |
| `visual_pattern` | VARCHAR | 视觉识别形态 |
| `smart_score` | FLOAT | 资金评分 |
| `updated_at` | DATETIME | 更新时间 |
消费者:`/api/pool`、`/api/stock/{code}`、`/api/v1/reports/export_csv`、`DailyInspector`(对账)、`ReviewerAgent`(取上次结论)、`intraday_watcher`(取昨日底牌)。
### 2.3 `strategy_audit_log` — 审计日志(自动建表)
`daily_scan_v2._init_audit_table` 启动时自动 `CREATE TABLE IF NOT EXISTS`
| 字段 | 说明 |
|---|---|
| `id` | PK 自增 |
| `stock_code` | 代码 |
| `audit_date` | INT 审计日 |
| `strategy_date` | INT 被审策略日 |
| `verdict` | `MAINTAIN` / `ADAPT` / `FAIL` |
| `reason` | TEXT 审计理由(截断 2000 |
| `created_at` | DATETIME |
| INDEX | `idx_code_date(stock_code, audit_date)` |
### 2.4 `gp_stock_category` — 行业归属
| 字段 | 说明 |
|---|---|
| `ts_code`, `trade_date` | 维度(按日期变化,支持历史行业切换) |
| `industry` | 行业名称 |
消费者:`SectorMapper`(全内存加载 + 二分查找历史行业;行业名 CRC32 哈希成 int ID、`data_loader.fetch_sector_info`。
### 2.5 `trading_position` — 持仓快照(下游维护,经 153 代理读取)
由下游交易系统维护的**当前持仓**快照表,完整 DDL 不在本项目。本系统一律经 `PROXY_DB_URL`153 代理)做**单表 SELECT**(代理禁多表联查),且**仅消费 `stock_code` 一列**。
消费者:`periodic.position_intraday_check`(持仓体检轮询,见 PIPELINES ⑥)、`alert_query_service.query_alerts_by_positions``by_positions` 告警聚合)。
> 表内 `stock_code` 已实测确认为**点式**(如 `000636.SZ`2026-07-03 查证)。持仓体检的 TP_BRAIN 锁键继承表内原文 = 点式,与告警侧锁互认成立;告警聚合侧另有双格式兼容兜底。
---
## 3. PostgreSQL · `factordb`192.168.16.150
量化评分、资金流、市场情绪。
### 3.1 `t_signal_daily_results` — 量化评分(选股淘金源)
| 字段 | 说明 |
|---|---|
| `ts_code`, `trade_date`(DATE) | 维度 |
| `total_score` | 综合评分(**小数 0~1代码里 ×100 转百分制** |
消费者:
- `daily_scan_v2.get_quant_score`:取当日评分作为 Smart Score 传给大脑。
- `daily_scan_v2.get_discovery_queue`:淘金池筛选(最新日 `total_score > 0.9` 且较 5 日前上升)。
### 3.2 资金流系列(模型 `MoneyFlow` / `ConceptMoneyFlow` / `IndustryMoneyFlow`
- `gp_moneyflow_ths` — 个股资金流:`trade_date, symbol, ts_code, name, pct_change, latest, net_amount, net_d5_amount, buy_lg/md/sm_amount(+_rate)`。
- `gp_concept_moneyflow_ths` — 概念资金流:`concept_code, concept_name, lead_stock, net_buy/sell/net_amount` 等。
- `gp_industry_moneyflow_ths` — 行业资金流:结构同概念。
> 这些表已建模,但在当前 V6 主链路中未见直接消费(资金维度主要通过 PG 的 `total_score` 与因子表的 `obv_qfq` 体现)。
### 3.3 其它(`data_loader` 读取)
- `gp_market_sentiment``trade_date, up_down_ratio, median_pct_chg, pct_chg_gt_5_count`。
- `gp_sector_daily``trade_date, sector_name, avg_pct_chg, relative_strength, leader_stock`。
### 3.4 `gp_pattern_analysis` — 旧形态线(模型 `PatternAnalysis`
⚠️ 属已废弃管线(见 `ARCHITECTURE.md` §7。字段`symbol, start_date, end_date, pattern_name, is_bullish, confidence, analysis_json(JSONB), theoretical_curve(JSONB), context_snapshot(JSONB), backtest_status, similarity_score, actual_return, exit_date, holding_days`。`backtest_status` 流转:`PENDING_RENDERING → PENDING → FINISHED/INVALID/CANCELLED/WIN/LOSS/TIMEOUT`。
---
## 4. MongoDB · `stock_predictions`192.168.16.222
### `stock_groups` — 核心选股池
每个文档含一个 `stock_codes` 数组字段。`daily_scan_v2.get_mongo_stock_pool` 汇总所有文档的 `stock_codes`,过滤出以 `SH`/`SZ` 开头的代码去重后作为核心池。
---
## 5. Redis-B · 行情/信号实例192.168.18.208
> 注意Celery 总线(`REDIS_URL`16.150 db7不在此列。库号经 `settings.SIGNAL_REDIS_DB_*` 配置。
### 5.1 db 2`SIGNAL_REDIS_DB_INTRADAY`)— 盘中告警与信号
| 键 | 类型 | 方向 | 说明 |
|---|---|---|---|
| `intraday_alerts:{YYYY-MM-DD}` | Stream | 上游写 / watcher 读 | 离散告警consumer group `bionic_audit_group` |
| `mtf:intraday:stream:metrics` | Stream | 上游写 / watcher 读 | 事件式资金异动告警2026-06 协议升级,字段 `direction/z/mode/window_net/cum_large_amount`;旧 `smart_score` 协议过渡兼容) |
| `intraday_signals:{YYYY-MM-DD}` | Stream | `tasks_intraday.broadcast_signal` 写 | ENTRY/EXIT 反转/止盈信号(见 5.4 |
| `bionic:signal_timeline:{date}:{ts_code}` | List | watcher 读写 | 当日该股信号时间线喂给风控仲裁TTL 12h |
| `bionic_lock:{type}:{date}:{ts_code}` | String | watcher / tasks_risk / tasks_periodic | 防抖锁。碰撞类 BREAK_*/BULLISH_BRAIN/COLD_START_RESCAN/TP_BRAIN TTL 2h**TP_BRAIN 由告警止盈评估与持仓体检共用同一把锁**,体检写入值 `holding_check`;无价/异常时体检会释放锁供下轮重试METRICS_RISK 30min**ENTRY_GATE 30min建仓仲裁同股重判节流context 构造失败时释放供下轮重试)****RESCAN_GLOBAL 5min统一重算节流跨碰撞/风控/止盈/冷启动去重)** |
| `bionic:internal_alerts_state:{date}` | Hash | watcher | 收件箱去重 + 处理状态TTL 48h |
| `bionic:risk_rescan:{ymd}:{ts_code}` | Hash | tasks_risk | SELL→重算高水位`hwm_conf/last_ts`TTL 1 天 |
> **资金告警**`capital_accumulation`放量吸筹UP/ `capital_distribution`放量出货DOWN为上游告警流新增源`metadata` 含 `main_net_ratio/divergence/purified_volume`watcher 经 `_enrich_capital_semantics` 拼成带数字的证据描述喂大脑。`Massive_Outflow` / `Massive_Inflow` 则是 watcher 对 metrics 流mode=z的合成告警记录`value=z`、`metadata` 携 direction/z/mode/window_net/cum压入时间线供风控仲裁消费。
> **收件箱状态码**`bionic:internal_alerts_state:{date}` 的 `{uid}:status` 取值):
> - 看多:`BULLISH_DISPATCHED` / `BULLISH_IMMUNE`昨日已BUY/MAINTAIN且未达DANGER止盈门槛/ `BULLISH_COLDSTART` / `BULLISH_LOCKED`
> - 止盈:`TP_DISPATCHED`(持仓+DANGER派发止盈研判/ `TP_LOCKED` / `TP_NO_BASELINE`
> - 碰撞:`COLLIDE_DISPATCHED` / `COLLIDE_IMMUNE` / `COLLIDE_NO_BREAK`(未破位拦截)/ `COLLIDE_NO_PRICE` / `COLLIDE_LOCKED` / `COLLIDE_COLDSTART`
> - 风控DOWN/metrics流出`RISK_TRIGGERED` / `RISK_COOLDOWN`30min锁命中
> - metrics 暖机:`OUTFLOW_COLD_LOGGED` / `INFLOW_COLD_LOGGED`mode=cold 仅留痕)
> - 组合形式DOWN/流出写 `{风控状态}|{碰撞状态}`(如 `RISK_TRIGGERED|COLLIDE_NO_BREAK`);流入写 `INFLOW|{TP_*或COLLIDE_*}`。
### 5.2 db 3`SIGNAL_REDIS_DB_ACTIONS`)— 风控卖出指令
| 键 | 类型 | 说明 |
|---|---|---|
| `bionic:signals:llm_sell_actions` | Stream | `tasks_risk` 写 SELL见 5.5`/api/v1/risk/sell_signals` 读 |
### 5.3 db13`SIGNAL_REDIS_DB_QUOTES`)— 实时行情
| 键 | 类型 | 说明 |
|---|---|---|
| `tushare:rt_min:1MIN:{ts_code}` | String | 每股一个 key`ts_code` 为 Tushare 式,拼在键名内)。值为**当日分钟 K 线 JSON 数组**,每根含 `open/close/high/low/vol/amount`,时间正序。取现价 = `json.loads(get(key))[-1]['close']`(用 `get` 取整个 key顶层是 list取最后一根 `[-1]`)。`intraday_watcher` 与 `tasks_risk` 均按此读取。 |
### 5.4 ENTRY/EXIT 信号 Payload`intraday_signals` 流,扁平结构)
`schema_version, signal_id, ts_code, trade_date, trigger_time, producer_id="bionic_brain_intraday_v2.0", action(BUY/SELL), signal_type(ENTRY/EXIT), verdict(REVERSAL_SELL/REVERSAL_BUY/TAKE_PROFIT统一区分止损/入场/止盈离场;下游不识别可忽略), suggested_price, confidence, in_candidate_pool, signal_validity(JSON, 含 expires_at/ttl_seconds=300), audit_reason, component_scores, pred_upside, pred_downside`
> **同股同日下游消费规则B1**:同一 `ts_code` 多条信号按 stream 消息 ID 时序**后写覆盖先写**;大脑审计信号(`producer_id="bionic_brain_intraday_v2.0"` 且 `verdict` 非空)为对上游原始信号的知情二审,语义上覆盖上游 ENTRY/EXIT。解决上游 `intraday_buy_emitted` 自写 ENTRY 与我方 TAKE_PROFIT 同流并存的方向冲突。
### 5.5 SELL 指令 Payload`llm_sell_actions` 流)
包在 `{"data": <json>}` 中:`ts_code, action="SELL", confidence, dominant_signal, llm_reason, is_fallback, timestamp(ms)`。`dominant_signal` 为风控仲裁的主导信号枚举(如 `daily_qrs_symmetric_down/Massive_Outflow/...`**新增 `take_profit`**——由持仓止盈(`tasks_intraday._emit_sell_action`)写入,下游据此区分"风控止损卖出"与"止盈离场"。
### 5.6 上游单股信号查询 API192.168.16.188:28000非 Redis
上游提供的**纯 HTTP 按需计算**接口(单股冷算,无需预热),响应条目格式对齐 db2 告警流。当前唯一消费者:持仓体检 `workers/holding_check.py`(每次体检即时拉取,超时 4s
| 端点GET参数 `ts_code` 点式) | 内容 | 体检 context 中的角色 |
|---|---|---|
| `/api/v1/qrs/minute` | 分钟级 QRS盘中择时核心分量需 ~30 根分钟窗口,约 10:00 起可用) | 第一部分·盘中实时信号现状 |
| `/api/v1/qrs/daily` | 日线 QRS | 同上 |
| `/api/v1/capital/distribution` | 资金分布(`main_net_ratio` / `divergence` / `purified_volume`,早盘提纯量可能不足) | 同上 |
响应包络(本系统消费的字段面,完整 schema 以上游为准):
```json
{"available": true, "reason": "...", "value": ..., "level": "WARNING|DANGER|...",
"metadata": {"direction": "...", "main_net_ratio": ..., "divergence": ..., "purified_volume": ...}}
```
降级语义:`available=false` / 超时 / HTTP 非 200 / 异常 → 取数函数一律返回 `None`context 中该维度渲染为"未获取到(该维度当前无异常或数据未就绪)"**绝不中断体检**。
---
## 6. Milvus`trader_milvus`:19530
### 6.1 `market_memories_v2` — 当前记忆库(活跃)
向量口径:`z-score(close 64) + z-score(obv 64) = 128 维`(训练/推理一致,见 `ARCHITECTURE.md` §5。索引 `L2 / IVF_FLAT`
| 字段 | 类型 | 说明 |
|---|---|---|
| `stock_code` | VARCHAR | Tushare 式代码 |
| `trade_date` | INT64 | YYYYMMDD |
| `industry` | INT64 | 行业 CRC32 ID |
| `vector` | FLOAT_VECTOR(128) | 特征向量 |
| `score_smart` / `score_trend` / `score_chip` / `score_heat` | FLOAT | 影子分数rolling rank 百分位) |
| `label_profit` | FLOAT | 后验:未来 20 日最高价收益率 |
写:`MinerController._insert_to_milvus`(字段顺序须与上表一致)。读:`tasks_brain``anns_field="vector"``output_fields=[stock_code, trade_date, label_profit]`)。
> ⚠️ Miner 假设该集合**已存在**`Collection("market_memories_v2")`),不会自动建表。首次部署需手工创建集合 + 索引DDL/脚本见 `DEPLOYMENT.md` §5。
### 6.2 `market_failures_v1` — 失败记忆
完整 Schema2026-07-09 实测穷举):`id`(主键) / `vector`(FLOAT_VECTOR 128) / `stock_code` / `fail_date`(INT64) / `reason`(VARCHAR) / `original_signal`(VARCHAR)。
读:`tasks_brain` 检索(`output_fields=[stock_code, reason]`),命中则在 Prompt 注入「痛苦记忆」。写:**2026-07-09 起由二期 L2 自动沉淀**`meta_reflection.sink_failures`,每晚 ≤20 条schema 自适应插入 + `decision_outcome.l2_sunk` 防重;早期为人工维护)。⚠️ 本环境 pymilvus 的 `str(dtype)` 返回枚举数字101=FLOAT_VECTOR判型须用 DataType 数字码。
### 6.3 `market_memories_v1` — 旧记忆库(已弃用)
`memory_service.py` + `vectorizer.HolographicVectorizer`60 日线 + 40 周线 + 20 量比 + 8 状态 = 128 维)维护,字段 `memory_id, stock_code, event_date, embedding(128), outcome_label, profit_20d, raw_data(json)`。已被 v2 取代,见 `ARCHITECTURE.md` §7。
---
## 7. 数据流向速查
| 数据 | 来源 | 去向 / 消费者 |
|---|---|---|
| 选股池 | Mongo `stock_groups` + PG `t_signal_daily_results` | `DailyCognitiveLoop` |
| 行情/因子 | MySQL-B `gp_stock_factor_pro_*` | `DataLoader` → 大脑/Miner |
| 特征向量 | `FactorCalculator`/`Miner` | Milvus `market_memories_v2` |
| 策略结论 | 大脑 `save_to_database` | MySQL-B `strategy_daily_results` → API/前端 |
| 盘中告警 | 上游 → Redis-B db2 | `intraday_watcher` → 风控/大脑 |
| 实时行情 | 上游 → Redis-B db13 | `intraday_watcher` |
| SELL 指令 | `tasks_risk` / 持仓止盈·体检 → Redis-B db3 | `/api/v1/risk/sell_signals` |
| ENTRY/EXIT | `tasks_intraday` → Redis-B db2 | 下游交易系统 |
| 持仓快照 | 下游交易系统 → `trading_position`153 代理读) | `position_intraday_check`(体检)、`by_positions` 告警聚合、ENTRY_GATE持仓数、watch 扫描(持仓态) |
| 单股盘中信号 | 上游单股 API188:28000§5.6 | `holding_check` 体检 context |
| 建仓意向单 | 上游 → `trading_order` 状态 '7'153 代理§8.1 | `entry_gate_poll` 仲裁 → 置 '6' / 留 '7' |
| 决策账本 | 盘中裁决出口 → `decision_ledger`§8.2 | ENTRY_GATE 交易史注入、L1 判分 |
| 关注条件 | 大脑布防 → `watch_conditions`§8.4 | `watch_condition_scan` → CONDITION_HIT |
| 判分结果 | `outcome_scorer``decision_outcome`§8.3 | 滚动摘要、L2/L3二期 |
---
## 8. 153 代理侧 · 决策闭环 V7 表
> 一律经 `PROXY_DB_URL` 访问,**严格单表**(代理禁多表联查;判分器用"两次单表查询 + 内存比对"替代 JOIN。建表 DDL 见仓库根 `ddl_decision_loop_v7.sql`2026-07-03 已在 153 侧手工建立)。设计详见 `DECISION_LOOP_DESIGN.md` §5。
### 8.1 `trading_buy_plan` — 买入计划表仲裁状态机所在2026-07-07 更正)+ `trading_order` — 成交执行表
> ⚠️ **表更正2026-07-07 实盘发现)**:置 7 的状态机在 **`trading_buy_plan.is_active`**,不在 `trading_order.order_status`(设计对账时曾误按后者的 DDL 建轮询上游切换上线首日暴露fail-closed 期间无错误买入)。`trading_order` 仍是成交执行表,作 ENTRY_GATE **真实交易史**来源completed/filled 双向单,严格模式/连败判定依据)。
`trading_buy_plan.is_active` 状态词汇(**2026-07-09 上游代码实证版**`3`=盘中评估池(上游 orchestrator/intake **只认 3**)→ 上游评估触发时 `mark_intraday_triggered`**3→7**(幂等守卫 `WHERE is_active=3`,同时经其 publisher 发带 `entry_score/price_band/target_price` 的买入信号)→ `7`=已触发待我方仲裁(**不进上游评估池、不产信号**;但仍在 M16 风控监控池)→ 我方 APPROVE 置 `6`=待挂单(下游取走置 `1``5`=上游盘中拒、`2`=盘前审。REJECT 留 7上游不会再碰。**V7.3(已启用)**:我方 REVERSAL_BUY 变盘裁决可将今日 `5` 翻案回 **`3`(回评估池,绝不直置 7——那是永无信号的死单**`approved_by='bionic_revive'` + `change_reason` 署名,上游重评估触发后经 3→7 进我方 gate 二审。我方写入词汇 = **{6, 3}**,其余状态不写。
本系统消费字段:`id`(仲裁回写锚,账本 ref=`plan_{id}`) / `stock_code`(点式) / `target_price`(**实为计划买入限价**) / `tp_ratio`/`sl_ratio`(换算上望位=买价×(1+tp)、止损位=买价×(1sl),直接供 RR) / `buy_amount`(估算股数) / `strategy_id` / `factor_code`(来源池 TEMP_POOL/event_driven/TRADING_POOL) / `prob_thresh`/`hold_days` / `update_time`(置7时刻FIFO)。仅取 `trading_time >= 当日` 的计划(隔日 7 单由上游过期机制处置)。回写仅一种:`UPDATE trading_buy_plan SET is_active=6, approved_by='bionic_gate' WHERE id=? AND is_active=7`。
### 8.2 `decision_ledger` — 决策账本(共用基座)
每笔盘中裁决的结构化记账。写入方ENTRY_GATE 出口ENTRY_APPROVE/ENTRY_REJECT`price_at` 必填=反事实判分锚)+ `process_intraday_audit` 通用落笔REVERSAL_*/TAKE_PROFIT/MAINTAIN_HOLD/MAINTAIN全 direction 含 CONDITION_HIT/HOLD_CHECK。关键字段`ts_code`(点式) / `kind` / `direction` / `price_at` / `ref_id`(order_id 或 cond_id) / `strategy_id` / `gate_mode`(normal/strict) / `extra_json`(严格模式 checklist) / `outcome_scored`(L1 位图: 1=T+1, 2=T+5, 4=T+20)。消费方ENTRY_GATE 交易史注入、L1 判分。与 `strategy_audit_log` 分工audit_log 记思考文本人查ledger 记结构化动作(机读)。
### 8.3 `decision_outcome` — L1 判分结果
维度键 `(ref_type, ref_id, horizon)` 唯一INSERT IGNORE 幂等)。`ref_type` ∈ `strategy`ref_id=`{stock_code}_{trade_date}`/ `ledger`(账本 id/ `watch`cond_id`horizon` ∈ 1/5/20。指标`ret_pct / excess_pct`(对 000001.SH) `/ dir_hit / mdd_pct / post_high_pct`(卖飞度) `/ support_tested/held / pressure_tested/broken / conf_bucket / visual_pattern / fund_structure / gate_mode`。写入方 `outcome_scorer`(每晚 23:45从最老开始回填水位 800 行/晚)。
### 8.4 `watch_conditions` — 大脑声明的关注条件
状态机 `armed → hit / expired / superseded`。生成端 `tasks_brain._persist_watch_conditions`(校验+布防,新策略落库时该股旧 armed 全部 superseded扫描端 `watch_scanner`(每 5 分钟机检hit 用条件 UPDATE 防双派);`verdict` 由 CONDITION_HIT 裁决回写。字段:`cond_id`(`{ymd}_{prefix}_{seq}`) / `cond_type`(break_above/break_below/volume_surge/pullback_to/time_stop) / `level / volume_gate / vol_base`(生成时算好的近5日均量) / `horizon_days / expires_date`(交易日口径) / `then_action`(UPGRADE/EXIT_WARN/RECHECK) / `note`(声明逻辑,命中时喂回大脑) / `hit_at / hit_price / verdict`