diff --git a/CHANGELOG.md b/CHANGELOG.md index fdc00bf0..a4e81daa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,41 @@ +## 2026-08-14 — 港股接入(多市场支持,阶段0-4) + +参照 A 股全链路接入港股(港股通范围)。原则:不另起炉灶(复用 A 股代码,差异收敛到市场抽象层)+ 币种统一(个股存原币 HKD,汇总转 CNY)。 + +### 阶段0:币种规范修复 +- import_holding_xls 导入港股从"转 CNY 存"改为"存 HKD 原币"(对齐 v3 设计) +- strategy_lifecycle 删"拉港股价格即转 CNY"(价格比较与行情 HKD 原值单位一致;顺带修 price 转 CNY 但 close/high/low 未转的单位不一致 bug) +- strategy_summary 删硬编码汇率 0.867 → get_hk_rate() +- mo_models.validate_portfolio 校验对齐 v3(个股 HKD 合法) +- refresh_macro_context 修恒指前缀 bug(szHSI/szHSCEI → hkHSI/hkHSCEI) + +### 阶段1:市场抽象层(market_config.py,唯一事实源) +- market_for_code / kline_symbol / MARKETS / is_trading_now +- 收敛 6 处散落的市场前缀判断(market_data/price_monitor x2/stale_push_wlin/technical_analysis/strategy_lab),纯重构行为等价 + +### 阶段2:数据层 +- hk_connect_list.py:港股通名单采集器(东财 MK0146 板块 620 只,push2delay 镜像避开主 host 封禁;调/调出检测;hk_connect_stocks 表) +- get_stock_pool(market='a'|'hk'|'all') 参数化(默认 'a' 行为不变) +- daily_kline_collector 港股批(hk 子命令,腾讯 hk 前缀日K;实测 608/620 成功) + +### 阶段3:温区双市场 +- 表迁移(migrate_regime_market.py):market_regime/strategy_regime_perf/market_indicators 重建加 (.,market) 联合主键,regime_cycles ALTER 加列;历史数据 market='a',备份 xxx_bak_20260814 +- compute_regime/temp_band/regime_tracker/regime_perf 全部 market 参数化 +- 恒指 hkHSI 历史回填 12 年(2014 起 3005 条日K,backfill_hk_index.py)+ 港股温区回填 2975 条(backfill_hk_regime.py) +- **验证:A股 trend_down / 港股 trend_up(两市场温区相反)** +- 向后兼容:market_regime_smoothed.json 顶层键=A股,markets dict 双市场详情 + +### 阶段4:温区感知(买卖/重评链路) +- market_config.get_regime_temp(code):温区+温度按标的市场 +- stale_push_wlin / price_monitor 信号溯源按市场 +- strategy_lifecycle:regenerate_all 批量 + reassess_with_context 单票重评,港股持仓用港股温区(A股路径逐字节不变) + +### 待落地(依赖港股策略路线) +- strategy_router 按市场激活、港股全市场选股(scanner 扫港股通池需先有港股策略) +- cron 挂载(港股日K采集 16:30、名单周刷新) + +--- + ## 2026-08-12 — Cron 架构梳理(3+1 环节×3+1 层 + cron 体系统一 hermes) ### 背景 diff --git a/docs/SYSTEM_ARCHITECTURE.md b/docs/SYSTEM_ARCHITECTURE.md index 17db26a9..1245a4ae 100644 --- a/docs/SYSTEM_ARCHITECTURE.md +++ b/docs/SYSTEM_ARCHITECTURE.md @@ -166,6 +166,49 @@ mofin_health(健康采集) → F健康 Dashboard(三层架构健康 + cron来 | */30 盘中 | strategy_executor.py | 按激活策略调度选股 scanner | | 周五 17:00 | strategy_alert.py | 三振出局失效预警(滚动胜率/盈亏比) | +## 五.6 港股接入(多市场支持,2026-08-14 落地) + +参照 A 股全链路接入港股(港股通范围)。设计原则:**不另起炉灶**——复用 A 股代码结构,市场差异点收敛到市场抽象层;**币种统一**——个股存原币(港股 HKD),计算/汇总统一转 CNY。 + +### 市场抽象层(market_config.py,唯一事实源) + +所有市场判断/符号映射收敛于此,替代原先散落 6 处的各自实现: + +| 接口 | 作用 | 规则 | +|------|------|------| +| `market_for_code(code)` | 市场判断 | 5位0/1开头 → `hk`,6位 → `a`(委托 mo_models.is_hk_stock) | +| `kline_symbol(code)` | 行情/K线符号 | `600519`→sh、`000001`→sz、`00700`→hk | +| `MARKETS` dict | 市场配置 | index_code / currency / has_price_limit / trading_hours(港股含午休 12:00-13:00) | +| `is_trading_now(market)` | 交易时段 | A股 9:30-11:30/13:00-15:00,港股 9:30-12:00/13:00-16:00 | +| `get_regime_temp(code)` | 温区+温度溯源 | 按标的市场返回(A股=smoothed 顶层,港股=markets.hk) | + +### 数据层 + +- **港股通名单**(hk_connect_list.py → hk_connect_stocks 表):东财 MK0146 板块(push2delay 镜像,主 host push2 对 246 封禁),620 只标的,支持调入/调出检测,周级刷新。**港股通名单本身是数据层定期采集数据**(老莫定) +- **股票池**:`get_stock_pool(market='a'|'hk'|'all')` 参数化(默认 'a' 行为不变;'hk'=港股通名单+港股持仓/自选) +- **港股日K**:daily_kline_collector hk 批(腾讯 hk 前缀,入 stock_daily,与 A 股同表靠 code 长度区分) + +### 温区双市场 + +- **market_regime 表**:(date, market) 联合主键,同日 A/港股各一条(迁移脚本 migrate_regime_market.py,4 表加 market 列+备份) +- **温区判定**:compute_regime 按市场用对应指数(A股 sh000001 / 港股 hkHSI 恒生指数) +- **温度/平滑/归因**:temp_band、regime_tracker、regime_perf 全部 market 参数化 +- **恒指历史**:hkHSI 回填 12 年(2014 起,3005 条日K + 2975 条温区) +- **向后兼容**:market_regime_smoothed.json 顶层键= A 股(既有消费方 regime_gate/strategy_router 不受影响),markets dict 含双市场详情 + +### 币种规范(v3 重申) + +- **个股一律存原币**:港股 price/cost/mv 存 HKD 原值,A 股存 CNY +- **汇总统一折算**:市值/盈亏/总资产经 mo_models.to_cny/calc_total_mv 转 CNY +- **价格比较用原值**:止损止盈/目标价与行情源(HKD)单位一致,不折算 +- **显示区分币种**:港股价格带 HKD/HK$ 标识 + +### 现状与边界 + +已落地:港股通名单采集、港股日K、温区双市场(A股 trend_down / 港股 trend_up 已验证相反)、温区感知买卖/重评、币种规范。 +**待落地**(依赖港股策略):strategy_router 按市场激活、港股全市场选股(scanner 扫港股通池需先有港股策略)。 +**不做**:港股资金流/板块 enrichment(cninfo/sina 不支持港股)、TDX relay(已归档)。 + ## 六、开发原则(自动任务强约束) 1. **单例守卫**:每个定时脚本必须 `_singleton_guard`(fcntl flock /tmp/mofin_locks/),防重复实例并发写(2026-08-05 进程堆积事故后统一加装)