Commit Graph
57 Commits
Author SHA1 Message Date
hmo a3ef3b570f feat: 严谨技术指标(RSI/MACD/量能/背离)_calc_ta_score+_calc_scores 2026-07-28 13:58:02 +08:00
hmo b2636a8162 fix: RR<2自动降级买入→关注+prompt加最近阻力止盈+全量重评57只 2026-07-28 12:38:16 +08:00
hmo c572bbc3ef feat: 策略追踪评估系统(版本化+理论盈亏+浮盈/浮亏+自动SL/TP检测+30s刷新) 2026-07-27 19:03:05 +08:00
hmo 12e3abc57d fix: write_holdings_batch同步holding_strategies(新持仓即时出现在盯盘) 2026-07-27 16:22:29 +08:00
hmo 27d8d997d4 feat: 五维推荐评分 + 优中选优Top5 + exec gate评分驱动 + 自动补tag + XMPP完整策略 2026-07-27 14:03:09 +08:00
hmo 844f556545 feat: 买入区间中值突出显示(金色加粗,上下限之间) + XMPP同步 + no-cache 2026-07-27 13:28:04 +08:00
hmo 5d043627ff feat: 买入区间加中值显示(XMPP+盯盘) 2026-07-27 12:24:11 +08:00
hmo 58d7d34cf1 fix(authority): 系统仓位含'系统按'永久保护(修复reassessed_at=None时权威失效) 2026-07-27 11:38:01 +08:00
hmo af43da2ff3 fix(authority): position_advice也纳入参数权威保护 2026-07-27 11:23:48 +08:00
hmo 46ca7bf404 fix(tag): RR检查前置于tag打标——RR<2.0不打current_recommend
- 原顺序:打tag→查RR→RR<2.0拒绝入队但tag已落盯盘→盯盘≠XMPP
- 修正: 先查RR→RR<2.0直接跳过不打tag→盯盘和XMPP永远一致
2026-07-27 11:15:50 +08:00
hmo f723664ca3 fix(authority): 策略参数权威保护——技术路径不得覆写12维的Zone/SL/TP
- 信号权威已有(防信号降级),但参数(区间/止损/止盈)一直裸奔
- price_monitor每2分钟写一次,参数一变RR就变→盯盘vsXMPP不一致
- 新鮮(<20h)12维分析的entry_low/entry_high/stop_loss/take_profit受保护
2026-07-27 11:06:17 +08:00
hmo 727467f1af fix(position): 仓位模糊时系统按RR公式自动计算,不丢弃
- 老爸: 不明确就让它变得明确,不是丢弃
- 公式: RR1.5-3=>8%,3-5=>12%,5+=>15% ×成长系数0.85,钳位5-20%
- 写入标记(系统按RRx.x自动计算,见原建议仓位)
2026-07-27 11:00:39 +08:00
hmo f3de4fb7fc fix(authority): 卖出/止盈也受20h权威保护(技术路径不能降级卖出→持有)
- 原代码只保护买入,价格监控每2分钟把12维的卖出信号写回持有
- 盯盘显示信号=持有但tag=current_recommend→自相矛盾
2026-07-27 10:29:10 +08:00
hmo b5f57b6eec fix(flush): 盘前分析在盘中推送前触发per_stock_reassess(用实时数据重评)
- 检测分析时间在开盘前(08:00-09:29)且当前已开盘→跑per_stock_reassess刷新
- 重评成功→用实时数据发digest(非过期分析)
- 重评失败→标记盘前分析警告(兜底)
2026-07-27 10:17:47 +08:00
hmo d27287f49b fix(digest): 信号从非动作级转入动作级时强制入队
- 原条件只检查tag新旧(持有→卖出时tag已遗留current_recommend→不入队)
- 新加: 旧信号非动作+新信号动作→入队(即使tag不变)
- 补充触发00700/300308/688639的历史卖出推送
2026-07-27 10:08:11 +08:00
hmo 0708a5ffaa fix(rr): 卖出/止盈信号不计算RR(RR是买入区间的盈亏比,对卖无意义)
- recompute_rr检测到卖出信号直接写0返回
- 前端RR=0时显示'—'(已有逻辑)
- 补充: 卖出/止盈/关注/观望等非买入信号RR不显示
2026-07-27 10:02:40 +08:00
hmo 5d08353d44 fix(rr): 三值RR共用统一上方目标 根治中值>范围上下界的自相矛盾
- 上方目标基于区间中值统一定(非每个x单独算),确保rr_low>rr_mid>rr_high恒成立
- digest三值范围排序(小~大)显示,数学自洽
- 弹窗已用下沿/上沿语义标签,数值颠倒不影响理解
2026-07-27 09:51:16 +08:00
hmo a6ad0f6f9e fix: negation scan covers position-advice line + exec requires explicit position pct 2026-07-24 13:51:58 +08:00
hmo 185f8f3b58 fix: advice-negation downgrades buy signal to guanzhu 2026-07-24 13:43:36 +08:00
hmo fc587f1252 feat: RR按最近上方阻力结算(老爸:前高挡中间时止盈是放空炮)
- 上方目标=min(止盈, 20日新高若高于基准价)
- 601988案例: 止盈6.3但前高6.11挡中间, RR从3.44(虚)→1.33(实)
- 突破形态(现价已在20日新高)不惩罚,用止盈全值
- 三值RR同步体现入场价敏感度
2026-07-24 13:18:25 +08:00
hmo ed842bc85d fix: digest与盯盘推荐区同步(老爸:推荐和XMPP同步)
- flush_rec_digest先回库校验快照: tag撤销/信号降级为弱信号/RR<2.0的条目丢弃
  (队列是打标瞬间快照,之后状态变化不再误推)
- digest预算门槛1.5→2.0(与盯盘exec一致)
- digest每条加💰可执行/排队徽章(与盯盘术语一致)
- buys/queued初始化防NameError
2026-07-24 12:37:52 +08:00
hmo 481acfb18f feat: 优中选优机制(老爸:阈值太低+存量清洗+直接删)
- enqueue_recommend加严: RR>=2.0+仓位必须明确%+买入区有效+不追高(防今早RR1.49/仓位观望/区缺失的垃圾digest)
- promote: score>=7(原4=91%通过率)+ST排除+RR>=2.0
- watchlist_auto_exit: 新增死水3连退+RR<1.5退; 退出方式改为直接DELETE(非inactive)
- 盯盘可执行门槛1.5→2.0
2026-07-24 11:00:41 +08:00
hmo 91b26361e9 refactor: write_holding_strategy改UPSERT,DELETE+INSERT模式退役
- 只写自有列; rr_low/rr_high(recompute_rr拥有)/superseded_at/created_at不在写集→天然保留
- 未来新增计算列自动免疫(老爸: 新增计算列为什么要用delete+insert?不该用update吗?)
- 消除DELETE→INSERT崩溃窗口和created_at被重置副作用
2026-07-23 14:31:18 +08:00
hmo 12f7f87a2e fix: 弱信号不可执行+rr_low/rr_high防DELETE+INSERT冲零
- /api/watch: 信号不充分/关注/弱势持有/观望/持有 的推荐永远排队不徽章可执行
  (tag是LLM行动信号时遗留,技术路径降级信号后无权摘tag,徽章层自卡信号)
- write_holding_strategy: INSERT补rr_low/rr_high列,调用方不提供时保留旧值
  (盘中per_stock技术路径每次DELETE+INSERT把两个计算列冲成0,昨晚回填全灭)
2026-07-23 14:11:22 +08:00
hmo 0f2c6555df fix(action): 12维操作建议写入action+技术路径action权限保护+RR区间显示修复
- batch parse_response提取【操作建议】→ save_result写action(根治: action字段只有技术路径写,
  旧'盈亏比不足不建议买入'与12维买入分析同框矛盾)
- write_holding_strategy: 技术路径不得覆盖新鲜(<20h)12维 action(与信号权威同级)
- 前端: rr_high>0即显示低~高区间(rr_low=0是合法信息: 区下沿=止损贴底即损)
- server: SEND_FILE_MAX_AGE_DEFAULT=0 禁静态缓存
2026-07-22 23:16:43 +08:00
hmo f7f7fe3ca0 fix(parser): 节标题锚定解析+脏区间清洗+三值RR
- parse_response: 只认行首【买入区间】【综合结论】等节行(原先取首个关键词行,
  命中修改点段落引用的旧脏值→95~99区间反复写回,17只股票受害);
  信号锚定】后首词,防'观望(不建议买入)'误判; 【买入区间】无→显式清空
- save_result: 区间-现价距离门禁(eh<0.5px或el>1.5px→拒写并清空,不再保留原值养脏)
- recompute_rr: 三值RR(rr_low/rr_ratio中/rr_high,分别对应区下沿/中值/上沿入场)
- 迁移: holding_strategies+rr_low/rr_high列; digest显示RR中(低~高); watch API+前端展示
2026-07-22 22:59:18 +08:00
hmo 56e1326569 fix(rec): RR基准价改用买入区中值(老爸决策)
- 区/损/盈三数同出一份分析, 自洽闭环; 不随价格波动; 脏区间自动算出RR=0现形
- 区间缺失才兜底现价
2026-07-22 20:49:59 +08:00
hmo 9bcf3e5e63 fix(rec): RR系统自算落库+卖出不占买入预算+RR>=1.5门槛
- mofin_db.recompute_rr: 用现价+止损止盈重算RR, sync_recommend_tag入口统一调用
  (根治: prompt没让LLM输出RR, parse不解析, save不落库 → rr_ratio永远0)
- flush_rec_digest: 卖出/止盈单独一组排最前, 不占现金预算; 买入加RR>=1.5可执行门槛
- server.py/api/watch: 卖出永远可执行; 买入RR>=1.5才给可执行徽章
  (根治: 卖出默认吃8%预算被排队, RR=0的5%仓位反而挤进预算)
2026-07-22 20:31:47 +08:00
hmo b92a8cb666 fix: 换仓建议f-string嵌套引号语法错误(已部署版本必现,紧急修复) 2026-07-22 11:02:43 +08:00
hmo 294133d605 feat(推荐): 换仓策略——现金不足时自动给出减弱势持仓换入排队推荐的方案 2026-07-22 11:01:02 +08:00
hmo 1910cef98b fix: 空信号清除tag + 卖出/止盈仅持仓股算动作信号 2026-07-22 10:48:49 +08:00
hmo c91d4c33f0 fix: 信号-分析对齐(reconcile以已存分析为唯一事实源) + prompt持仓上下文(已持有/未持有分开给建议,禁止两头写) 2026-07-22 10:29:23 +08:00
hmo f42dc9381b feat(推荐): enqueue校验(非动作信号不入队)+头部推荐附12维全文+现金预算操盘建议 2026-07-22 10:12:42 +08:00
hmo e633641686 fix: tag只许LLM路径写(防技术路径抖动幽灵化) + 推荐通知改批量摘要(防09:55式14连发轰炸) 2026-07-22 10:05:54 +08:00
hmo 8c2226e2b4 feat: 信号权威层级+推荐转场推送统一+🔔分级修正
1. 权威层级: 新鲜(<20h)12维动作级信号, 技术路径(regenerate_all/
   price_monitor)无权降级为关注/信号不充分/持有——只有LLM路径或
   风险信号(卖出/止盈)可覆盖。根治推荐区'出现-消失'抖动
2. 推荐转场推送统一收拢到 mofin_db.push_recommend_alert:
   tag新转为current_recommend时推送(全路径), 含质量门禁;
   移除batch_reassess内联推送(防双重告警)
3. price_monitor 🔔分级: 只有持仓股的卖出/止盈才ACTION直推,
   买入/加仓机会一律进INFO摘要(老爸: 这种消息不要再发了)
2026-07-22 09:48:58 +08:00
hmo 9914ff9457 feat(盯盘): 推荐操作区域置顶独立 + tag与XMPP动作级信号自动同步
- mofin_db: write_holding_strategy 内置tag同步语义——动作级信号
  (买入/可买入/可加仓/卖出/止盈)→current_recommend; 信号降级→
  清除current_recommend; active_manual人工标记永不被自动流覆盖/清除
- 新增 sync_recommend_tag() 供裸SQL调用方
- batch_reassess.save_result / per_stock stage-2 调用同步
- 盯盘Tab: '重点推荐'更名'推荐操作', 区域独立琥珀色视觉, 置顶
同步语义: XMPP买入信号(ACTION级告警)的个股=推荐操作区域个股,
信号消失(重评降级)时区域同步消失
2026-07-21 23:31:57 +08:00
知微 a245c8b4dd fix: price_monitor crash when shares is string + type guard in write_holding_strategy
Root cause: holding_strategies.shares field got set to literal string
'write_holding_strategy' for 6 records, causing TypeError at
price_monitor.py line 611 ('>' not supported between str and int).

Fixes:
1. price_monitor.py: Replace set comprehension with safe loop that
   checks isinstance before comparison. Non-numeric shares treated
   as holdings for safety.
2. mofin_db.py write_holding_strategy: Add type guard that resets
   non-numeric shares to 0 with warning.
3. Data fix: Updated 5 corrupted holding_strategies records from
   holdings table (300035/300308/300750/518880/00700).
   Set 002594 (watchlist) shares=0.
2026-07-21 13:47:52 +08:00
hmo de9927a627 重评核心重构:ds-v4-pro + 原策略全文 + strategy_history + 前端三改造
后端(重评管线):
- 新增 llm_client.py 共享客户端: REASSESS_MODEL=deepseek-v4-pro 单点,
  gateway预检(fail-fast), 150s超时+1次重试, 永不抛异常
- batch_reassess/per_stock_reassess: curl/urllib -> call_llm,
  prompt传入原策略全文+当前参数+最近3条变更, 输出 维持/修改判断+
  修改点理由+最终新策略, max_tokens 4096
- mofin_db: 新增 strategy_history 表 + snapshot_strategy_history(),
  write_holding_strategy 覆写前自动快照(保留20条/code)
- mofin_db: holding_strategies 补 tag 列迁移 + 写入保留
  (tag缺席=保留旧值, 显式传''=允许清除), 修复推荐标签被静默丢弃
- mo_data.read_decisions: SELECT 补 tag
- stale_detector/promote_candidates: 子进程超时 240/60 -> 480s

前端:
- 移除 报告Tab -> mofin_health 全部流程/Cron 表加 最后十次 列
  (modal列表->详情), /api/reports 支持 cron+script 多路匹配
  (jobs.json name->id 解析 + 文件名/标题子串兜底)
- 移除 决策库Tab
- 盯盘Tab 重构: 全部持仓+自选, sort_group 分组(推荐/持仓/自选),
  推荐行琥珀高亮+🔥badge+行内策略, 新增 操作策略 列查看
  最近3次完整策略(/api/strategy_history/<code>, 表缺失时降级当前行)
- 提示词Tab: registry.py 数据路径改回 /home/hmo/MoFin/data/prompts
  (红线: 数据只在规范数据根), 空态提示初始化命令
2026-07-20 23:51:24 +08:00
知微 4383c384be chore: deployed JSON retirement 2026-07-20 18:10:35 +08:00
知微 59e94d135c fix: 盘中脚本统一使用get_conn()替代raw sqlite3.connect防DB死锁
- mofin_health.py, cron_health_monitor.py, intraday_health_check.py,
  self_todo_executor.py: 替换raw sqlite3.connect() → get_conn()
  统一使用WAL模式+busy_timeout=30s连接
- mofin_db.py: get_conn()每次新建连接时WAL checkpoint
  防止被kill进程残留WAL导致后续全部卡死
- 并发测试验证: 3x price_monitor + 3x mofin_health同时运行
  6/6通过,WAL仅32bytes

关联问题: 2026-07-14 SQLite写锁死锁根因诊断
2026-07-14 10:56:38 +08:00
知微 dbff6b59f9 fix: write_holding_strategy保留full_analysis+reassessed_at防止被清空 2026-07-10 09:53:15 +08:00
知微 2762ddf3ae fix: DB路径大面积修复——mofin_db/server/technical_analysis/strategy_tree等脚本的Path(__file__).parent/data错误指向scripts/data而非data/ 导致读写分离
- 量价分析: full_analysis输出volume_deep+成交量存储在price_history.json
- FK约束移除: holding_strategies外键->holdings阻止自选股写入
- #000850 重评已写入(止损3.74/止盈4.06/RR1.67)含量价信号
2026-07-08 12:34:39 +08:00
知微 3e2f0315eb 完全DB版: 移除JSON写入/回退,所有操作直走SQLite
- price_monitor: 完全DB版,不再读写 portfolio.json/watchlist.json
  - holdings代码从DB读取(SELECT code FROM holdings WHERE is_active=1)
  - 价格写入DB holdings表 + portfolio_summary + live_prices
  - 3次重试+指数退避防锁
- server.py: 移除API的JSON回退,DB失败直接返回500
- mofin_db.py: execute_with_retry/commit_with_retry + 15s timeout + busy_timeout
- mo_data.py: 已是纯DB模式(无JSON fallback)

这是推进的完全DB化。下一步可删除 data/portfolio.json data/decisions.json data/watchlist.json 等遗留JSON。
2026-07-06 12:08:08 +08:00
知微 e185b4e4dc feat: DB-first architecture with lock-safe writes
- price_monitor: writes live prices to both JSON and mofin.db (holdings + live_prices + portfolio_summary)
- mofin_db: added execute_with_retry/commit_with_retry with exponential backoff on 'database is locked'
- mofin_db: increased timeout 5s->15s, added PRAGMA busy_timeout=15000
- price_monitor retry loop: fixed break-before-if-ok bug (was not retrying on write failure)
- DB connection: WAL mode + retry decorator for all write operations
- cash sync: preserves DB authoritative cash (JSON cash not pushed to DB)

This is the DB-first version. JSON writes remain for dashboard compatibility.
Next step: remove JSON writes entirely for full DB-only architecture.
2026-07-06 12:02:11 +08:00
知微 320353348d feat: add todos table to mofin_db + DB_PATH fix for self_todo_executor 2026-07-05 01:37:40 +08:00
知微 bb9b3922c9 migrate: last 4 JSON files — live_prices, market, mtf_cache, capital_flow → DB 2026-07-03 13:44:10 +08:00
知微 b3bedc8024 migrate: remove JSON, DB-only — mo_data, server, scripts, prompts (27 files) 2026-07-03 12:12:05 +08:00
知微 b1a79d962c fix: write_holding_strategy DELETE+INSERT (no UNIQUE constraint on code) 2026-07-03 10:46:14 +08:00
知微 7c0e85af28 硬性策略质量门禁 validate_strategy()
新增 STRATEGY_QUALITY_GATES 检查清单(9条红线):
CRITICAL: 止损/止盈存在+>0, 买入区下沿<上沿
HIGH: 止损≤买入区, 买入推荐含RR≥1.5, 港股标currency=HKD
MEDIUM: signal短词, tech_snapshot含技术位

enforce_strategy_quality() 插在写入链的两处:
1. reassess_with_context() return前 → 单只重评必过
2. regenerate_all() for d in decisions: 写DB前 → 批量重评必过

不过的:status=review_needed, signal降级→信号不充分
不会写进DB/JSON,除非修复了CRITICAL问题
2026-07-02 13:46:53 +08:00
知微 6305204c7a feat: mo_data.py unified read layer (DB-first, JSON fallback) + cash_log table + batch JSON→DB migration (16 files) 2026-07-01 23:45:30 +08:00