通用多币种策略 分支合并到main分支

合并方案:fixed_merge_to_allcoins → main

生成日期:2026-02-16
目标:将 fixed_merge_to_allcoins 分支合并到 main,使 main 同时支持通用多币种服务和 HYPE 专用服务


1. 概述

1.1 合并目标

在 main 分支上同时管理两个独立运行的服务:

服务 入口模块 监控范围 Workers
通用版 src.services.realtime_kline_service 全部活跃币种(动态) 30
HYPE 专用版 src.services.realtime_kline_service_hype HYPE + PURR(固定) 2

两个服务共享同一套交易模块(src/trading/),通过 TradingConfig.is_symbol_allowed() 控制各自可交易的币种范围。

1.2 架构升级要点

fixed_merge_to_allcoins 分支对交易模块做了多币种隔离升级,核心变化:

  • strategy.py:单体 SymbolState 拆分为 SymbolBaseline(纯计算状态)+ 独立的 per-symbol 字典
  • orchestrator.py:数据灌入从单 symbol 改为 per-symbol 循环;数据自愈下沉到 service_base
  • position_manager.py:新增禁止平仓机制、DB 恢复方法复用、孤儿检测优化

1.3 冲突规模

dry-run merge 检测到 12 个冲突文件

.env.example                              内容冲突      低
docs/README.md                            modify/delete 低
src/config.py                             自动合并      -
src/trading/orchestrator.py               内容冲突      高
src/trading/position_manager.py           内容冲突      高
src/trading/risk_manager.py               内容冲突      中
src/trading/strategy.py                   内容冲突      高
src/utils/analysis/kline_data_filler.py   内容冲突      中
src/utils/analysis/risk_evaluator.py      add/add       中
src/utils/data_healing/repair_executor.py add/add       低
src/utils/hyperliquid_candles.py          add/add       低
src/utils/monitoring/alert_sender.py      add/add       中
src/utils/monitoring/signal_alert_formatter.py  add/add 中

2. 逐文件合并决策

2.1 核心交易模块(高优先级)

2.1.1 src/trading/strategy.py — 采用 allcoins 版本

决策:以 fixed_merge_to_allcoins 为准

对比维度 main allcoins
状态结构 SymbolState 大杂烩(buffer + position + cooldown + 突破状态合一) SymbolBaseline(纯计算)+ 独立字典
状态索引 _states: dict[str, SymbolState] _baselines + _positions + _exit_pending + _last_trade_time
prime_buffer() prime_buffer(symbol, z4h_values) 同(API 兼容)
get_adaptive_z() get_adaptive_z(symbol) 同(API 兼容)
is_ready is_symbol_ready(symbol) is_ready(symbol) + any_ready property
日志诊断 全局 _tick_count / _last_status_time 改为 per-symbol 字典

理由

  • 拆分后语义更清晰:SymbolBaseline 生命周期是服务启动→结束,PositionTracker 是开仓→平仓
  • per-symbol 的诊断/冷却/突破状态消除了多币种交叉污染风险
  • 核心算法(EMA、Welford、adaptive_z)两版完全一致,不涉及计算逻辑变更

操作步骤

# 冲突解决时直接采用 allcoins 版本
git checkout fixed_merge_to_allcoins -- src/trading/strategy.py

验证:确认 process_signal() 方法签名未变、prime_buffer(symbol, values) 接口兼容。


2.1.2 src/trading/orchestrator.py — 以 allcoins 为基础,合入 main 告警改动

决策:以 fixed_merge_to_allcoins 为基础

allcoins 版本包含 3 项关键改进:

改进 说明
A. per-symbol 数据灌入 遍历所有有 z4h 数据且允许交易的 symbol 调用 prime_buffer(sym, values)
B. 数据自愈下沉 自愈移到 realtime_kline_service_base._run_data_healing(),orchestrator 不再管自愈
C. 告警系统升级 _send_entry_alert() 先尝试详细告警,失败降级为简短通知

main 在最新提交中也引入了 ENABLE_SIGNAL_DETAIL_ALERTAlertSenderformat_signal_alert 等,与 allcoins 的告警升级方向一致

操作步骤

# 1. 先采用 allcoins 版本
git checkout fixed_merge_to_allcoins -- src/trading/orchestrator.py

# 2. 手动确认以下 import 存在(allcoins 已包含):
#    from src.utils.monitoring.alert_sender import AlertSender
#    from src.utils.monitoring.alert_level import AlertStatus
#    from src.utils.monitoring.signal_alert_formatter import format_signal_alert
#    from src.config import ENABLE_SIGNAL_DETAIL_ALERT

注意事项

  • allcoins 移除了 from src.config import HYPE_ALT_SYMBOL(不再硬编码单一 symbol)
  • allcoins 移除了 self._risk_manager.load_peak_equity()(重启即新起点)
  • _send_close_notification() 新增了 skip_reason 处理(配合 close_disabled 功能)
  • 超时平仓改为限价单(force_market = "超时" not in reason),止损仍用市价单

2.1.3 src/trading/position_manager.py — 采用 allcoins 版本

决策:以 fixed_merge_to_allcoins 为准

allcoins 新增 3 项功能(纯增量,不删除已有逻辑):

功能 说明
禁止平仓机制 close_position() 入口新增 is_close_disabled() 检查,返回 synthetic 成功结果
DB 恢复抽方法 新增 _load_position_from_db_row() 复用于启动恢复和孤儿检测
孤儿检测优化 先批量查 DB 再判定真孤儿(区分"DB 恢复"和"真孤儿"),减少误告警

操作步骤

git checkout fixed_merge_to_allcoins -- src/trading/position_manager.py

2.2 告警与监控模块(中优先级)

2.2.1 src/utils/monitoring/signal_alert_formatter.py — 采用 main 版本

决策:以 main (HEAD) 为准

对比维度 main allcoins
降级机制 迭代降级_FALLBACK_CHAIN + for 循环 递归降级:catch 后递归调用自身
安全性 迭代无栈溢出风险 递归理论上可能 3 层,实际安全但不如迭代健壮
功能 等价 等价

操作步骤

# 保留 main 版本(冲突解决时选择 ours)
git checkout HEAD -- src/utils/monitoring/signal_alert_formatter.py

2.2.2 src/utils/monitoring/alert_sender.py — 采用 main 版本

决策:以 main (HEAD) 为准

对比维度 main allcoins
去重/限流顺序 先去重再限流(去重优先级更高) 先限流再去重
限流时记录 hash ✅ 限流也记 hash,防止窗口过后重复发送 ❌ 不记录

main 的逻辑更严谨:相同内容不管是否限流都不应重复发送。

操作步骤

git checkout HEAD -- src/utils/monitoring/alert_sender.py

2.2.3 src/utils/analysis/risk_evaluator.py — 采用 main 版本

决策:以 main (HEAD) 为准

两版差异在于趋势维度的语义方向

对比维度 main (HEAD) allcoins
维度名 trend_safety(安全性,越高越好) trend_risk(风险度,越高越差)
评分 均值回归=80分(高安全),趋势性=低分 均值回归=20分(低风险),趋势性=高分
加权方式 直接加权 (100 - score) 反转后加权
最终效果 等价 等价

main 的 trend_safety 语义(越高越好)与其他 4 个维度方向一致,更直观,无需在加权时做反转。

操作步骤

git checkout HEAD -- src/utils/analysis/risk_evaluator.py

注意:allcoins 版本新增了 _get_period_data() 辅助函数和部分注释。这些在 main 版本中已存在或不需要(signal_alert_formatter.py 中有同名函数)。


2.3 数据层模块(中优先级)

2.3.1 src/utils/analysis/kline_data_filler.py — 以 allcoins 为准

决策:以 fixed_merge_to_allcoins 为准

唯一变化:新增 max_duration=KLINE_FILLER_MAX_DURATION_SECONDS 参数传递(30 秒超时保护)。

操作步骤

git checkout fixed_merge_to_allcoins -- src/utils/analysis/kline_data_filler.py

2.3.2 src/utils/hyperliquid_candles.py — 采用 allcoins 版本

决策:以 fixed_merge_to_allcoins 为准

新增 max_duration 参数支持和超时判断逻辑(配合 kline_data_filler 使用)。

操作步骤

git checkout fixed_merge_to_allcoins -- src/utils/hyperliquid_candles.py

2.3.3 src/utils/data_healing/repair_executor.py — 采用 allcoins 版本

决策:以 fixed_merge_to_allcoins 为准

add/add 冲突,两边都是新文件。allcoins 版本更新更完整。

操作步骤

git checkout fixed_merge_to_allcoins -- src/utils/data_healing/repair_executor.py

2.4 配置文件

2.4.1 src/config.py — 合并两边

决策:自动合并(git 已成功 auto-merge)

allcoins 的关键变更(全部采纳):

  • COINTEGRATION_THRESHOLD: 2 → 3(协整门槛提高)
  • 新增 KLINE_FILLER_MAX_DURATION_SECONDS = 30(数据补充超时保护)
  • 新增 HEALING_TIMEOUT_SECONDS(数据自愈超时)
  • 注释增强(各参数增加中文说明)

2.4.2 src/trading/config.py — 采用 allcoins 版本

决策:以 fixed_merge_to_allcoins 为准(git 未报冲突,已自动合并)

allcoins 新增:

  • close_disabled_symbols: set[str] 字段
  • is_close_disabled(symbol) 方法
  • _parse_close_disabled_symbols() 环境变量解析

2.4.3 .env.example — 以 allcoins 为基础,review 参数值

决策:以 fixed_merge_to_allcoins 为基础

allcoins 变更:

  • 新增 LOG_LEVEL=DEBUG
  • 新增 TRADING_CLOSE_DISABLED_SYMBOLS=
  • TRADING_MAX_HOLD_HOURS: 72.0 → 0.5(需确认是否为测试值)
  • TRADING_STRATEGY_ADAPTIVE_THRESHOLD: 2.5 → 4(全量币种适合更高阈值)
  • TRADING_STRATEGY_COOLDOWN_MINUTES: 30 → 5
  • 更详细的限价单配置注释

操作步骤

git checkout fixed_merge_to_allcoins -- .env.example

⚠️ 合并后需 review

  • TRADING_MAX_HOLD_HOURS=0.5 是否仅用于测试?生产环境是否应恢复为 72.0?
  • TRADING_STRATEGY_ADAPTIVE_THRESHOLD=4 对 HYPE 服务是否合适?(原 HYPE 用 2.5)

2.5 辅助文件

2.5.1 src/trading/risk_manager.py — 采用 allcoins 版本

决策:以 fixed_merge_to_allcoins 为准

变更很小:

  • 移除 from pathlib import Path(不再使用)
  • load_peak_equity() 方法被移除(重启即新起点,不加载历史峰值)
  • update_peak_equity() 注释更新
git checkout fixed_merge_to_allcoins -- src/trading/risk_manager.py

2.5.2 docs/README.md — 保留 main 版本

决策:保留 main 版本

allcoins 删除了此文件(modify/delete 冲突),但 main 仍在维护。

git checkout HEAD -- docs/README.md

2.6 自动合并的文件(无冲突,确认即可)

以下文件 git 自动合并成功,需人工 review 确认无误:

文件 变更内容
src/config.py COINTEGRATION_THRESHOLD=3 + 新参数 + 注释
src/trading/config.py close_disabled_symbols 功能
pyproject.toml 依赖变更
src/trading/models.py PairOrderResult.skip_reason 字段
src/trading/protocols.py get_positions_by_symbols() 协议方法
src/trading/trade_repository.py get_positions_by_symbols() 实现
src/trading/executor.py 429 限流分层重试 + Info 初始化重试
src/trading/single_thread_position_manager.py close_disabled 支持
src/services/realtime_kline_service_base.py 数据自愈 _run_data_healing()
src/utils/data_healing/* 数据自愈模块(init, config, continuity_checker, orchestrator, quality_assessor)
src/utils/monitoring/lark_bot.py 小改动
src/utils/monitoring/alert_level.py AlertLevel 枚举
src/utils/message_deduplicator.py 去重器改进

2.7 allcoins 删除的文件

以下文件在 allcoins 分支被删除(main 上存在),合并后会被移除:

类别 文件
过时文档 CHANGELOG.md, CONFIG_CHANGES.md, CONNECTION_POOL_ANALYSIS.md, DESIGN_SOLUTION.md, FINAL_TEST_REPORT.md, IMPLEMENTATION_SUMMARY.md, REFACTOR_COMPATIBILITY_CHECK.md, REFACTOR_QUICK_REFERENCE.md, WEBSOCKET_POSITION_CACHE_IMPLEMENTATION.md
过时文档(docs/) docs/DESIGN.md, docs/TECHNICAL_DEBT_REPORT_2026-02-10.md, docs/TRADING_MODULE_DESIGN.md, docs/signal_mining_algorithm_technical_share.md, docs/study/*.md(3个)
调试脚本 check_btc_eth_params.py, connection-pool-monitor.py, debug_l2_cache.py, debug_testnet_connection.py, real_test_btc_eth.py, real_test_fixed.py, simple_l2_snapshot_test.py
构建文件 uv.lock, run_all_tests.sh, .env.pgbouncer

确认:这些文件是否都可以安全删除?如有需要保留的请在合并前标记。


3. 执行步骤

3.1 准备

# 确保工作区干净
git stash  # 如有未提交改动

# 更新两个分支到最新
git fetch origin

# 创建合并工作分支(可选,安全操作)
git checkout main
git checkout -b merge/allcoins-to-main

3.2 执行合并

# 开始合并(不自动提交)
git merge --no-commit --no-ff fixed_merge_to_allcoins

3.3 逐文件解决冲突

按优先级从高到低执行:

# ── 高优先级:核心交易模块 ──

# strategy.py — 采用 allcoins
git checkout fixed_merge_to_allcoins -- src/trading/strategy.py

# orchestrator.py — 采用 allcoins
git checkout fixed_merge_to_allcoins -- src/trading/orchestrator.py

# position_manager.py — 采用 allcoins
git checkout fixed_merge_to_allcoins -- src/trading/position_manager.py

# risk_manager.py — 采用 allcoins
git checkout fixed_merge_to_allcoins -- src/trading/risk_manager.py


# ── 中优先级:告警与监控 ──

# signal_alert_formatter.py — 保留 main(迭代降级更安全)
git checkout HEAD -- src/utils/monitoring/signal_alert_formatter.py

# alert_sender.py — 保留 main(去重优先+限流记hash更严谨)
git checkout HEAD -- src/utils/monitoring/alert_sender.py

# risk_evaluator.py — 保留 main(trend_safety语义统一)
git checkout HEAD -- src/utils/analysis/risk_evaluator.py


# ── 中优先级:数据层 ──

# kline_data_filler.py — 采用 allcoins(新增超时保护)
git checkout fixed_merge_to_allcoins -- src/utils/analysis/kline_data_filler.py

# hyperliquid_candles.py — 采用 allcoins(max_duration 支持)
git checkout fixed_merge_to_allcoins -- src/utils/hyperliquid_candles.py

# repair_executor.py — 采用 allcoins
git checkout fixed_merge_to_allcoins -- src/utils/data_healing/repair_executor.py


# ── 低优先级:配置与文档 ──

# .env.example — 采用 allcoins(合并后 review 参数值)
git checkout fixed_merge_to_allcoins -- .env.example

# docs/README.md — 保留 main
git checkout HEAD -- docs/README.md

3.4 暂存并检查

# 暂存所有解决后的文件
git add -A

# 检查是否还有未解决的冲突标记
grep -rn '<<<<<<< ' src/ .env.example docs/ || echo "无残留冲突标记"

# 查看最终 diff 确认改动合理
git diff --cached --stat

3.5 提交

git commit -m "$(cat <<'EOF'
merge: fixed_merge_to_allcoins → main (多币种策略架构升级)

核心变更:
- strategy.py: SymbolState 拆分为 SymbolBaseline + 独立 per-symbol 字典
- orchestrator.py: per-symbol 数据灌入 + 数据自愈下沉到 service_base
- position_manager.py: 禁止平仓机制 + DB恢复复用 + 孤儿检测优化
- kline_data_filler: 30s 超时保护
- config: COINTEGRATION_THRESHOLD=3

告警模块保留 main 版本:
- signal_alert_formatter: 迭代降级(更安全)
- alert_sender: 先去重再限流 + 限流记hash(更严谨)
- risk_evaluator: trend_safety 统一语义方向
EOF
)"

4. 合并后验证

4.1 语法检查

python -m py_compile src/trading/strategy.py
python -m py_compile src/trading/orchestrator.py
python -m py_compile src/trading/position_manager.py
python -m py_compile src/utils/analysis/kline_data_filler.py
python -m py_compile src/utils/monitoring/signal_alert_formatter.py
python -m py_compile src/utils/monitoring/alert_sender.py

4.2 import 链验证

确认 orchestrator 的 import 不报错:

python -c "
from src.trading.orchestrator import TradingOrchestrator
from src.trading.strategy import AdaptiveBollingerStrategy, SymbolBaseline, PositionTracker
from src.utils.monitoring.alert_sender import AlertSender
from src.utils.monitoring.signal_alert_formatter import format_signal_alert
from src.utils.analysis.risk_evaluator import evaluate_risk
print('All imports OK')
"

4.3 关键接口一致性检查

python -c "
from src.trading.strategy import AdaptiveBollingerStrategy
import inspect

# 确认 prime_buffer 接受 (symbol, values) 两个参数
sig = inspect.signature(AdaptiveBollingerStrategy.prime_buffer)
params = list(sig.parameters.keys())
assert params == ['self', 'symbol', 'z4h_values'], f'prime_buffer 签名异常: {params}'

# 确认 get_adaptive_z 接受 (symbol) 参数
sig2 = inspect.signature(AdaptiveBollingerStrategy.get_adaptive_z)
params2 = list(sig2.parameters.keys())
assert params2 == ['self', 'symbol'], f'get_adaptive_z 签名异常: {params2}'

print('API signatures OK')
"

4.4 risk_evaluator 语义一致性

确认 main 版本的 trend_safety 与 allcoins 的 trend_risk 不会在下游引起 KeyError:

# 搜索所有引用 trend_risk 或 trend_safety 的地方
grep -rn 'trend_risk\|trend_safety' src/

如果 signal_alert_formatter.py(main 版本)引用了 trend_safety,而 risk_evaluator.py 输出的 key 也是 trend_safety,则一致。如果有不匹配需要修正。


5. 运行约束

5.1 两个服务不能同时运行

资源 限制
DB 连接池 max=10,通用版 30 workers 已接近极限
Symbol monitoring 只有通用版开启,两服务同时跑会竞态写 metadata
WebSocket 各自建立独立连接,同时跑会翻倍连接数

建议:通过环境变量或启动脚本确保同一时间只运行一个服务。

5.2 .env 参数适配

合并后 .env.example 中部分参数值适合全量币种场景,HYPE 专用服务可能需要调整:

参数 allcoins 默认值 HYPE 建议值 说明
TRADING_STRATEGY_ADAPTIVE_THRESHOLD 4 2.5~2.9 HYPE 波动率较低,阈值不需要这么高
TRADING_MAX_HOLD_HOURS 0.5 72.0 0.5 可能是测试值
TRADING_STRATEGY_COOLDOWN_MINUTES 5 30 全量币种可以更频繁

建议为两个服务维护独立的 .env 文件(如 .env.allcoins / .env.hype)。


6. 决策汇总表

# 文件 采用版本 理由
1 strategy.py allcoins 多币种隔离核心升级
2 orchestrator.py allcoins per-symbol 灌入 + 自愈下沉 + 告警升级
3 position_manager.py allcoins 纯增量功能
4 risk_manager.py allcoins 移除过时方法
5 signal_alert_formatter.py main 迭代降级更安全
6 alert_sender.py main 先去重再限流更严谨
7 risk_evaluator.py main trend_safety 语义统一
8 kline_data_filler.py allcoins 30s 超时保护
9 hyperliquid_candles.py allcoins max_duration 支持
10 repair_executor.py allcoins 更完整版本
11 .env.example allcoins 新配置项(需 review 参数值)
12 docs/README.md main 保留现有文档

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