# -*- coding: utf-8 -*- """evolution_daily.py — 策略进化机制 cron 入口(每周六 22:00,hermes cron) 放在 deploy/profile-scripts(硬链接进 cron scripts 目录), 内部串行调用: 1. evolution/evolution_engine.py — 进化引擎(退化检测+假设归纳+变体验证+推送,含单例守卫) 2. evolution/b_group_miner.py — B组挖掘(方向二:由果及因扫描+模拟验证,产出候选/剔除) 3. evolution/precompute_evolution.py — 进化中心预计算(假设/B组/资格 → evolution_center.json,供研究Tab展示) 设计依据:docs/decisions/2026-08-15-策略自我进化闭环重构.md + 2026-08-16 老莫自我进化两方向 """ import subprocess, sys, os REPO = "/home/hmo/MoFin" ENGINE = f"{REPO}/evolution/evolution_engine.py" B_MINE = f"{REPO}/evolution/b_group_miner.py" PRECOMPUTE = f"{REPO}/evolution/precompute_evolution.py" PY = f"{REPO}/venv/bin/python" def main(): # 1. 进化引擎(退化→假设→验证→推送) if os.path.exists(ENGINE): r1 = subprocess.run([PY, ENGINE], cwd=REPO, capture_output=False, timeout=3600) else: print(f"evolution_engine.py 不存在: {ENGINE}", flush=True) r1 = None # 2. B组挖掘(方向二:A股+港股,由果及因+模拟验证) if os.path.exists(B_MINE): for m in ("a", "hk"): r = subprocess.run([PY, B_MINE, m], cwd=REPO, capture_output=False, timeout=3600) print(f"B组挖掘[{m}] 完成", flush=True) else: print(f"b_group_miner.py 不存在: {B_MINE}", flush=True) # 3. 进化中心预计算(研究Tab展示数据) if os.path.exists(PRECOMPUTE): r2 = subprocess.run([PY, PRECOMPUTE], cwd=REPO, capture_output=False, timeout=3600) print("进化中心预计算完成", flush=True) else: print(f"precompute_evolution.py 不存在: {PRECOMPUTE}", flush=True) r2 = None sys.exit((r1.returncode if r1 else 1) or (r2.returncode if r2 else 0)) if __name__ == "__main__": main()