Commit Graph

161 Commits

Author SHA1 Message Date
hmo efaa20d775 feat: AlphaSift disabled by default (ALPHASIFT_ENABLED=false), add --enable flag 2026-06-30 02:21:23 +08:00
hmo c38787aea3 fix: sort candidates by score across strategies before limiting MAX_ADD 2026-06-30 02:15:44 +08:00
hmo 992b283d3f feat: multi-strategy parallel screening (balanced_alpha+dual_low+quality_value) 2026-06-30 02:08:48 +08:00
hmo 790b0f9acc feat: mo_alphasift_bridge v2 — async mode + source tracking (date/strategy/notes) 2026-06-30 01:57:01 +08:00
hmo 897bc54bab feat: mo_alphasift_bridge.py — AlphaSift screening → MoFin watchlist auto-bridge 2026-06-30 01:51:48 +08:00
hmo 8fd134a063 fix: mo_bridge cache path (reports/ + data/market_review/) + mo_dsa_opinion.py standalone DSA strategy reference script 2026-06-30 01:31:42 +08:00
hmo 18081c05a4 fix: mo_bridge news fallback to akshare + market review cache-only in cron 2026-06-30 01:24:09 +08:00
hmo ab23dfd234 feat: DSA full integration — mo_bridge v2 + strategy_lifecycle injection
mo_bridge.py (rewrite):
- get_stock_news(): DSA SearchService 7 engines → MoFin analysis context
- get_market_review(): DSA run_market_review() with 24h cache
- get_stock_analysis(): DSA AgentExecutor.run() with 15 strategies
- enrich_analysis_context(): one-call context injection

strategy_lifecycle.py:
- reassess_with_context() now injects DSA market + news context
- Auto-detects HK vs A-share region for market review
- Graceful fallback if DSA unavailable
2026-06-30 01:17:23 +08:00
hmo 8bcba05e7d docs: add DSA web server info to CHANGELOG 2026-06-30 00:50:56 +08:00
hmo 5264fd5241 docs: MoFin architecture reform CHANGELOG 2026-06-30 00:36:08 +08:00
hmo d9b48ea5f0 fix: Eastmoney individual query + remove /100 price bug 2026-06-30 00:29:37 +08:00
hmo 8710dfe366 feat: HK realtime via Eastmoney push2 API — no more 15-min delay
price_monitor.py now splits A-share (Tencent realtime) and HK (Eastmoney realtime):
- fetch_all_prices() → A-shares only via qt.gtimg.cn
- fetch_hk_eastmoney() → HK stocks via push2.eastmoney.com (real-time, free)
- _fetch_hk_tencent_fallback() → fallback if Eastmoney fails (15-min delay)
- Eastmoney API: market code 116, fields f43(price)/f170(chg%)/f60(prev_close)
2026-06-30 00:25:56 +08:00
hmo 89153832b4 fix: DSA path auto-detect — check server path /home/hmo/daily-stock-analysis first 2026-06-29 23:47:59 +08:00
hmo 6abc2e45b0 refactor: phase 0-2 MoFin architecture reform — single source of truth
Phase 0 (止血):
- mo_models.py: unified calc_total_assets(), is_hk_stock(), get_hk_rate() — single source of truth
- Fixed 3 files missing frozen_cash: holdings_reconciliation, server, import_holding_xls
- Fixed stale_push_wlin: unified is_hk_stock detection, removed hardcoded 0.866
- Fixed price_monitor: consolidated 2 duplicate total_assets blocks into mo_models calls
- Fixed stock_scorer: replaced broken len()<=5 is_hk_stock heuristic
- Fixed strategy_lifecycle: replaced non-existent currency_utils import with mo_models

Phase 1 (DSA adapter):
- mo_provider.py: wraps DSA DataFetcherManager (16 fetchers, auto-fallback)
  - TDX relay as primary, DSA as backup for realtime/kline/news/fundamentals

Phase 2 (Integration):
- mo_bridge.py: injects DSA market review + news context into MoFin analysis prompts
- Graceful degradation if DSA not installed

Infrastructure:
- mo_config.py: centralized Config singleton replacing scattered hardcoded paths
- All 11 changed files pass python compile check

Impact: total_assets now computed in ONE place (mo_models).
        is_hk_stock now ONE implementation (no more false negatives).
        HK rate now ONE source (hk_rate API → cache → 0.87 fallback).
        No more hardcoded 0.866/0.8664/0.8700 divergence.
2026-06-29 23:25:54 +08:00
知微 7d49470aeb 总资产公式修复+数据模型文档
bugfix: price_monitor写total_assets时漏算frozen_cash
  公式修正: total_assets = market_value + cash + frozen_cash
  影响: price_monitor两处公式 + stale_push_wlin fallback路径

docs: portfolio-data-model.md 新增
  数据模型字段说明
  现金流更新规则
  常见错误清单
2026-06-29 22:35:07 +08:00
知微 5a2d616dfd 现金冻结修复:price_monitor不再重算cash
根因:price_monitor每2分钟用av+fz重算cash,
但av/fz是旧数据(含法拉电子卖出前冻结),
覆盖了Dad交易截图后的正确现金92,679。

修复:
1. price_monitor只更新market_value,不碰cash
2. cash设回正确值92,678.85(含法拉电子+18,920)
3. 加cash_history追踪每次修改
2026-06-29 22:24:12 +08:00
知微 0b0323eb23 cash/总资产循环依赖修复
问题:price_monitor从strategy_staleness_report读cash→
stale_report由stale_push_wlin从portfolio.json写cash→
循环依赖导致cash值被污染(92,678→正确的应是113,240)

修复:
1. price_monitor改成优先用available_cash+frozen_cash字段
   (来自Dad截图确认值),不再从stale_report读
2. portfolio.json清理重复字段,统一用available_cash+frozen_cash
3. total_assets = total_market_value + available + frozen
4. 正确的数:市值835,552+可用73,758+冻结39,481=总资产948,792
2026-06-29 22:17:28 +08:00
知微 9709c43ccb 总资产权威数据源统一修复
问题:总资产每次报告重新计算,数字不一致。
根因:cash字段错误(92664→73759),stale_push_wlin二次×0.866,
      报告各算各的。

修复:
1. portfolio.json cash 修正为Dad截图确认值73,758.85
2. price_monitor 每轮写入 total_mv + total_assets 到portfolio.json
   (从此所有报告只读这个字段,不自算)
3. stale_push_wlin 删除重复的 hmv *= 0.866(数据已CNY)
4. portfolio.json 加 currency: CNY 标记防混淆
5. 日志记录本次修复
2026-06-29 21:39:06 +08:00
知微 a8d5418726 price_monitor 汇总值重算 + total_assets修正
问题:price_monitor每2分钟更新个股价,但不更新
total_market_value/total_assets/cash/position_pct,
这些字段停留在import_holding_xls快照值,已严重过期。
导致报告显示错误的总资产和仓位。

修复:
- 每次更新个股价后,实时重算 total_market_value = sum(shares*price)
- cash 从 stale_report(Dad截图确认的可用现金)同步
- total_assets = market_value + available_cash + freeze
- 避免价格无变化时不触发更新(timeout fallback保留)
2026-06-29 20:20:24 +08:00
知微 d82de939ff revert(币种统一): 回退CNY转换
港股价格存原币(HKD),不存CNY。
Dad需要在股软里看港币价下单操作。
2026-06-29 17:46:14 +08:00
知微 6aa338ee4d 币种统一全覆盖审计 + 修复
审计范围:price_monitor/per_stock_reassess/stale_push_wlin/stale_detector/system_audit/all-cron-prompts

问题根因:系统三年前设计时港股用HKD存储,最近portfolio
统一CNY但decisions.json没同步。所有API拉价(HKD)和文件
读价(CNY)交叉比较时产生币种错配。

修复:price_monitor每轮同步 + per_stock_reassess/fetch_trend_data
本地API拉价时转CNY + stale_push_wlin
+
2026-06-29 16:58:18 +08:00
知微 1ad2c20493 CNY币种统一修复 — decisions.json所有价格字段统一CNY
问题:港股在decisions.json存HKD、portfolio.json存CNY,
报告交叉读取导致建滔积层板止损判断错位(CNY价vs HKD止损)。
修复:
price_monitor.refresh_data_prices() 每次拉价后,
对港股5位代码的全部价格字段(price/stop_loss/take_profit等)
及嵌套analysis/trigger字段,统一xHK_RATE→CNY
保证所有文件价格口径一致
2026-06-29 16:28:59 +08:00
知微 4bcc51f219 数据新鲜度铁律+违规记录
1. analyst-knowledge-log 追加6/29数据新鲜度违规记录与修复规则
2. 第一行代码铁律:任何分析必须先拉腾讯实时报价
3. 禁止从缓存文件读价格来推操作建议
4. 建滔积层板止损建议是错误的(盈利股不说止损)
5. SOUL未改动(之前说写入SOUL是口头错误)
2026-06-29 15:52:29 +08:00
知微 aa4f013ee5 数据新鲜度防御体系(致命错误防御)
根因:今下午报告用周五多周期缓存(multi_tf_cache)作周一操作建议,
中芯国际H浮盈+10%被错报破止损。

修改:
1. price_monitor 新增 live_prices.json 写入(每2分钟刷新所有实时价)
2. 新增 data_freshness.py — data_freshness check function
3. intraday_health_check price_monitor检测从10min收紧到5min
4. 新增 midday MTF cache refresh (11:00+14:00)
5. cron-report-format pre-flight checklist 新增数据新鲜度检查项

所有报告产出前必须先跑 data_freshness,过期则禁止出操作建议
2026-06-29 15:23:32 +08:00
知微 6a97d93018 现金更正 + 法拉电子清仓记录
截图确认:
- 可用资金 92,664.20(含天添利)
- 冻结 39,481.40
- 总现金 132,145.60
- 总资产 = 持仓市值1,107,670 + 现金132,145.60 = 1,239,815.60

法拉电子 189.20卖出100股已记录
2026-06-29 12:40:50 +08:00
知微 13b4dcbcf0 三维分析框架固化(news-flow-analysis skill)
知识库、日志、报告格式自检清单同步更新。协鑫能科分析完成。
2026-06-28 22:06:24 +08:00
知微 1abb6bb7fd 自选正反自动同步
clean_watchlist.py 双向:
  买入→持仓→移出自选  (已完成)
  清仓→自动加回自选  (新增)
每日09:05 cron自动执行
2026-06-28 00:18:11 +08:00
知微 4477b06f12 Watchlist↔Holdings双向自动迁移
regenerate_all() 每次全量重评时自动:
① 自选股变成持仓(>0股) → 从watchlist移除
② 持仓清仓(股数归零) → 自动加回watchlist(有买入区才加)
Dad要求的双向自动同步,避免手动清理遗忘
2026-06-28 00:15:37 +08:00
知微 91d2957ab0 自选清理+新增策略
1. 13只已持仓自选股移除(watchlist 32→19)
2. 贵州茅台(600519) 买入区1101~1184 止损1068 止盈1300 RR=1.3
3. 中国平安(601318) 买入区43~46.8 止损41.4 止盈58.9 RR=2.0
4. 两股均空头排列,信号=等待企稳
2026-06-28 00:12:31 +08:00
知微 8474effcad feat: --verify-new-cron模式 + MEMORY.md流程
- 新增 --verify-new-cron 参数:创建cron后立即验证文档+注册完整性
- 自动检查cron-catalog.md和pipeline_registry.json
- 缺失时读脚本docstring自动补全
- MEMORY.md更新新增组件流程,强调"趁上下文还热"验证
2026-06-27 02:31:18 +08:00
知微 2912b127e3 docs: 38个cron完全手册
- 全部32个脚本+8个LLM cron的设计意图/数据流/代码结构
- 暂停/废弃说明
- 每个cron关联脚本和调用链
- 自动注册脚本时参考此文档推断数据流

新增cron时应该在此文档追加条目,否则注册表审计只能推断不能确认
2026-06-27 02:26:34 +08:00
知微 c3c1895896 fix: 自动注册读脚本docstring推算数据流,不再是"未知" 2026-06-27 02:22:34 +08:00
知微 d89351fbfe fix: 管道注册表自动修复——新组件自动登记占位
未注册脚本不再只报警——体检自动在pipeline_registry.json中
添加占位记录(verified=false, gap=自动发现待确认)。
Dad不需要做任何事,系统自愈。
2026-06-27 02:19:12 +08:00
知微 10caef1853 fix: 管道审计改为动态读jobs.json,无需手动维护脚本列表 2026-06-27 02:16:46 +08:00
知微 44d0a435a0 fix: 管道注册表自发现+未登记组件报警
- 自动发现:对比重要脚本列表和管道注册表
- 漏登记的不但要手动注册,体检会报"N个组件未注册管道"
- 逼着新增组件时把数据流定义进pipeline_registry.json
2026-06-27 02:08:21 +08:00
知微 120f35671d feat: 数据管道注册表+宏观风险集成+管道完整性审计
1. 新增 data/pipeline_registry.json — 数据管道注册表
   - 记录每条数据流的source→consumer→end_user
   - verified字段标记是否验证通过
   - 新增组件时必须在此注册,否则体检会报未验证

2. 宏观预警集成(修复管道缺口)
   - intraday_health_check: 读macro_risk_state.json,HIGH风险时报警
   - morning_health_check: 新增管道注册表审计项
     读pipeline_registry.json,未验证的管道标为异常

3. 管道完整性自发现机制
   注册表中verified=false的管道会在每日体检中标记
   逼迫新增组件时注册管道,否则睡不好觉
2026-06-27 02:04:22 +08:00
知微 b4f957f80d fix: guardian每日调gateway清理memory, 花token但省心 2026-06-27 01:37:18 +08:00
知微 56249428fe fix: MEMORY.md补全现金铁律+报告规则, guardian支持模式清理 2026-06-27 01:34:48 +08:00
知微 2bda688a30 feat: 记忆守卫每日cron(按SOUL规则自检memory)
- memory_guardian.py: 每日7:00检查MEMORY.md存在/容量/共享memory健康
- 有问题推报告给Dad,没问题SILENT
- 配合SOUL记忆规则,防止profile专属内容污染共享memory
2026-06-27 01:30:27 +08:00
知微 cb779b692c revert: 去掉我误建的macro_index_collector(莫荷的macro_context_collector已覆盖)
爹在XMPP里和我(知微)商量的宏观预警系统就是这3个文件:
  macro_context_collector.py — 宏观新闻采集+指数采集+红绿灯
  divergence_detector.py — 跨市场背离
  macro_signal_consumer.py — 风险信号消费
我不该另建macro_index_collector,现已删除,cron已恢复指向原文件
2026-06-27 01:16:22 +08:00
知微 54915e9b7e feat: 宏观指数采集独立(macro_index_collector) + 莫荷宏观预警系统入库
- 重建 macro_index_collector.py: 原macro_context_collector(index采集)独立
  避免与莫荷的 macro_context_collector(宏观新闻采集)冲突
- 纳入莫荷的宏观预警系统:
  divergence_detector.py — 跨市场背离监测
  macro_context_collector.py — 宏观新闻采集+红绿灯(莫荷版)
  macro_signal_consumer.py — 宏观风险信号消费
- cron修正: 宏观采集-早/午间 → macro_index_collector.py
2026-06-27 01:14:00 +08:00
知微 8b5705beae fix: 私聊回复去重(去掉send_stanza双发) 2026-06-26 23:23:38 +08:00
知微 40d74f89ff feat: xmpp bot最终修复版+skill文档同步
xmpp_agent_core.py 当前工作配置记录:
1. send_presence() — presence = available, 否则私聊进离线
2. 入站消息队列(_inbound_queue) — 崩了不丢, 重试3次
3. 出站队列(_outbound_queue) — 崩了自动重启
4. XMPP心跳检测(xep_0199 ping) — run_filters死后15s内重连
5. 私聊回复双通道: send_message(指定resource) + send_stanza(裸JID)
6. AGENT_MENTION动态解析(群聊@知微识别)
7. session_id保持xmpp-zhiwei-v2不变(不因重启换session)
8. 断线重连2秒延迟(防资源冲突)
2026-06-26 23:17:21 +08:00
知微 ef7c83a3ed feat: 换仓策略整合深套解套+T+2前瞻
- T+2前瞻: 扫描自选股中价格距买入区5%以内的A股
  - 提前评估现金是否足够
  - 不足则评分港股持仓,推荐提前卖出最低评分港股
  - T+2到账后目标股入买区时现金已到位
- 深套股在换仓评估中自然排后(score_future_outlook)
  - 不需专门解套方案,通过换仓机制逐步清理
- 数据治理: holding_strategies去重+中际旭创补策略
  每周六cron自动检查
2026-06-25 21:32:01 +08:00
知微 fa3fc93f25 feat: 数据治理+深套解套方案
- data_governance.py: holding_strategies去重(1642→345)
  - 检查缺失策略的持仓(中际旭创已补)
  - 深套持仓统计
- 中际旭创(300308)技术面策略已生成
  - 止损1287 止盈1453 买入区1297~1350 RR=3.59
- 深套解套方向:
  丘钛科技 -48% → 反弹到9.7卖1/3
  万科企业 -53% → 反弹到2.8卖1/3
  紫金矿业 -36% → 反弹到30.4卖1/3
  比亚迪股份 -27% → 反弹到89.8卖1/3
  中科电气 -32% → 反弹到18.6卖1/3
2026-06-25 21:22:59 +08:00
知微 b63475402e feat: 港股ATR波动率止损校验
- 新增 is_hk_stock(code): 港股判断(5位代码)
- 新增 calc_atr(code): 腾讯API K线→ATR(14)计算
- 港股止损增加ATR校验:止损距现价不得小于1×ATR
  技术位仍为主依据,ATR仅作为港股高波动下的间距底线
  A股不受影响保持原有逻辑
- 不违背"技术位优先,不机械乘系数"原则
2026-06-25 21:11:07 +08:00
知微 dff8e17d68 feat: 止损洗盘检测(60日K线反弹验证)
- 止损触发后检查是否反弹回SL以上3%→标记"洗盘"
- 模塑科技这类: 差两分钱触发+后来反弹=洗盘
- 执行层统一处理: 卖飞/洗盘/临界触发 三类边缘案例
2026-06-25 20:33:34 +08:00
知微 127a0ff021 feat: 复盘每日cron + 卖飞检测(60日最高价)
- 新增 cron: 策略复盘-每日 (20:00, no_agent, deliver=origin)
- 执行层增加60日K线最高价检查
  - 止盈触发后价格继续涨→标记"卖飞(X%)" + tp_too_close
- 德明利这类情况: 综合层=赚钱, 执行层=卖飞(止盈过近)
- 优化K线拉取性能(只对有TP的票拉, curl --max-time 3)
2026-06-25 20:27:53 +08:00
知微 29ec09530a feat: 三层策略复盘框架
信号层/执行层/综合层独立评估,输出每层判断+整体评级。

当前结果(38条):
  正确 6 | 错误 1 | ⚠️部分 20 | 待定 11
  信号层: 方向看反1次
  执行层: 止损过紧1次

大部分待定是因为策略太新(<7天),需要时间积累数据才能做出有效评估。
2026-06-25 20:04:44 +08:00
知微 b053103377 feat: 策略复盘闭环 Phase1
- 新增 scripts/strategy_review.py: 遍历所有active策略
  - 腾讯API实时价对比止损/止盈/入场点
  - 分类: correct/wrong/partial/pending
  - 失败模式归因: 止损过紧/入场过早/止盈过远等
  - 写入 accuracy_stats 表(首条真实数据)
- 新增 docs/strategy-review-loop.md: 完整闭环设计文档
- 含失败模式→修复方向映射表

Phase1 结果: 38条策略, 94.7%准确率(19条待定), 1条止损过紧
2026-06-25 19:58:00 +08:00