23 KiB
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 | 0–100 |
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 上游单股信号查询 API(192.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 以上游为准):
{"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 — 失败记忆
完整 Schema(2026-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 扫描(持仓态) |
| 单股盘中信号 | 上游单股 API(188: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)、止损位=买价×(1−sl),直接供 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。