全系统Key改为配对维度bug1

配对维度优化后系统缺陷与不足分析

一、当前已正确按配对维度的部分(简要)


二、缺陷与不足(按优先级)

1. 数据自愈加载历史 Z-score 未按配对过滤(Bug)

位置src/utils/data_healing/orchestrator.py_load_zscore_history(约 461–476 行)。

问题:查询 analysis_results 时仅使用 WHERE symbol = %s,未加 AND base_symbol = %s。编排器构造时已传入 base_symbol,但 SQL 未使用,导致同一 symbol 对不同 base 的 zscore 混在一起,自愈结果可能错配、缓冲区被错误序列污染。

建议:在查询中增加 AND base_symbol = %s,并在 params 中传入 self.base_symbol


2. 新币黑名单为 symbol 维度,与配对维度不一致

位置src/services/realtime_kline_service_base.pynew_coin_blacklist: set[str](约 244 行)、加入逻辑(1115–1121)、使用处(1498–1499)。

问题:当某 symbol 对 base A 的 4H 数据不足时,会执行 self.new_coin_blacklist.add(symbol),此后该 symbol 对任意 base 的分析都会被跳过。在「同一 symbol 对多 base」场景下,会误伤与 base B 的正常配对。

建议:将 new_coin_blacklist 改为按配对维度存储,例如 set[tuple[str, str]]set 中存 f"{symbol}|{base_symbol}",加入与判断处均使用 (symbol, base_symbol)(或统一字符串 key),并在取消订阅逻辑中区分「仅该配对」还是「全 symbol」(当前为全 symbol 取消订阅,若保留需在文档中说明)。


3. 数据自愈触发列表仅按 symbol 枚举,未按配对

位置src/services/realtime_kline_service_base.py_run_data_healing(约 1686–1692 行)。

问题:用 SELECT DISTINCT symbol FROM analysis_results WHERE zscore_4h IS NOT NULL 得到「有数据的 symbol」,再与当前订阅的 symbols 取交集,对每个 symbol 仅用 self.base_symbol 调用一次自愈。因此:

  • 只自愈「当前配置的 base」下的配对;
  • 若同一 symbol 对应多个 base(例如多 base 或后续扩展),其他配对的数据断层不会触发自愈。

建议(可选,视是否支持多 base):

  • 若当前仅单 base,可保持现状,但在注释中说明「仅自愈当前 base_symbol 的配对」;
  • 若未来支持多 base,应改为按配对枚举,例如 SELECT DISTINCT symbol, base_symbol FROM analysis_results WHERE zscore_4h IS NOT NULL,再与「当前服务的活跃配对集合」求交,对每个 (symbol, base_symbol) 调用自愈。

4. 脚本与工具类查询未带 base_symbol(一致性/多配对风险)

以下脚本或 SQL 片段在查询 analysis_results 时仅使用 symbol,在配对维度下可能混用多 base 数据或语义不明确:

文件 说明
src/scripts/fix_buffer_loading.py SOLUTION_1_SQL 中 WHERE symbol = %s,无 base_symbol
src/scripts/query_analyze_result/check_buffer_continuity.py 查询 WHERE symbol = %s,模拟启动加载逻辑,应与 orchestrator 一致带 base_symbol
src/scripts/backfill_analysis_results.py get_existing_kline_times 与历史查询仅按 symbol(脚本内 SYMBOL/BASE_Symbol 为常量,若固定单配对可接受,但建议显式带 base_symbol 以与表语义一致)
src/scripts/query_analyze_result/check_missing_purr_zscore.py WHERE symbol = %s
src/scripts/query_analyze_result/query_purr_zscore.py 同上
src/scripts/query_analyze_result/query_eth_zscore.py 同上
src/scripts/optimize_adaptive_zscore*.py 从 analysis_results 取数时仅按 symbol

建议:凡涉及「某一配对」的启动模拟、连续性检查、回填、优化,查询应带 AND base_symbol = %s(或脚本参数传入 base_symbol),与生产逻辑和 PairKey 维度一致。


5. 历史已压缩 Chunk 与新区间压缩维度不一致

位置database/migrations/20260219_fix_pairkey_indexes.sql 注释(44–46 行)。

问题:迁移已将 analysis_results 的压缩分段改为 (symbol, base_symbol),但已压缩的历史 chunk 仍是按旧分段(仅 symbol)压缩的,因此:

  • 同一表中存在两种压缩分段方式;
  • 对历史区间的按配对查询/压缩效果与新区间不一致。

建议:在维护窗口内对需要一致性的历史 chunk 执行 decompress_chunk + recompress_chunk(或按文档说明批量重压缩);若可接受「仅新数据按配对压缩」,则保留现状并在运维文档中写明。


6. 配置与文档层面的澄清

  • config.symbol_blacklistconfig.py):为「静态配置的币种黑名单」,按币种名(如 PURR、HYPE)禁止交易,与 DB 的「配对维度 24h 校验黑名单」是两套机制,建议在配置或架构文档中区分说明。
  • backfill / 自愈:若 backfill 或自愈脚本长期只支持「单 base」或「单配对」,建议在 README 或脚本注释中写明,避免多配对场景下误用。

三、小结(按建议修复优先级)

  1. 必须修:数据自愈 _load_zscore_history 增加 base_symbol 条件,避免混用不同配对数据。
  2. 建议修new_coin_blacklist 改为配对维度,避免误伤其他 base 的同一 symbol。
  3. 建议做:自愈触发列表若未来支持多 base,改为按 (symbol, base_symbol) 枚举并只自愈当前服务的活跃配对。
  4. 一致性:脚本与工具中凡「按配对」使用 analysis_results 的查询,统一增加 base_symbol 条件或参数。
  5. 运维/文档:明确历史压缩 chunk 是否重压缩、以及两套黑名单(配置 vs DB)的职责与使用场景。

以上为配对维度优化后仍存在的缺陷与不足,以及对应的修复与改进建议。

Read more

跑步的技巧(滚动落地)

“滚动落地(rolling contact / rolling foot strike)”不是一种教条式的“脚法”,而是一种 让冲击沿着整只脚、整条后链逐级传递的落地机制。 它的核心不是“你先用哪儿着地”,而是: 你的脚落地之后,冲击是不是像轮子一样滚过去,而不是像锤子一样砸下去。 这就是滚动落地的本质。 一、什么叫“滚动落地”? 你可以把它理解成两种完全不同的落地方式: 1. 砸地(撞击式) 脚像锤子一样拍到地上: * 要么后跟先砸 * 要么前掌先戳 * 冲击集中在一个点 * 一个结构瞬间吃掉大部分载荷 结果就是: * 后跟砸 → 膝盖难受 * 前掌戳 → 前脚掌磨烂 * 都不是长跑友好模式 这叫 撞击式着地(impact strike)。 2. 滚地(滚动式) 脚像轮胎一样“滚”过地面: * 不是某一点硬砸 * 而是外侧中足先轻触 * 再向前滚到前掌 * 最后从大脚趾蹬离

By SHI XIAOLONG

AMI的优越性

世界模型(World Models)的具体例子 如下,我按类型分类,便于理解。每类都附带实际实现、演示效果和应用场景。 1. Yann LeCun / Meta 的 JEPA 系列(最直接对应“世界模型”概念) 这些是 LeCun 主张的非生成式抽象预测世界模型代表。 * I-JEPA(Image JEPA,2023) 输入一张图像,模型把不同区域(context 和 target)编码成抽象表示,然后预测 target 的表示(不在像素级别重建)。 例子:给定一张遮挡了部分物体的图片,模型能预测“被遮挡物体的大致位置和属性”,构建对物体持久性和空间关系的理解。 这是一个“原始世界模型”,能学习物理常识(如物体不会凭空消失)。 * V-JEPA / V-JEPA 2(Video JEPA,

By SHI XIAOLONG

什么是:“世界模型(World Models)”

世界模型(World Models) 是人工智能领域的一个核心概念,尤其在 Yann LeCun 等研究者推动的下一代 AI 架构中占据中心位置。它指的是 AI 系统在内部构建的对现实世界的抽象模拟或内部表示,让机器能够像人类或动物一样“理解”物理世界、预测未来、规划行动。 简单比喻 想象你闭上眼睛也能“看到”房间里的物体会如何移动、碰撞或掉落——这就是你大脑里的世界模型。AI 的世界模型就是类似的“数字孪生”(digital twin)或“内部模拟器”:它不是简单记住数据,而是学习世界的动态、因果关系和物理直觉(如重力、物体持久性、遮挡、因果等)。 为什么需要世界模型? 当前主流的大型语言模型(LLM) 擅长处理文本(统计模式预测),但存在根本局限: * 缺乏对物理世界的真正理解 → 容易“幻觉”、无法可靠规划。 * 样本效率低 → 人类/

By SHI XIAOLONG

K线周期可配置化设计方案

K线周期可配置化设计方案 1. 背景与目标 当前 Beta 套利策略的 K 线周期硬编码为 "1h",分散在多个文件中。需要: 1. 将 K 线周期从 1h 改为 2h 2. 提取为环境变量 BETA_ARB_KLINE_INTERVAL,使其可在 .env 中配置 2. 影响范围分析 2.1 需要修改的文件(共 6 个) 文件 硬编码位置 修改内容 src/trading/config.py BetaArbConfig dataclass 新增 kline_interval 字段,

By SHI XIAOLONG