From 45688771549d1dcba37f02e9355d44e7cc47c818 Mon Sep 17 00:00:00 2001 From: xxm Date: Tue, 18 Aug 2026 01:55:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ab=5Fresearch=5Fdaily=E9=87=8D=E5=86=99(?= =?UTF-8?q?=E4=BF=AEweak=E6=9C=AA=E5=AE=9A=E4=B9=89),=20=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E6=B8=A9=E5=8C=BA=E8=A6=86=E7=9B=96=E8=96=84=E5=BC=B1=E7=82=B9?= =?UTF-8?q?=E5=88=B0research=5Flog?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/ab_research_daily.py | 68 +++++++++++---------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/deploy/profile-scripts/ab_research_daily.py b/deploy/profile-scripts/ab_research_daily.py index 6a87f04e..0debd37d 100644 --- a/deploy/profile-scripts/ab_research_daily.py +++ b/deploy/profile-scripts/ab_research_daily.py @@ -3,18 +3,16 @@ """ab_research_daily.py — AB路线每日LLM主导研究(老莫2026-08-18) 职责: 1. 读进化中心快照 evolution_center.json + strategy_regime_perf_by_period -2. LLM 分析:找出薄弱温区/薄弱策略(如某温区策略匮乏或合格策略数据不佳) +2. 分析找出薄弱温区/薄弱策略(覆盖最少) 3. 记录到 strategy_research_log 表(每日一行:日期/发现/尝试/结论/产出策略) 4. 产出新策略(若验证通过)→ 注册为未激活状态(等老莫审查) """ import sys, os, json, sqlite3 from datetime import datetime -sys.path.insert(0, "/home/hmo/MoFin/deploy/profile-scripts") DB = "/home/hmo/MoFin/data/mofin.db" CENTER = "/home/hmo/MoFin/data/evolution_center.json" -# 建表(幂等) def ensure_table(conn): conn.execute(""" CREATE TABLE IF NOT EXISTS strategy_research_log ( @@ -22,10 +20,10 @@ def ensure_table(conn): log_date TEXT NOT NULL, market TEXT, weak_regime TEXT, - finding TEXT, -- 发现的薄弱点 - experiment TEXT, -- 做了什么尝试 - result TEXT, -- 结果如何 - produced_strategy TEXT,-- 产出了什么策略 + finding TEXT, + experiment TEXT, + result TEXT, + produced_strategy TEXT, produced_verified INTEGER DEFAULT 0, llm_model TEXT, created_at TEXT @@ -38,48 +36,54 @@ def load_center(): return {} try: return json.load(open(CENTER)) - except: return {} + except: + return {} -def analyze(center, conn): - """LLM 分析薄弱环节(用 llm_client)""" +def analyze(conn): + """结构化分析:温区覆盖薄弱点""" + weak = [] findings = [] - # 结构化数据:各温区策略覆盖 - rows = conn.execute(""" - SELECT market, regime, COUNT(DISTINCT strategy) as cnt - FROM strategy_regime_perf_by_period - WHERE period_tag='2y' AND trades >= 30 - GROUP BY market, regime - """).fetchall() - coverage = {f"{r[0]}/{r[1]}": r[2] for r in rows} - # 找覆盖最少的温区 - weak = sorted(coverage.items(), key=lambda x: x[1])[:2] - if weak: - findings.append(f"策略覆盖最少的温区: {weak[0][0]}({weak[0][1]}个策略)") - # B组候选 - bg = center.get("b_group") or [] - if bg: - findings.append(f"B组挖掘候选: {len(bg)}条(需验证/审查)") - return findings, coverage + try: + rows = conn.execute(""" + SELECT market, regime, COUNT(DISTINCT strategy) as cnt + FROM strategy_regime_perf_by_period + WHERE period_tag='2y' AND trades >= 30 + GROUP BY market, regime + """).fetchall() + coverage = [{"market": r[0], "regime": r[1], "count": r[2]} for r in rows] + if coverage: + coverage.sort(key=lambda x: x["count"]) + weak = coverage[:2] + findings.append("策略覆盖最少的温区: " + "; ".join( + f"{c['market']}/{c['regime']}({c['count']}个策略)" for c in weak)) + # 补充:qual_overview 里合格策略少的 + center = load_center() + qo = center.get("qual_overview") or [] + if qo: + findings.append(f"合格策略总览: {len(qo)}条") + except Exception as e: + findings.append(f"分析异常: {e}") + return findings, weak def main(): conn = sqlite3.connect(DB, timeout=30) conn.execute("PRAGMA busy_timeout=30000") ensure_table(conn) - center = load_center() - findings, coverage = analyze(center, conn) today = datetime.now().strftime("%Y-%m-%d") - # 已记录过今天则不重复 exists = conn.execute("SELECT COUNT(*) FROM strategy_research_log WHERE log_date=?", (today,)).fetchone()[0] if exists: print(f"[AB研究] {today} 已有记录,跳过") conn.close() return + findings, weak = analyze(conn) finding_text = "; ".join(findings) if findings else "无明显薄弱点(常规观察)" + weak_rg = (weak[0]["regime"] if weak else "") + weak_mkt = (weak[0]["market"] if weak else "a") conn.execute( "INSERT INTO strategy_research_log (log_date, market, weak_regime, finding, experiment, result, produced_strategy, created_at) " "VALUES (?,?,?,?,?,?,?,?)", - (today, "a", (weak[0][0].split("/")[1] if weak else ""), - finding_text, "自动扫描温区覆盖+B组候选", "等待LLM深度分析", "", + (today, weak_mkt, weak_rg, finding_text, + "自动扫描温区覆盖+B组候选", "记录待LLM深度分析", "", datetime.now().isoformat())) conn.commit() print(f"[AB研究] {today} 已记录: {finding_text}")