{ "module": "strategy", "version": "2.0", "purpose": "策略研究模块。策略版本管理、回测、温区自适应路由、资格评估(标准A)、手动可用性把关、三状态模型、自我进化机制(数据归纳假设+B组挖掘),以及研究 Tab 的版本迭代对比表格(含综合/普适评分体系)。", "human_help": { "title": "策略研究(版本迭代对比)", "description": [ "本模块是 MoFin 的策略研究面板:管理所有策略版本的迭代历史、回测结果、温区自适应路由(A股/港股独立温区)。", "策略版本按【适应温区】展开成 6 张表(A股当前市/港股当前市/A股其余2市/港股其余2市)——每个策略只在它的适应温区(best_regime)表显示一行,所有列(胜率/平均收益/笔数/均持仓/年化/综合/夏普/盈亏比/普适/回撤)都是该策略在【适应温区】的数据,与所选周期一致。", "策略有三种状态:🟢 激活(当前温区匹配 + 手动可用 + 三项资格达标)/ 🔵 可用(手动可用 + 长期+近期达标,当下待观察)/ 📚 不可用(手动不可用或长期不合格或已证伪)。", "数据每日自动更新:strategy_period_rollup(17:05 派生 1y/2y/5y 窗口统计)+ regime_perf_daily(17:15 重算各温区表现,含按周期预计算 regime_perf_by_period)。", "自我进化机制(研究Tab顶部进化中心):方向一=数据归纳优化假设(从最新交易归纳盈利/亏损模式,如'RSI≥38时胜率仅57%应规避',非拍脑袋参数调整);方向二=B组策略挖掘(由果及因按温区扫描因子组合,与A组对照)" ], "usage": [ "选择周期(近1月/6月/1年/2年/5年/10年)— 筛选该窗口的回测统计;1m/6m/1y 从最长区间切窗派生,2y/5y/10y 读库", "选择市场(全部/A股/港股)— 港股策略带「港」徽章,A股带「A」", "点击策略行 — 打开该策略的版本详情(含因子归因、交易明细)", "▶回测按钮 — 手动重跑该策略回测", "【资格列】三个符号 = 长期/近期/当下 三项达标(详见下方「资格评估」说明)", "【可用列】勾选框 = 手动可用性开关(激活只能是可用的策略;取消勾选 → 立即降级为不可用)", "表头【✅全可用/🚫全不可用】按钮 — 批量设置当前温区表所有策略的可用性", "表头【大盘基准: 1y/2y/10y】— 显示当前大盘年化阈值(资格评估的对比基准)", "⚠️警告文字(黄色)= 可用策略近期转差(2y 年化已跌破大盘),提示关注;🔄(绿色)= 不可用策略近期回升(1y 年化重回大盘上方),提示可考虑重新启用", "🧪 数据归纳优化假设(方向一)— 每个激活策略基于最新交易归纳的规避条件,带数据证据(分组胜率对比)", "🔬 B组候选挖掘(方向二)— 由果及因扫描的候选策略(温区+因子组合+好果率),与A组对照待融合", "📊 策略温区资格 — 每个激活策略在各温区的长期/近期/当下达标状态(✅✅✅)" ], "qualification": [ "资格评估 = 策略在【适应温区】的年化 vs 大盘基准,分三个时间尺度:", "✅/❌ 第一个符号(长期)= 适应温区 10y 年化 > 大盘 10y(当前约 2.4%)", "✅/❌ 第二个符号(近期)= 适应温区 2y 年化 > 大盘 2y(当前约 16.8%)", "✅/❌ 第三个符号(当下)= 适应温区 1y 年化 > 大盘 1y(当前约 5.3%)", "悬停每个符号可看具体数值(该尺度年化 vs 大盘基准)", "三项全过(✅✅✅)= 激活资格;长期+近期过(✅✅❌)= 可用;长期不过(❌❌❌)= 历史", "当前温区是下跌市(trend_down)时,只有 best_regime=trend_down 的策略在下跌市表显示;其他温区的策略(如趋势市 v7.1)三项全过但在各自温区表显示" ], "troubleshooting": [ "某策略某些列空白 → 该周期窗口无数据或样本不足;激活策略缺失时系统自动用 10y 数据补全并标注", "某策略「激活」但被降级(显示 🔵可用 或 📚不可用)→ 查看 state_reason:可能是手动不可用,或资格未三项达标(如近期 2y 年化跌破大盘)", "⚠️警告出现 → 该策略 2y 年化已低于大盘(近期转差),虽然长期仍合格,建议关注是否手动停用", "v_oversold 在下跌市表当下❌(1y 年化负)但仍显示 → 它长期+近期达标(✅✅),当下样本少(2笔)待观察,状态为可用而非激活", "普适显示 X/? 月 → 该温区总月份数据缺失(港股温区总月份按港股 market_regime 统计)" ] }, "ai_spec": { "apis": [ { "method": "GET", "path": "/api/research/strategies?period_tag=<2y>&market=", "returns": "{strategies[{version, name, summary_stats, regime_winrates, regime_weighted, deprecated, state, state_reason, current, market, period_tag, best_regime, qualification, manual_available, qual_warning, trades_count}], regime_active[], regime_state}", "description": "策略版本列表。summary_stats 含 win_rate/portfolio/portfolio_full/universality;regime_winrates 为每策略每温区表现(按 period_tag 从预计算表读);best_regime=适应温区;qualification={long_ok,mid_ok,short_ok,cagr_10y,cagr_2y,cagr_1y,bench_*};manual_available=手动可用性;qual_warning=警告文本;state 为三状态(active/available/unavailable)" }, { "method": "GET", "path": "/api/research/availability", "returns": "{version: {available: bool, note, updated_at}}", "description": "查询全部策略的手动可用性状态" }, { "method": "POST", "path": "/api/research/availability", "body": "{version, available, note?}", "returns": "{updated, entry}", "description": "设置单个策略的手动可用性(激活只能是可用的策略)" }, { "method": "POST", "path": "/api/research/availability?batch=1", "body": "{versions[], available, note?}", "returns": "{updated: {version: entry}, count}", "description": "批量设置策略可用性(前端「全可用/全不可用」按钮调用)" }, { "method": "POST", "path": "/api/research/availability?init=1", "returns": "{initialized: [[version, available]...], count}", "description": "按标准A自动初始化新策略可用性(长期合格→默认可用;长期不合格→默认不可用)。已存在的手动状态不动" }, { "method": "GET", "path": "/api/research/backtest?strategy=&period=<6m>&market=&capital=<1000000>", "returns": "{trades[], summary{}, insights[], year_dist{}} — 回测结果", "description": "运行指定策略版本回测。end_date 固定 2026-07-24(数据完整截止日),universe=market 支持 A股/港股" }, { "method": "GET", "path": "/api/research/analysis?strategy=", "returns": "因子归因分析结果", "description": "指定策略版本的因子归因分析" }, { "method": "GET", "path": "/api/research/trades?strategy=", "returns": "{strategy, trades[]} — 交易明细", "description": "指定策略版本的最新交易明细(从 strategy_research.results_json 读取)" } ], "dependencies": [ "strategy_lab.py — calc_summary/portfolio_sim/list_strategies 核心计算", "strategy_qualify.py — 资格评估(标准A) + 手动可用性 json 管理(data/strategy_availability.json)", "hk_strategies.py — 港股策略定义(HK_STRATEGIES + strategies_for_regime)", "strategy_router.py — 双市场路由(写 data/strategy_weights.json)", "strategy_period_rollup.py — 每日派生 1y/2y/5y 窗口统计(cron 17:05)", "regime_perf.py / regime_perf_by_period.py / regime_perf_daily.sh — 温区表现重算(cron 17:15,按周期预计算)", "strategy_research 表 — 策略版本+回测结果存储(含 market/period_tag/deprecated 字段)", "strategy_regime_perf_by_period 表 — 每策略每温区每周期表现(含温区级组合模拟+线性年化)", "market_regime 表 — 温区归因(date→regime,market 维度)+ 大盘基准年化", "data/strategy_availability.json — 手动可用性状态(git 可追踪)", "evolution/hypothesis_miner.py — 数据归纳假设引擎(方向一)", "evolution/b_group_miner.py — B组策略挖掘管线(方向二,由果及因)", "evolution/precompute_evolution.py — 进化中心预计算(假设/B组/资格 → evolution_center.json)", "data/evolution_center.json — 进化机制快照(研究Tab展示)", "data/b_group_candidates.json — B组候选列表" ], "constraints": [ "综合分公式(前端计算,整体行):min(ret,100)/100×30 + wr/100×20 + min(max(sharpe,0),20)/20×20 + min(pf,5)/5×15 + (1-min(dd,50)/50)×15,乘以置信系数 conf=min(1,n/40)×min(1,months/6)", "综合分收益口径:MC 全参与(portfolio_full 优先);温区加权综合按温区时长占比加权各温区表现", "温区年化(线性放大,非复利):温区组合总收益 × (窗口交易日数 / 该温区窗口内天数)——体现『如果全年都是该温区,策略年化收益率』;消除 portfolio_sim 复利在短跨度时的爆炸(如 v_lurk_bull 5笔同日曾算成 463万%)", "资格评估(标准A,strategy_qualify.evaluate_strategy):长期=10y适应温区年化>大盘10y;近期=2y>大盘2y;当下=1y>大盘1y。大盘基准从 market_regime 指数 close 现算", "激活判定(strategy_router.route):三项资格达标(long_ok&&mid_ok&&short_ok)且手动可用(is_available)——替代旧『胜率≥50』标准", "state 派生(server.py,不存储):active=∈active_set且手动可用且三项达标;available=手动可用且长期+近期达标;unavailable=手动不可用或长期不合格或已证伪或不在候选池", "路由激活但资格不足的策略:降级为 available/unavailable,current 置 False(前端不高亮),state_reason 说明原因(如『路由激活但未三项达标(长期✓/近期✗/当下✗)』)", "警告标记:可用策略 2y 年化<大盘 → ⚠️近期转差;不可用策略 1y 年化>大盘 → 🔄近期回升(提示可重新启用)", "手动可用性(data/strategy_availability.json):新策略按标准A初始化(长期合格默认可用);未标记策略默认可用;激活只能是可用策略", "候选池:A股=regime_perf 有记录的策略;港股=HK_STRATEGIES 定义的策略", "1m/6m 周期温区数据映射到 1y 预计算表(_pt_chain);list_strategies 切窗版本集=静态字典∪strategy_research DISTINCT version(DB-only 策略如 s2_panic/v_lurk_*/v_mr* 不丢)", "回测数据截止 2026-07-24,窗口派生锚定数据末端(非今天)" ], "must_not": [ "不要在策略代码里硬编码 deprecated 集合(必须从 strategy_research.deprecated 读)", "不要在策略代码里硬编码激活策略列表(必须读 data/strategy_weights.json + strategy_qualify 资格判定)", "不要给派生行(derived_from)覆盖真实研究记录", "不要用 period_tag 字典序排序取 trades(必须用 LENGTH 降序最长周期优先)", "不要污染 A股温区(读 market_regime 必须带 market='a' 过滤)", "不要让手动不可用的策略成为 active(激活必须是可用的策略)", "不要用 portfolio_sim 复利年化作为温区年化(必须用线性放大,否则短跨度爆炸)" ], "related_files": [ "server.py — /api/research/* 路由 + 资格评估 + 三状态派生 + 手动可用性", "static/index.html — renderStrategyTable/renderRegimeTable/renderRegimeRow + 资格列/可用性开关/批量按钮", "strategy_qualify.py — 资格评估 + 可用性管理(deploy/profile-scripts/)", "strategy_lab.py — 核心计算", "hk_strategies.py — 港股策略", "strategy_router.py — 双市场路由(matched 用标准A)", "strategy_period_rollup.py / regime_perf.py / regime_perf_by_period.py / regime_perf_daily.sh — 每日自动更新", "deploy/profile-scripts/health_monitor_daily.py — 健康度监控", "docs/decisions/2026-08-15-策略自我进化闭环重构.md — 进化闭环设计", "evolution/hypothesis_miner.py / b_group_miner.py / precompute_evolution.py — 自我进化两方向", "evolution/evolution_engine.py — 退化检测+假设验证+推送", "deploy/profile-scripts/evolution_daily.py — 每周六22:00串行跑引擎+预计算" ] } }