diff --git a/data/price_history.json b/data/price_history.json index ef626a12..b9d36bd6 100644 --- a/data/price_history.json +++ b/data/price_history.json @@ -1547,6 +1547,14 @@ "close": 596.16, "volume": 1996.0, "amount": 11899.0 + }, + { + "date": "2026-07-20", + "high": 500.0, + "low": 482.89, + "close": 482.89, + "volume": 177602.0, + "amount": 859692.0 } ], "601318": [ diff --git a/static/mofin_health.json b/static/mofin_health.json index 9960566d..5c13d547 100644 --- a/static/mofin_health.json +++ b/static/mofin_health.json @@ -1,5 +1,5 @@ { - "generated_at": "2026-07-20 20:45:45", + "generated_at": "2026-07-20 21:15:58", "feature_tree": { "label": "MoFin 系统", "status": "ok", @@ -151,8 +151,8 @@ "name": "策略评估-每周", "script": "strategy_evaluator.py", "schedule": "0 21 * * 6", - "status": "error", - "last_run": "2026-07-18T21:00", + "status": "ok", + "last_run": "2026-07-20T20:45", "type": "no_agent", "profile": "position-analyst" }, @@ -218,7 +218,7 @@ "script": "prune_branches.py", "schedule": "0 21 * * 1-5", "status": "ok", - "last_run": "2026-07-17T21:00", + "last_run": "2026-07-20T21:00", "type": "no_agent", "profile": "position-analyst" } @@ -227,14 +227,14 @@ { "label": "自选股自动重评-周末 (stale_detector.py)", "desc": "周末批量重评自选股策略", - "status": "error", + "status": "ok", "pipes": [ { "name": "自选股自动重评-周末", "script": "stale_detector.py", "schedule": "30 10 * * 0,6", - "status": "error", - "last_run": "2026-07-19T10:30", + "status": "ok", + "last_run": "2026-07-20T20:47", "type": "no_agent", "profile": "position-analyst" } @@ -476,8 +476,8 @@ "name": "跨市场背离检测-周末", "script": "divergence_detector.py", "schedule": "30 8-16/2 * * 0,6", - "status": "error", - "last_run": "2026-07-19T16:30", + "status": "ok", + "last_run": "2026-07-20T20:45", "type": "no_agent", "profile": "position-analyst" } @@ -537,7 +537,7 @@ "script": "mofin_health.py", "schedule": "*/15 9-16,20-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:30", + "last_run": "2026-07-20T21:01", "type": "no_agent", "profile": "position-analyst" } @@ -578,14 +578,14 @@ { "label": "数据治理-每周 (data_governance.py)", "desc": "每周数据治理", - "status": "error", + "status": "ok", "pipes": [ { "name": "数据治理-每周", "script": "data_governance.py", "schedule": "0 10 * * 6", - "status": "error", - "last_run": "2026-07-18T10:00", + "status": "ok", + "last_run": "2026-07-20T20:45", "type": "no_agent", "profile": "position-analyst" } @@ -624,7 +624,7 @@ "script": "self_todo_executor.py", "schedule": "*/10 8-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:40", + "last_run": "2026-07-20T21:10", "type": "no_agent", "profile": "position-analyst" } @@ -671,8 +671,8 @@ "name": "建议对账-每周", "script": "advice_reconciliation.py", "schedule": "0 20 * * 6", - "status": "error", - "last_run": "2026-07-18T20:00", + "status": "ok", + "last_run": "2026-07-20T20:45", "type": "no_agent", "profile": "position-analyst" } @@ -885,7 +885,7 @@ "script": "fix_gateway_port.py", "schedule": "every 10m", "status": "ok", - "last_run": "2026-07-20T20:36", + "last_run": "2026-07-20T21:13", "type": "no_agent", "profile": "position-analyst" } @@ -917,7 +917,7 @@ "script": "functional_health_check.py", "schedule": "*/15 9-16,20-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:30", + "last_run": "2026-07-20T21:00", "type": "no_agent", "profile": "position-analyst" } @@ -933,7 +933,7 @@ "script": "self_repair.py", "schedule": "*/30 9-16,20-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:30", + "last_run": "2026-07-20T21:00", "type": "no_agent", "profile": "position-analyst" } @@ -949,7 +949,7 @@ "script": "meta_watchdog.py", "schedule": "5 * * * *", "status": "ok", - "last_run": "2026-07-20T20:05", + "last_run": "2026-07-20T21:05", "type": "no_agent", "profile": "position-analyst" } @@ -980,14 +980,14 @@ { "label": "state.db真空整理-每周 (vacuum_state_db.py)", "desc": "每周DB真空整理", - "status": "error", + "status": "ok", "pipes": [ { "name": "state.db真空整理-每周", "script": "vacuum_state_db.py", "schedule": "0 3 * * 6", - "status": "error", - "last_run": "2026-07-18T03:00", + "status": "ok", + "last_run": "2026-07-20T20:45", "type": "no_agent", "profile": "position-analyst" } @@ -1081,15 +1081,15 @@ "rows": 185, "readers": [ "promote_candidates", + "mofin_db", "candidate_filter", - "accumulation_scanner", - "mofin_db" + "accumulation_scanner" ], "writers": [ + "market_scanner", "promote_candidates", "candidate_filter", - "accumulation_scanner", - "market_scanner" + "accumulation_scanner" ], "has_input": true, "has_output": true, @@ -1113,13 +1113,13 @@ "rows": 1, "readers": [ "per_stock_reassess", + "mofin_db", "merge_third_db", - "batch_reassess", - "mofin_db" + "batch_reassess" ], "writers": [ - "merge_third_db", - "mofin_db" + "mofin_db", + "merge_third_db" ], "has_input": true, "has_output": true, @@ -1141,12 +1141,12 @@ "desc": "资金变动记录", "rows": 20, "readers": [ - "prepare_report_data", - "mofin_db" + "mofin_db", + "prepare_report_data" ], "writers": [ - "mo_data", - "mofin_db" + "mofin_db", + "mo_data" ], "has_input": true, "has_output": true, @@ -1195,25 +1195,25 @@ "desc": "每只股票的完整策略参数", "rows": 227, "readers": [ - "promote_candidates", - "candidate_filter", - "pre-flight-check", - "strategy_lifecycle", - "stale_push_wlin", - "verify_300308", - "mofin_collect", + "run_all_tests", + "system_audit", "capital_flow_collector", + "verify_300308", + "strategy_lifecycle", + "watchlist_auto_exit", + "mofin_db", + "verify_reassess_pipeline", "data_governance", - "per_stock_reassess" + "promote_candidates" ], "writers": [ - "promote_candidates", "mofin_db", - "sync_decisions_to_db", - "batch_reassess", - "data_governance", "per_stock_reassess", - "watchlist_auto_exit" + "data_governance", + "promote_candidates", + "batch_reassess", + "watchlist_auto_exit", + "sync_decisions_to_db" ], "has_input": true, "has_output": true, @@ -1241,21 +1241,21 @@ "desc": "当前持仓(权威源)", "rows": 14, "readers": [ - "prepare_report_data", - "candidate_filter", - "strategy_lifecycle", - "trend_detector", - "stale_push_wlin", - "refresh_mtf_cache", - "mofin_collect", - "mo_alphasift_bridge", + "run_all_tests", + "xiaoguo_signal_consumer", + "system_audit", "capital_flow_collector", - "xiaoguo_signal_consumer" + "strategy_lifecycle", + "mofin_db", + "server", + "trend_detector", + "prepare_report_data", + "mofin_collect" ], "writers": [ - "price_monitor", "mofin_db", - "import_holding_xls" + "import_holding_xls", + "price_monitor" ], "has_input": true, "has_output": true, @@ -1283,19 +1283,19 @@ "desc": "所有持仓+自选最新实时价", "rows": 232, "readers": [ - "candidate_filter", - "cron_health_monitor", "mofin_db", + "stale_push_wlin", "verify_reassess_pipeline", - "mo_data", - "generate_report", + "candidate_filter", "system_audit", - "stale_push_wlin" + "cron_health_monitor", + "mo_data", + "generate_report" ], "writers": [ + "mofin_db", "mo_data", - "price_monitor", - "mofin_db" + "price_monitor" ], "has_input": true, "has_output": true, @@ -1322,13 +1322,13 @@ "rows": 81, "readers": [ "divergence_detector", - "strategy_tree", - "stock_profile", - "batch_reassess", "xiaoguo_signal_consumer", - "per_stock_reassess", - "strategy_lifecycle", "system_audit", + "stock_profile", + "strategy_tree", + "per_stock_reassess", + "batch_reassess", + "strategy_lifecycle", "stale_push_wlin" ], "writers": [ @@ -1384,18 +1384,18 @@ "desc": "大盘指数快照(每10分)", "rows": 989, "readers": [ - "prepare_report_data", "mofin_db", - "market_scanner", - "system_audit", "merge_third_db", + "system_audit", "trend_detector", + "prepare_report_data", "mofin_query", - "market_screener" + "market_screener", + "market_scanner" ], "writers": [ - "merge_third_db", - "mofin_db" + "mofin_db", + "merge_third_db" ], "has_input": true, "has_output": true, @@ -1421,8 +1421,8 @@ "rows": 64, "readers": [ "multi_timeframe", - "technical_analysis", - "mofin_db" + "mofin_db", + "technical_analysis" ], "writers": [ "multi_timeframe", @@ -1451,18 +1451,18 @@ "desc": "总资产/现金/仓位汇总", "rows": 1, "readers": [ - "prepare_report_data", "mofin_db", "mo_data", + "prepare_report_data", "preflight_verify", + "price_monitor", "check_db_state", - "import_holding_xls", - "price_monitor" + "import_holding_xls" ], "writers": [ - "price_monitor", "mofin_db", - "import_holding_xls" + "import_holding_xls", + "price_monitor" ], "has_input": true, "has_output": true, @@ -1489,21 +1489,21 @@ "desc": "价格区间突破事件日志", "rows": 6353, "readers": [ - "test_dual_write", - "mofin_db", - "test_db_write", "backfill_price_events", - "check_price_events", + "mofin_db", "test_db_only", - "test_raw_insert" + "test_dual_write", + "test_raw_insert", + "test_db_write", + "check_price_events" ], "writers": [ - "test_dual_write", - "mofin_db", - "test_db_write", "backfill_price_events", + "mofin_db", + "test_dual_write", "test_db_only", - "test_raw_insert" + "test_raw_insert", + "test_db_write" ], "has_input": true, "has_output": true, @@ -1525,14 +1525,14 @@ "desc": "行业信号(趋势检测产出)", "rows": 653, "readers": [ - "xiaoguo_news_processor", - "server", "trend_detector", - "mofin_news" + "xiaoguo_news_processor", + "mofin_news", + "server" ], "writers": [ - "xiaoguo_news_processor", "trend_detector", + "xiaoguo_news_processor", "mofin_news" ], "has_input": true, @@ -1561,16 +1561,16 @@ "rows": 68408, "readers": [ "mofin_db", - "market_scanner", - "strategy_lifecycle", + "inspect_third_db", "merge_third_db", "trend_detector", - "inspect_third_db", - "market_screener" + "strategy_lifecycle", + "market_screener", + "market_scanner" ], "writers": [ - "merge_third_db", - "mofin_db" + "mofin_db", + "merge_third_db" ], "has_input": true, "has_output": true, @@ -1596,21 +1596,21 @@ "rows": 1287, "readers": [ "intraday_health_check", - "server", - "batch_reassess", "xiaoguo_signal_consumer", - "per_stock_reassess", + "server", "system_audit", + "per_stock_reassess", + "batch_reassess", "macro_signal_consumer" ], "writers": [ "divergence_detector", + "xiaoguo_signal_consumer", "mofin_news", "xiaoguo_news_processor", "macro_context_collector", - "xiaoguo_signal_consumer", - "xiaoguo_scanner", - "macro_signal_consumer" + "macro_signal_consumer", + "xiaoguo_scanner" ], "has_input": true, "has_output": true, @@ -1665,7 +1665,7 @@ { "name": "stock_daily", "desc": "日线行情", - "rows": 11963, + "rows": 11968, "readers": [ "mofin_db" ], @@ -1707,7 +1707,7 @@ { "name": "stock_monthly", "desc": "月线行情", - "rows": 1094, + "rows": 1096, "readers": [ "multi_timeframe" ], @@ -1726,12 +1726,12 @@ "desc": "股票行业映射", "rows": 64, "readers": [ - "mofin_news", "mofin_db", - "xiaoguo_news_processor", + "trend_detector", "per_stock_reassess", - "strategy_lifecycle", - "trend_detector" + "mofin_news", + "xiaoguo_news_processor", + "strategy_lifecycle" ], "writers": [ "mofin_db" @@ -1757,7 +1757,7 @@ { "name": "stock_weekly", "desc": "周线行情", - "rows": 2078, + "rows": 2082, "readers": [ "multi_timeframe" ], @@ -1776,19 +1776,19 @@ "desc": "全量股票代码", "rows": 5575, "readers": [ - "mofin_news", "mofin_db", - "xiaoguo_news_processor", - "accumulation_scanner", "trend_detector", "import_full_stocks", + "mofin_news", + "accumulation_scanner", + "xiaoguo_news_processor", "check_stocks_table" ], "writers": [ - "price_monitor", - "import_full_stocks", + "backfill_price_events", "mofin_db", - "backfill_price_events" + "import_full_stocks", + "price_monitor" ], "has_input": true, "has_output": true, @@ -1813,8 +1813,8 @@ "desc": "策略重评历史记录", "rows": 217, "readers": [ - "verify_reassess_pipeline", - "mofin_db" + "mofin_db", + "verify_reassess_pipeline" ], "writers": [ "mofin_collect" @@ -1869,20 +1869,20 @@ "rows": 96, "readers": [ "intraday_health_check", - "strategy-staleness-check", "merge_third_db", - "self_todo_executor", - "morning_health_check" + "strategy-staleness-check", + "morning_health_check", + "self_todo_executor" ], "writers": [ "intraday_health_check", - "cron_health_monitor", - "mofin_collect", + "merge_third_db", "strategy-staleness-check", "preflight_verify", - "merge_third_db", + "morning_health_check", "self_todo_executor", - "morning_health_check" + "mofin_collect", + "cron_health_monitor" ], "has_input": true, "has_output": true, @@ -1929,20 +1929,20 @@ "desc": "自选股列表", "rows": 69, "readers": [ - "refresh_mtf_cache", - "mofin_collect", "mofin_db", - "mo_alphasift_bridge", - "stock_quote", "run_all_tests", - "per_stock_reassess", - "xiaoguo_signal_consumer", "xiaoguo_scanner", - "trend_detector" + "xiaoguo_signal_consumer", + "trend_detector", + "per_stock_reassess", + "mo_alphasift_bridge", + "price_monitor", + "mofin_collect", + "refresh_mtf_cache" ], "writers": [ - "per_stock_reassess", - "mofin_db" + "mofin_db", + "per_stock_reassess" ], "has_input": true, "has_output": true, @@ -1968,8 +1968,8 @@ "desc": "小果扫描跟踪", "rows": 527, "readers": [ - "server", - "xiaoguo_scanner" + "xiaoguo_scanner", + "server" ], "writers": [ "xiaoguo_scanner" @@ -2108,12 +2108,12 @@ "size_kb": 89.3, "readers": [ "analyze_health", - "verify_health_json", "verify_self_check_section", + "verify_health_json", "verify_deployment" ], "writers": [], - "last_modified": "07-20 20:30", + "last_modified": "07-20 21:01", "warn": false, "migrated_to_db": null }, @@ -2152,10 +2152,10 @@ { "name": "price_history.json", "desc": "(已迁移到DB表 price_events,此为遗留文件)", - "size_kb": 33.7, + "size_kb": 34.0, "readers": [], "writers": [], - "last_modified": "07-20 18:42", + "last_modified": "07-20 21:14", "warn": false, "migrated_to_db": "price_events" }, @@ -2245,7 +2245,7 @@ "script": "fix_gateway_port.py", "schedule": "every 10m", "status": "ok", - "last_run": "2026-07-20T20:36:59", + "last_run": "2026-07-20T21:13:56", "profile": "position-analyst" }, { @@ -2254,7 +2254,7 @@ "script": "self_repair.py", "schedule": "*/30 9-16,20-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:30:36", + "last_run": "2026-07-20T21:00:53", "profile": "position-analyst" }, { @@ -2272,7 +2272,7 @@ "script": "bot_monitor.sh", "schedule": "every 60m", "status": "ok", - "last_run": "2026-07-20T20:04:48", + "last_run": "2026-07-20T21:04:56", "profile": "default" }, { @@ -2299,7 +2299,7 @@ "script": null, "schedule": "0 * * * *", "status": "ok", - "last_run": "2026-07-20T20:13:48", + "last_run": "2026-07-20T21:07:18", "profile": "default" }, { @@ -2307,8 +2307,8 @@ "type": "no_agent", "script": "vacuum_state_db.py", "schedule": "0 3 * * 6", - "status": "error", - "last_run": "2026-07-18T03:00:55", + "status": "ok", + "last_run": "2026-07-20T20:45:49", "profile": "position-analyst" }, { @@ -2362,7 +2362,7 @@ "script": "mofin_health.py", "schedule": "*/15 9-16,20-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:30:46", + "last_run": "2026-07-20T21:01:01", "profile": "position-analyst" }, { @@ -2371,7 +2371,7 @@ "script": "meta_watchdog.py", "schedule": "5 * * * *", "status": "ok", - "last_run": "2026-07-20T20:05:28", + "last_run": "2026-07-20T21:05:54", "profile": "position-analyst" }, { @@ -2389,7 +2389,7 @@ "script": "prune_branches.py", "schedule": "0 21 * * 1-5", "status": "ok", - "last_run": "2026-07-17T21:00:54", + "last_run": "2026-07-20T21:00:55", "profile": "position-analyst" }, { @@ -2416,7 +2416,7 @@ "script": "functional_health_check.py", "schedule": "*/15 9-16,20-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:30:37", + "last_run": "2026-07-20T21:00:56", "profile": "position-analyst" }, { @@ -2434,7 +2434,7 @@ "script": "", "schedule": "{'kind': 'cron', 'expr': '*/10 * * * *'}", "status": "ok", - "last_run": "2026-07-20T20:41:32", + "last_run": "2026-07-20T21:11:48", "profile": "default" }, { @@ -2532,8 +2532,8 @@ "type": "no_agent", "script": "advice_reconciliation.py", "schedule": "0 20 * * 6", - "status": "error", - "last_run": "2026-07-18T20:00:06", + "status": "ok", + "last_run": "2026-07-20T20:45:50", "profile": "position-analyst" }, { @@ -2586,8 +2586,8 @@ "type": "no_agent", "script": "data_governance.py", "schedule": "0 10 * * 6", - "status": "error", - "last_run": "2026-07-18T10:00:16", + "status": "ok", + "last_run": "2026-07-20T20:45:48", "profile": "position-analyst" }, { @@ -2694,8 +2694,8 @@ "type": "no_agent", "script": "strategy_evaluator.py", "schedule": "0 21 * * 6", - "status": "error", - "last_run": "2026-07-18T21:00:18", + "status": "ok", + "last_run": "2026-07-20T20:45:54", "profile": "position-analyst" }, { @@ -2749,7 +2749,7 @@ "script": "self_todo_executor.py", "schedule": "*/10 8-22 * * 1-5", "status": "ok", - "last_run": "2026-07-20T20:40:41", + "last_run": "2026-07-20T21:10:55", "profile": "position-analyst" }, { @@ -2784,8 +2784,8 @@ "type": "no_agent", "script": "stale_detector.py", "schedule": "30 10 * * 0,6", - "status": "error", - "last_run": "2026-07-19T10:30:14", + "status": "ok", + "last_run": "2026-07-20T20:47:32", "profile": "position-analyst" }, { @@ -2838,8 +2838,8 @@ "type": "no_agent", "script": "divergence_detector.py", "schedule": "30 8-16/2 * * 0,6", - "status": "error", - "last_run": "2026-07-19T16:30:12", + "status": "ok", + "last_run": "2026-07-20T20:45:47", "profile": "position-analyst" }, { @@ -2866,41 +2866,41 @@ "table": "mtf_cache", "label": "多周期均线缓存", "last_record": "07-20 17:08", - "age_hours": 3.6, + "age_hours": 4.1, "warn": false }, { "table": "macro_context_log", "label": "宏观上下文", "last_record": "07-20 15:31", - "age_hours": 5.2, + "age_hours": 5.7, "warn": false }, { "table": "market_snapshots", "label": "市场快照", "last_record": "07-20 15:50", - "age_hours": 4.9, + "age_hours": 5.4, "warn": false }, { "table": "live_prices", "label": "实时价格", "last_record": "07-20 18:12", - "age_hours": 2.6, + "age_hours": 3.1, "warn": false }, { "table": "price_events", "label": "价格事件", "last_record": "07-20 17:06", - "age_hours": 3.7, + "age_hours": 4.2, "warn": false } ], "self_check": { "functional": { - "generated_at": "2026-07-20 20:45:45", + "generated_at": "2026-07-20 21:15:58", "status": "ok", "summary": { "total": 9, @@ -2944,7 +2944,7 @@ "module": "premarket", "function": "盘前全量重评(premarket summary)", "status": "ok", - "reason": "754min前", + "reason": "785min前", "repair": { "action": "rerun_script", "script": "premarket_full_review.py" @@ -2954,7 +2954,7 @@ "module": "gateway_llm", "function": "LLM调用链可用(gateway agent.log)", "status": "ok", - "reason": "latency=14.0s", + "reason": "latency=8.5s", "repair": { "action": "llm_diagnose" } @@ -2977,13 +2977,13 @@ ] }, "meta_watchdog": { - "generated_at": "2026-07-20 20:05:28", + "generated_at": "2026-07-20 21:05:54", "status": "ok", "layers": [ { "layer": "L0 agents_health_check", "status": "ok", - "reason": "0min 前" + "reason": "1min 前" }, { "layer": "L1 functional_health", @@ -2993,7 +2993,7 @@ { "layer": "L2 hygiene_audit", "status": "ok", - "reason": "64min 前" + "reason": "124min 前" }, { "layer": "L1.5 mofin_health采集",