← 文档库
📄 文档learn/ETF核心持仓研究/06-锚定错配整改行动清单.md
🌱 创建于2026-10-14 14:50
✏️ 修改于2026-10-19 09:59
👁️ 浏览量—
🔗 短链接/~learn/s/932965d1
🔐 可见性

06-锚定错配整改行动清单(SOP 执行版)

> 📅 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-对冲池标记规则

---

0. 一分钟结论

---

1. 分档总表(按优先级)

档 动作 涉及品种 成本 依赖 预期
:--:---------------:--:------------
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。

---

2. Top10 逐条计划(当前优先级最高)

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):

---

3. 执行步骤(按 SOP 六步展开)

> SOP 原文见 04-择时策略池新增ETF的SOP。下面每条都标注「落点文件 + 验收方式」。

步骤 A — P0:SPX→SPY 改绑(0 成本,先做)

``python if 'SPX' in underlying.upper(): return 'SPY' ` > 安全性:'SPGSCI' 检查(L123)在其前,'SPX' 不会误匹配 SPBIO/SPCONS。

> 为什么能 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」,属预期行为,登记即可。

步骤 B — P1:海外指数改绑(补齐海外长序列 → 改绑 → GA)

对 5 个目标锚 DIA / EWJ / IBB / XBI / XLY 逐个执行:

- 方案①(推荐,最稳):生成本地静态 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(生产路径)双通道实测通过。

- 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 弃用。)

  • B4(相关性卡口) 先验证「代理 vs 目标 ETF」月频/年频相关 > 0.85 才可替代(SOP 2.2/2.4 节铁律:只有同标的才可直接替代,别拿不同指数硬套)。不达标 → 退回用 ETF 自身序列(转 P2 套路)。

> ✅ 实测(月频 lag-1):DIA→513400 = 0.855、EWJ→513800 = 0.889、IBB→513290 = 0.901、XBI→159502 = 0.954、XLY→159529 = 0.721(宽松通过)。

- 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 根自指为当前最优合法口径(样本偏短的置信度折让,知情接受)。

步骤 C — P2:国内行业自指锚(传媒 / 游戏)

步骤 D — P3:尾部余量

  • D1 按附录 A 的 T30 频次降序,逐批(每批 5~8 只)复用 P1/P2 套路。
  • D2 优先挑「T30 高 + 有现成代理」的,低 T30 + 冷门指数的放最后。

---

4. 子 agent 策略(用户明确问:回测要不要派子 agent?)

4.1 结论

活 谁干 为什么
---------------
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 + 打分

4.2 派子 agent 的硬约束(照 .trae/rules/superpowers.md §7)

4.3 GA 后台启动姿势(主 Agent)

# 逐个品种后台跑,非阻塞;典型: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 &

---

5. 进度追踪表

# 任务 档 状态 落点/验收 备注
:--:------:--::--:------------
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 根)。

---

附录 A:错配清单(85 只,按 T30 频次降序,节选 Top30)

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(台湾)。

---

附录 B:关键文件与工具索引

用途 文件
------------
锚定映射(改绑核心) 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`

▶ 📜 变更历史(10 次提交)

1ec368f2026-10-19 09:59fix(anchor): 锚定回测增加730天指标预热,修复短区间策略全程空仓收益恒0
25843f72026-10-15 01:37feat(择时): 159502 自指锚 664 根入池 + 回测序列口径硬规则
3028ba52026-10-15 00:04feat(timing): EWJ(东证ETF)择优入池 2 策略 + 整改进度回填
1fffb992026-10-14 23:58fix(anchor): 生物科技两码处置(513290保留QQQ/159502改自指锚) + 自指锚ETF补进codes_to_process
21a243e2026-10-14 17:37fix(anchor): 撤回 XLY 无效注册(污染数据)+ 回填 SOP 执行进度
f78dd4c2026-10-14 15:15docs(anchor): 回填 P0 验收状态(快照✅/portfolio 待收尾)+ GA 进度
a68e0932026-10-14 15:14fix(data): SPY 抓取优先级加 akshare 修复生产源碎片
48cfb212026-10-14 15:10docs(锚定): 回填 P2 传媒/游戏 映射完成 + GA 启动
29c73482026-10-14 15:07docs(锚定): 06行动清单回填 P0/P1 进度 + XLP→XLY 修正
a00d1042026-10-14 14:50feat(anchor): 标普500 ETF 改锚 SPY + 锚定错配整改行动清单
🍃quant 知识库
by 伊甸园和枫

🔊 播放设置

勾选音源后调节配比,总和自动归一化
已选 0 个 · 合计:0%
合成中...
00:00/00:00
1.0x