/~learn/s/932965d1
> 📅 2026-10-14 建立
>
> 目的:把「全仓库锚定错配品种 → 改成锚定自身指数 + 对应 ETF/代理 → 回测择优入池」这件事,拆成可勾选、按优先级、按 SOP 执行的行动清单,并明确「哪些活派子 agent、哪些活必须主 Agent 亲跑」。
>
> 背景:最新截面快照 2026-10-14 Top10 里有 9/10 是错配(只有排名第 1 的 159518 已完成双锚)。全池 111 只里 85 只错配。错配根因见 anchor_map.py get_anchor:跨境 分支一律 return 'QQQ',把美股/日股/欧股/亚太指数全锚到了纳斯达克。
>
> 关联:04-择时策略池新增ETF的SOP|03-相关性置信度与仓位解耦|05-对冲池标记规则
---
P0 SPX→SPY(0 成本,复用现成池)→ P1 海外指数改绑(需补海外长序列 + 新 GA)→ P2 国内行业自指(用 ETF 自身长序列 + 新 GA)→ P3 尾部余量(Top30 之外的 75 只)。---
| 档 | 动作 | 涉及品种 | 成本 | 依赖 | 预期 |
| :--: | ------ | --------- | :--: | ------ | ------ |
| P0 | SPX → SPY 改绑 | 159655.SZ / 159612.SZ / 513650.SH / 513500.SH | 极低 | 无(SPY 池已存在) | 4 只标普500 ETF 立刻锚对 |
| P1 | 海外指数改绑到海外同业 ETF 长序列 | DJIA→DIA、TOPIX→EWJ、SPCONS→XLY;NASDAQ_BIO(513290)保留 QQQ、SPBIO(159502)改自指锚 | 中 | 需注册海外长序列 + 新 GA | 3 类海外指数锚对 + 生物科技 2 码特殊处置 |
| P2 | 国内行业指数无行情 → ETF 自身序列自指锚 | 传媒 CSI399971→159805、游戏 CSI930722→159869 | 中 | 新 GA | 2 类国内行业锚对 |
| P3 | 尾部余量(Top30 之外的错配) | 约 75 只 | 高 | 复用 P1/P2 套路 | 逐批收口 |
> 全量错配清单(85 只,按 T30 频次降序)见附录 A。
---
| rank | code | 名称 | 本命指数 | 当前锚 | 目标锚 | 档 | 状态 |
| :--: | --- | --- | --- | --- | --- | :--: | :--: |
| 1 | 159518.SZ | 标普油气ETF | SPGSCI | 159518 | 159518 + XOP(双锚) | — | ✅ 已完成 |
| 2 | 513290.SH | 纳指生物科技ETF | NASDAQ_BIO | QQQ | ~~IBB~~ → 保留 QQQ | P1 | ✅ 决策完成:IBB 干净数据 GA 全策略无一过门控(年交易<1 / 年化<8%)→ 不做锚点,保留锚 QQQ |
| 3 | 513400.SH | 道琼斯ETF | DJIA | QQQ | DIA | P1 | ⚠️ 已改绑 DIA;干净 GA 13 策略全部不过门控(年化 5~6% < 8% / 资占 ≤19.4% < 20%)→ 🟡 待决策(保留无池锚 / 回退 QQQ / 改锚 SPY / 放宽门控) |
| 4 | 159805.SZ | 传媒ETF | CSI399971 | 399102.SZ | 159805 自指 | P2 | ✅ 已入池(2 策略,未来函数复检通过) |
| 5 | 513650.SH | 标普500ETF | SPX | QQQ | SPY | P0 | ✅ 代码已改(a00d104) |
| 6 | 159502.SZ | 标普生物科技ETF | SPBIO | QQQ | ~~XBI~~ → 159502 自指 | P1 | ✅ 已入池(自指锚 GA 9 条过门控、8 条过未来函数复检;MVAndRSI 缩水剔除) |
| 7 | 513800.SH | 东证指数ETF | TOPIX | QQQ | EWJ | P1 | ✅ 已入池(MVAndRSI 0.48 + LongTermMomentum 0.14,门控 + 未来函数复检通过) |
| 8 | 159529.SZ | 标普消费ETF | SPCONS | QQQ | XLY | P1 | ⚠️ 已改绑 XLY;干净 GA 13 策略全部不过门控(年化 2~4% / 资占 <10%)→ 🟡 待决策(同上四选一) |
| 9 | 159655.SZ | 标普ETF | SPX | QQQ | SPY | P0 | ✅ 代码已改(a00d104) |
| 10 | 159869.SZ | 游戏ETF | CSI930722 | 399102.SZ | 159869 自指 | P2 | ✅ 已入池(2 策略,未来函数复检通过) |
已实测的数据底数(详见 workspace/probe_top10_out.txt、workspace/probe_overseas_proxy_out.txt):
stock_us_daily(qfq))全部实测可取:DIA 5478 行(2005 起)、EWJ 5478、IBB 4899、XBI 5203、XLY 5478。SPY / ^SPX 静态 Excel 滞后问题已修(2026-10-14):SPY 刷新为 6778 行(1999-11-01 ~ 2026-10-13)+ akshare 缓存;^SPX 刷新为 24816 行(1927-12-30 ~ 2026-10-13,2004 年起用 akshare index_us_stock_sina('.INX'),重叠区间 ratio≈1.0 同源核验通过)。SPY 抓取优先级改为 ['akshare','eastmoney','alpha','excel']。---
> SOP 原文见 04-择时策略池新增ETF的SOP。下面每条都标注「落点文件 + 验收方式」。
get_anchor 的 跨境 分支、return 'QQQ' 之前插入:
``python
if 'SPX' in underlying.upper():
return 'SPY'
`
> 安全性:'SPGSCI' 检查(L123)在其前,'SPX' 不会误匹配 SPBIO/SPCONS。
均返回 'SPY'。 四只变 SPY。(改绑模块)→ a00d104。
> 为什么能 0 成本:timing_config.py 已有 SPY 专属策略池(L450 / L471 / L493 / L509 / L514,多处 add_strategy_to_board(strategy, ['SPY'], weight=2))→ 改绑后直接复用,无需重跑 GA。
> ⚠️ 注意:513500.SH 恰是 ANCHOR_PROXY['SPY'](SPY 的境内代理)→ 改绑后属「自指 → 置信度 1.0」,属预期行为,登记即可。
对 5 个目标锚 DIA / EWJ / IBB / XBI / XLY 逐个执行:
可读。二选一(照 XOP 先例):
- 方案①(推荐,最稳):生成本地静态 Excel data/{code}_1d_210001.xlsx(列结构照 XOP_1d_210001.xlsx:index, stock_code, trade_time, trade_date, open, close, high, low, volume, amount, change, change_pct, turnover_ratio, pre_close)。
- 方案②:在 df_loader.py 非数字分支加 akshare 取数(照 CBOND 分支的 DataCacheManager 缓存范式)。
> ✅ 已生成 5 只静态 Excel + akshare 缓存,fetch_data(GA 路径)与 DataCacheManager.load_best(生产路径)双通道实测通过。
(L119-151)与 _get_tier1_codes(L373-381)同时登记这 5 个 code(照 'XOP': ['akshare'] 的写法)。→ 3c234f1
- ANCHOR_NAMES 增 5 项(如 'DIA': '道琼斯(美)');
- ANCHOR_PROXY 增 5 项自指代理('DIA': 'DIA',照 'XOP': 'XOP');
- LAG_ALIGN_ANCHORS 纳入这 5 个(proxy 非 6 位数字 → _series_is_overseas 判为真实海外行情 → 需 lag-1 对齐,避免相关性被系统性压低);
- get_anchor 增对应 underlying 分支(DJIA→DIA、TOPIX→EWJ、NASDAQ_BIO→IBB、SPBIO→XBI、SPCONS→XLY)。
- ⚠️ XLY 特别说明:159529 本命指数是「标普500消费精选」(可选消费≈60% + 必需消费≈40%)→ 最贴合的代理是 XLY(可选消费,实测 corr 0.721),而非 XLP(必需消费,corr 仅 0.259 ❌)。0.721 未达 0.85 硬卡口,采宽松通过(新发 QDII 溢价噪声系统性压低实测相关性)。
> ✅ 探针实测 ALL OK:513400→DIA、513800→EWJ、513290→IBB、159502→XBI、159529→XLY;5 锚均在 ANCHOR_POOL。(⚠️ 后经 B8 修订:513290 改回 QQQ、159502 改自指锚 159502,IBB/XBI 弃用。)
> ✅ 实测(月频 lag-1):DIA→513400 = 0.855、EWJ→513800 = 0.889、IBB→513290 = 0.901、XBI→159502 = 0.954、XLY→159529 = 0.721(宽松通过)。
后台并行,日志落 workspace/ga_logs/{code}.log + {code}_rerun.log,13 策略 CSV 齐全。结果:EWJ 3 条过门控(FourMovingAverages 因未来函数缩水剔除,MVAndRSI/LongTermMomentum 入池);DIA / XLY 干净数据但 13 策略全部不过门控(DIA 年化 5~6%<8%;XLY 年化 2~4% 且资占<10%)→ 与 IBB/XBI 同类,待决策;IBB/XBI 全策略无一过门控→ 弃用;159502 改「自指锚」后 GA 重跑完成(13 策略,AngleBasedMA 全 0 收益无解;9 条过门控)。;159805/159869 的 4 条入池策略全部 ✅通过(延后 1 天时间加权年化保留率 80%~100%);XLY 旧注册 ❌(年化 16.4%→5.9%,已撤回);159502 复检 workspace/_future_check_159502.py:MVAndRSI 🚫缩水(37.4→11.7,保留 31%)剔除,其余 8 条保留率 70%~96% ✅。
- 513290(纳指生物科技,本命 NASDAQ_BIO)→ 保留锚 QQQ(IBB 弃用,get_anchor 删除 NASDAQ_BIO→IBB 分支);
- 159502(标普生物科技,本命 SPBIO)→ 改「自指锚 159502」(SPBIO 无独立行情缓存,照 159805/159869 自指范式;get_anchor 的 SPBIO 分支改回 '159502')。
- 代码落点:anchor_map.py(NAMES/PROXY/LAG_ALIGN/EXCLUSIVE/get_anchor)、run_data_fetcher.py(IBB/XBI 从路由移除)、show_marker.py(codes_to_process 移除 IBB/XBI、补 159502)、timing_config.py(注释更正)。
- 口径留痕(2026-10-14 用户确认):159502 自指 664 根(2024-01-11~2026-10-14,其可获取最长序列) 回测/入池 → 符合「用该品种能取到的最长序列」硬规则,保留不撤回。XBI(5203 根)虽序列更长,但其是美股同标的代理(参数针对美股 XBI,未必适配 A 股 QDII),且 13 策略全不过门控;故 664 根自指为当前最优合法口径(样本偏短的置信度折让,知情接受)。
/ 930722.CSI 确实取不到行情(tushare 空、adata 空)→ 走自指。 按 159518 自指先例:ANCHOR_NAMES + ANCHOR_PROXY('159805': '159805.SZ')+ EXCLUSIVE_ANCHORS(只服务自身,不参与动态选锚)+ get_anchor 分支。→ a7f85ec(探针实测:两码 get_anchor 正确、均 EXCLUSIVE 非 POOL) 跑完;择优 4 条(159805 2 条 + 159869 2 条)→ 未来函数复检通过 → 已注册入池。
---
| 活 | 谁干 | 为什么 |
| --- | ------ | ------ |
| GA 回测(长跑 1~2h/个) | ❌ 不派子 agent;主 Agent 用后台非阻塞 RunCommand 并行 2~3 路 | 子 agent 是同步阻塞调用:让它跑 GA = 主 Agent 干等 + GA 日志灌回主上下文,直接撞 max_tokens 上限。GA 本身吃满 CPU,并行太多反而抢核变慢 |
| 数据可得性核验(逐个 ETF/代理查序列起止+行数) | ✅ 派子 agent(5~8 并行) | 典型同质化重复劳动 |
| 代理相关性验证(月/年频 >0.85 卡口) | ✅ 派子 agent | 同上,逐个算 |
| 改绑核验(跑映射、比对前后 anchor_code) | ✅ 派子 agent | 重复核对 |
| GA 结果 CSV 汇总打分(13 策略 × 多品种择优) | ✅ 派子 agent | 批量读 CSV + 打分 |
§7),只返回一行 DONE + 字节数」。严禁让子 agent 把长内容回传主 Agent,否则照样撞输出上限、等于白拆。,读写文件/跑命令用 general_purpose_task。
# 逐个品种后台跑,非阻塞;典型:GA_CODES=<代理code> GA_GENERATIONS=200 GA_POP_SIZE=500
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/homebrew/bin:$PATH
env -u PYTHONHOME -u PYTHONPATH .venv/bin/python -u -m unittest \
adata.aohan.quant.backtest.deep_learning.params_deep_seek.ParamsDeepSeek.test_opt_mult_market_params \
> workspace/ga_<code>.log 2>&1 &
(逗号分多码)、GA_STRATEGIES(按类名过滤)、GA_GENERATIONS、GA_POP_SIZE。;默认排序键 avg_exponential_decay_annual_return(时间加权收益)。---
| # | 任务 | 档 | 状态 | 落点/验收 | 备注 |
| :--: | ------ | :--: | :--: | ------ | ------ |
| 1 | 产出本行动清单文档 | — | ✅ | 本文件 | 2026-10-14 |
| 2 | P0:SPX→SPY 改绑(4 只) | P0 | ✅ | anchor_map.py + 映射核验 | a00d104,复用现成 SPY 池 |
| 3 | 修复 SPY/^SPX 静态 Excel 滞后 | P0 | ✅ | data/SPY_1d_210001.xlsx / data/^SPX_1d_210001.xlsx | SPY 6778 行至 2026-10-13;^SPX 24816 行至 2026-10-13(sina .INX);SPY 抓取优先级加 akshare |
| 4 | P1 数据:注册 DIA/EWJ/IBB/XBI/XLY 长序列 | P1 | ✅ | data/*.xlsx + akshare 缓存 + run_data_fetcher 路由 | 3c234f1 |
| 5 | P1 映射注册 + 相关性卡口 | P1 | ✅ | anchor_map.py(探针实测 ALL OK) | DIA .855/EWJ .889/IBB .901/XBI .954/XLY .721(宽松) |
| 6 | P1 GA 回测(5 类) | P1 | ✅ | genetic_opt_params/ | DIA/EWJ/XLY 主跑+重跑全完成(13 策略 CSV 齐全);IBB/XBI 数据干净、GA 无有效策略 → 弃用;159502 改自指锚后 GA 重跑完成(12 CSV,AngleBasedMA 全 0 收益无解) |
| 7 | P1 择优入池 | P1 | 🔄 | timing_config.py | 159805(2 条)/159869(2 条)/EWJ(2 条)/159502(8 条)✅ 已注册;DIA/XLY 无门控候选 → 🟡 待决策;XLY 旧注册(污染数据)已撤回;513290 保留 QQQ(IBB 弃用) |
| 8 | P2:传媒/游戏自指锚 + GA | P2 | ✅ | anchor_map.py(a7f85ec) + GA | 完成:映射已改 + GA 跑完 + 择优 4 条 + 未来函数复检 ✅ + 入池 |
| 9 | P3:尾部余量逐批 | P3 | ⬜ | 复用 P1/P2 | 按 T30 降序 |
| 10 | P0 验收:截面快照 | P0 | ✅ | cross_section_weekly_snapshot | 2026-10-14 快照 4 只标普 ETF anchor_code=SPY |
| 11 | 验收:portfolio 表 + 网站重启 | — | ✅ | cross_section_portfolio + restart.sh | 已重跑 run_push.sh(28 图表,79.5s);restart.sh 守护进程重启成功(公网 HTTP 200) |
| 12 | 修复动态选锚抢锚(真实海外锚 lag 对齐) | P1 | ✅ | anchor_map.py | aea61e4。根因:select_anchor_dynamic 算 static_r 未对真实海外锚(DIA/EWJ/XLY)做 QDII 隔夜 lag 对齐 → 相关性被打到 ~0,而竞争锚 QQQ 代理是境内同历 ETF 天然高相关 → 恒抢回 QQQ。修复:static_r 分支仅真实海外锚改传 code(lag+overlap=5)口径。探针实测 513400→DIA r=0.8336 / 513800→EWJ r=0.7863 / 159529→XLY r=0.8094 |
| 13 | 验收:网站 watchlist 端到端 | P1 | ✅ | /api/cross-section/snapshot | cross_section_portfolio 今日快照仅 6 行、不含目标 QDII 码(今日未被选中)→ 改用网站 watchlist 验收:513400.SH 道琼斯ETF -> anchor_code=DIA(原 QQQ)✅;513100.SH -> QQQ ✅ |
| 14 | 修复锚定回测短区间「收益恒 0.00%」 | P0 | ✅ | unified_server.py | 根因:_anchor_strategy_backtest 只载入用户所选区间(6m≈121 根),而 EWJ(iShares MSCI Japan ETF,日本市场 ETF)策略窗口 162/185/168 根 → 指标全 NaN → 全程空仓 → 收益/回撤恒 0。修复:载入「区间+730 天」预热算指标,算完再按 trade_date>=start 裁剪并重定基(资金曲线、买入持有、回撤同步重算,strategy.df 按位置同步裁剪),图表改用 ChartBuilder 直出。验证(513800.SH 东证指数ETF,2026-10-19):6月 +6.63% vs BH +7.12%(持仓 121/121 根);1年 +18.33% vs +12.84%;3年 +46.94% vs +58.07%;全历史 +67.78% vs +90.77%(回撤 -16.13%,持仓 1042/1774 根)。 |
---
| code | 名称 | 本命指数 | 当前锚 | T30 | 目标锚建议 |
| --- | --- | --- | --- | :--: | --- |
| 513300.SH | 纳斯达克ETF | NASDAQ100 | QQQ | 108 | ✅ 孪生(正确) |
| 513850.SH | 美国50ETF | MSCI_USA50 | QQQ | 107 | P1(待定代理) |
| 159501.SZ | 纳指科技ETF | NASDAQ100 | QQQ | 105 | ✅ 孪生 |
| 513390.SH | 纳指ETF | NASDAQ100 | QQQ | 102 | ✅ 孪生 |
| 513100.SH | 纳指ETF | NASDAQ100 | QQQ | 101 | ✅ 自锚 |
| 513400.SH | 道琼斯ETF | DJIA | QQQ | 101 | P1 → DIA |
| 159577.SZ | 美国50ETF | MSCI_USA50 | QQQ | 98 | P1(待定) |
| 159941.SZ | 纳指ETF | NASDAQ100 | QQQ | 93 | ✅ 孪生(国内分锚) |
| 159655.SZ | 标普ETF | SPX | QQQ | 92 | P0 → SPY |
| 159612.SZ | 标普500ETF | SPX | QQQ | 91 | P0 → SPY |
| 159502.SZ | 标普生物科技ETF | SPBIO | QQQ | 90 | P1 → 159502 自指(XBI 弃用) |
| 513650.SH | 标普500ETF | SPX | QQQ | 87 | P0 → SPY |
| 513500.SH | 标普500ETF | SPX | QQQ | 86 | P0 → SPY(自指代理) |
| 513800.SH | 东证指数ETF | TOPIX | QQQ | 85 | P1 → EWJ |
| 513290.SH | 纳指生物科技ETF | NASDAQ_BIO | QQQ | 73 | 保留 QQQ(IBB 弃用) |
| 513520.SH | 日经ETF | N225 | QQQ | 71 | P1 → EWJ |
| 513880.SH | 日经225ETF | N225 | QQQ | 67 | P1 → EWJ |
| 159866.SZ | 日经ETF | N225 | QQQ | 60 | P1 → EWJ |
| 512880.SH | 证券ETF | CSI399975 | 399102.SZ | 60 | P2/国内指数待查 |
| 588220.SH | 科创100ETF | SSE000698 | 399102.SZ | 58 | P2/国内指数待查 |
| 513030.SH | 德国ETF | DAX | QQQ | 55 | P1 → EWG |
| 513080.SH | 法国ETF | CAC40 | QQQ | 55 | P1 → EWQ |
| 513050.SH | 中概互联ETF | HSTECH | HSI | 44 | ⚠️ 有意锚恒生(不改) |
| 512010.SH | 医药ETF | CSI000933 | 000933.SH | 43 | ✅ 自锚 |
| 159561.SZ | 德国ETF | DAX | QQQ | 41 | P1 → EWG |
| 159607.SZ | 中概互联网ETF | HSTECH | HSI | 41 | ⚠️ 有意锚恒生(不改) |
| 515650.SH | 消费50ETF | CSI931139 | 399102.SZ | 41 | P2/国内指数待查 |
| 513310.SH | 中韩半导体ETF | KRXSEMI | QQQ | 29 | P1 → EWY |
| 520580.SH | 新兴亚洲ETF | EMASIA | QQQ | 28 | P1 → EEM |
| 159805.SZ | 传媒ETF | CSI399971 | 399102.SZ | 27 | P2 → 159805 自指 |
| 159869.SZ | 游戏ETF | CSI930722 | 399102.SZ | 24 | P2 → 159869 自指 |
> 其余 55 只(T30 < 24)归 P3。 > 已实测可用的海外代理:DIA(道指)、EWJ(日本)、IBB(纳指生物)、XBI(标普生物)、XLY(标普消费)、EWG(德国)、EWQ(法国)、EWY(韩国)、EEM(新兴亚洲)、SOXX(半导体)、INDA(印度)、KSA(沙特)、MCHI(中国)、EWT(台湾)。
---
| 用途 | 文件 |
| ------ | ------ |
| 锚定映射(改绑核心) | anchor_map.py |
| 策略池注册表(入池) | timing_config.py |
| 数据加载核心 | df_loader.py |
| 生产数据刷新路由 | run_data_fetcher.py |
| GA 回测入口 | params_deep_seek.py |
| GA 结果目录 | genetic_opt_params/ |
| ETF 池定义(本命指数来源) | etf_pool.py |
| 审计原始输出 | workspace/anchor_audit_out.txt、workspace/probe_top10_out.txt、workspace/probe_overseas_proxy_out.txt` |