etf-analysis
This Claude Code skill provides a comprehensive framework for analyzing exchange-traded funds, covering product classification, fee structure comparison, tracking error evaluation, liquidity assessment, and quantitative portfolio construction methods specific to the Chinese ETF market. Users should apply this skill when selecting ETFs for passive investment, comparing competing products within the same category, evaluating strategy implementation through factor ETFs, or building data-driven asset allocation strategies.
git clone --depth 1 https://github.com/HKUDS/Vibe-Trading /tmp/etf-analysis && cp -r /tmp/etf-analysis/agent/src/skills/etf-analysis ~/.claude/skills/etf-analysisSKILL.md
# ETF 分析 Skill
## 定位
ETF(交易所交易基金)是被动投资与资产配置的核心工具。本 skill 覆盖 ETF 产品分析、选择方法论、策略应用、中国市场特色以及数据驱动的量化分析方法,为构建基于 ETF 的量化策略与组合提供完整框架。
---
## 1. ETF 产品分类
### 1.1 按标的资产分类
| 类型 | 代表产品 | 特点 |
|------|---------|------|
| **宽基 ETF** | 沪深300ETF (510300)、中证500ETF (510500)、创业板ETF (159915)、科创50ETF (588000) | 流动性最好,交易成本最低,适合核心仓位 |
| **行业 ETF** | 消费ETF (159928)、医疗ETF (512170)、半导体ETF (512480)、银行ETF (512800) | 行业轮动工具,持仓集中度高 |
| **主题 ETF** | 新能源ETF (516160)、碳中和ETF、元宇宙ETF | 主题炒作属性强,生命周期短 |
| **策略ETF / Smart Beta** | 红利ETF (510880)、低波ETF、质量ETF、动量ETF | 因子暴露明确,费率通常略高于宽基 |
| **商品 ETF** | 黄金ETF (518880)、豆粕ETF (159985)、原油ETF (162411) | 实物/期货支撑,注意展期损耗 |
| **债券 ETF** | 国债ETF (511010)、信用债ETF、可转债ETF (511380) | 利率敏感,久期管理关键 |
| **跨境 ETF (QDII)** | 纳指ETF (159632)、标普500ETF (513500)、日经225ETF (513880) | 汇率风险+溢价风险双重叠加 |
| **货币 ETF** | 华宝添益 (511990)、银华日利 (511880) | T+0 申赎,流动性管理工具 |
### 1.2 结构类型
- **普通 ETF**:场内交易,实物申赎(一篮子股票换购),折溢价有套利机制自动收敛
- **LOF(上市开放式基金)**:场内外均可交易,折溢价套利路径相同但效率略低
- **ETF 联接基金**:场外渠道购买的 ETF 替代品,T+1 申赎,无折溢价,适合定投
- **杠杆/反向 ETF**:日内恒定杠杆,长期持有有衰减效应(见第 3.4 节)
---
## 2. ETF 核心指标
### 2.1 跟踪误差(Tracking Error)
衡量 ETF 复制指数能力的最核心指标。
```
日跟踪误差 = std(ETF日收益率 - 指数日收益率)
年化跟踪误差 = 日跟踪误差 × √252
```
**评级标准(A股宽基ETF)**:
- 优秀:年化跟踪误差 < 0.2%
- 合格:0.2% ~ 0.5%
- 较差:> 0.5%
**跟踪误差来源**:
1. 管理费和托管费(持续拖累,每日计提)
2. 分红处理时机(分红再投资延迟)
3. 成分股纳入/剔除时的买卖冲击
4. 现金仓位(申赎带来的暂时性现金拖累)
5. 停牌股处理(用替代品或现金替代)
6. 指数编制方法(全复制 vs 抽样复制)
### 2.2 信息比率(Information Ratio)
```
IR = (ETF年化收益率 - 指数年化收益率) / 年化跟踪误差
```
对 ETF 来说 IR 通常为负(因费率拖累),IR 越接近 0 越好。
### 2.3 折溢价率
```
折溢价率 = (ETF市价 - ETF净值IOPV) / ETF净值IOPV × 100%
```
- **正溢价**:市价 > 净值,套利者卖出 ETF / 申购一篮子股票换购,溢价收敛
- **负折价**:市价 < 净值,套利者买入 ETF / 赎回一篮子股票,折价收敛
- **异常溢价场景**:跨境 QDII ETF(额度限制导致持续溢价)、停牌股比例高的行业 ETF
### 2.4 流动性指标
| 指标 | 含义 | 参考阈值 |
|------|------|--------|
| 日均成交额 | 买卖方便程度 | 宽基 > 1亿,行业 > 2000万 |
| 买卖价差(Spread) | 即时交易成本 | < 0.05% 为优质 |
| 盘口深度 | 单笔大额交易冲击 | 买卖各5档累计 > 500万为佳 |
| 换手率 | 活跃程度 | 过低则流动性风险高 |
### 2.5 费率体系
```
综合费率 = 管理费 + 托管费 + 指数使用费
(不含交易佣金、印花税、申赎费)
```
**长期费率影响公式**:
```
N年费率复利损耗 = (1 - 年费率)^N
例:年费率0.5% vs 0.15%,10年差距 ≈ 3.5%,20年差距 ≈ 6.8%
```
主流宽基 ETF 费率对比(2025年):
- 华夏/易方达/南方 沪深300ETF:0.15%(管理)+ 0.05%(托管)= 0.20%
- 部分小规模宽基:0.5%+,长期持有劣势明显
### 2.6 规模与流动性评估
- **规模门槛**:
- < 2亿:清盘风险较高,流动性差
- 2~10亿:可正常交易,大额资金受限
- > 10亿:流动性充足,做市商活跃
- > 100亿:旗舰 ETF,机构首选
- **清盘风险信号**:规模持续下滑、连续90天日均规模 < 5000万
---
## 3. ETF 选择方法论
### 3.1 同类 ETF 比较框架
同一指数往往有多只 ETF,选择步骤:
```
Step 1: 规模筛选 → 剔除 < 5亿的小规模产品
Step 2: 费率比较 → 同等条件下选费率最低
Step 3: 跟踪误差 → 近1年/近3年双维度比较
Step 4: 流动性 → 日均成交额、买卖价差
Step 5: 基金公司 → 指数化投资能力、历史口碑
```
**量化评分模型**:
```python
def etf_score(etf_data: dict) -> float:
"""
ETF 综合评分(越高越好,满分100)。
Args:
etf_data: 包含 scale, fee, tracking_error, avg_volume, spread 的字典
Returns:
综合评分 0~100
"""
score = 0.0
# 规模得分(30分)
scale = etf_data['scale_billion']
score += min(30, scale / 10 * 30)
# 费率得分(25分):费率越低越高分
fee = etf_data['total_fee_pct'] # 年费率百分比
score += max(0, 25 - fee * 50)
# 跟踪误差得分(30分):误差越小越高分
te = etf_data['tracking_error_annual_pct']
score += max(0, 30 - te * 60)
# 流动性得分(15分)
vol = etf_data['avg_daily_volume_million']
score += min(15, vol / 10 * 15)
return round(score, 2)
```
### 3.2 费率影响长期收益的量化分析
```python
import numpy as np
def fee_drag_analysis(annual_return: float, years: int, fee_rates: list[float]) -> dict:
"""
分析不同费率对长期收益的拖累效果。
Args:
annual_return: 指数年化收益率(小数,如0.08)
years: 投资年限
fee_rates: 待比较的费率列表(小数,如[0.002, 0.005, 0.015])
Returns:
各费率下的终值倍数和相对拖累字典
"""
results = {}
base_value = (1 + annual_return) ** years
for fee in fee_rates:
net_return = annual_return - fee
end_value = (1 + net_return) ** years
drag = (base_value - end_value) / base_value * 100
results[f'{fee*100:.2f}%'] = {
'end_value_multiple': round(end_value, 4),
'drag_pct': round(drag, 2)
}
return results
# 示例:8% 指数收益,20年期
# fee_drag_analysis(0.08, 20, [0.002, 0.005, 0.015])
```
### 3.3 做市商质量评估
优质做市商体现在:
- **价差稳定**:波动期价差扩大幅度小(< 3倍正常水平)
- **深度充足**:盘口各档位金额均匀
- **报价连续性**:不频繁撤单重报
- **大单应对**:大额交易后价差快速恢复
评估方法:
```python
# 通过Level2数据计算有效价差
effective_spread = (ask_price - bid_price) / mid_price * 100 # 单位 %
# 价格冲击成本(Impact Cost)
# 买入N万元所需均价相对于中间价的偏离
impact_cost = (avg_buy_price - mid_price) / mid_price * 100
```
### 3.4 基金公司实力评估
| 维度 | 评估要点 |
|------|---------|
| ETF 管理规模 | 全市场排名,指数化投资专业度 |
| 跟踪误差历史 | 长期维度(3年+)稳定性 |
| 产品线完整性 | 宽基、行业、跨境覆盖广度 |
| 申赎效率 | T+0 实物申赎处理能力 |
| 做市商合作质量 | 与头部券商做市商的合作稳定性 |
国内 ETF 管理头部公司(规模口径):华夏、易方达、华泰柏瑞、南方、嘉实、博时
---
## 4. ETF 策略应用
### 4.1 核心-卫星策略(Core-Satellite)
```
总组合 = 核心仓位(70~80%)+ 卫星仓位(20~30%)
核心仓位:宽基ETF(沪深300/中证500/全A)
→ 获取市场beta,低费率,长期持有,减少交易摩擦
卫星仓位:行业ETF/主题ETF/Smart Beta ETF
→ 增强收益,主动暴露特定因子,允许更高换手
```
**再平衡触发条件**:
- 时间触发:每季度/每半年
- 偏离触发:单一资产偏离目标权重 > 5%
### 4.2 行业轮动 ETF 策略
**动量轮动**:
```python
def sector_momentum_rotation(etf_returns: pd.DataFrame, lookback: int = 20, top_n: int = 3) -> list[str]:
"""
基于动量的行业ETF轮动选择。
Args:
etf_returns: 各行业ETF日收益率 DataFrame,列为ETF代码
lookback: 回看窗口(交易日数)
top_n: 持有ETF数量
Returns:
本期持有的ETF代码列表
"""
momentum = etf_returns.tail(lookback).sum()
selected = momentum.nlargest(top_n).index.tolist()
return selected
```
**宏观周期轮动**:
| 经济周期 | 推荐行业 ETF |
|---------|------------|
| 复苏期(低增长→高增长,低通胀) | 消费、科技、中小盘 |
| 过热期(高增长,高通胀) | 能源、材料、工业 |
| 滞胀期(低增长,高通胀) | 能源、公用事业、消费 |
| 衰退期(高增长→低增长) | 医疗、公用事业、债券ETF |
### 4.3 Smart Beta ETF 因子暴露分析
主要因子及对应ETF:
| 因子 | 代表ETF | 历史有效性(A股) |
|------|--------|--------------|
| 价值(低估值) | 沪深300价值ETF | 中等,受风格切换影响 |
| 红利(高股息) | 红利ETF (510880) | 较强,尤其熊市防御 |
| 低波动 | 中证低波ETF | 较强,夏普比优于宽基 |
| 质量(高ROE) | 中证质量ETF | 较强,长期复合效果好 |
| 动量 | 目前A股产品少 | 中短期有效,长期均值回归 |
| 小盘 | 中证1000ETF (512100) | 强,但流动性风险高 |
**因子暴露分析代码**:
```python
import pandas as pd
import numpy as np
from scipy import stats
def factor_exposure_analysis(etf_returns: pd.Series, factor_returns: dict[str,Professional finance research toolkit — backtesting (7 engines + benchmark comparison panel), factor analysis, Alpha Zoo (452 pre-built alphas across qlib158/alpha101/gtja191/academic), options pricing, 77 finance skills, 29 multi-agent swarm teams, Trade Journal analyzer, and Shadow Account (extract → backtest → render) across 7 data sources (tushare, yfinance, okx, akshare, mootdx, ccxt, futu).
ADR/H-share/A-share cross-listing premium analysis — track pricing gaps between US-listed ADRs, HK-listed H-shares, and A-shares for arbitrage signals, dual-listing valuation, and delisting risk assessment.
AKShare financial data aggregator (18k+ stars). Free, no API key. Covers A-shares, US, HK, futures, macro, forex. Primary fallback for tushare and yfinance.
Browse and bench the bundled alpha zoos — prebuilt cross-sectional factor libraries (Kakushadze 101, GTJA 191, Qlib 158, Fama-French / Carhart). Use when the user asks "which alphas exist", wants metadata on a named alpha, or wants to run IC/IR on a whole zoo over a universe.
A 股 ST/*ST 风险预测框架 — 基于最新中报/三季报或业绩预告/快报,预测下一财年是否会因营收、利润、净资产、分红不达标而被风险警示,并将新浪监管处罚记录作为独立证据面纳入风险等级。仅适用于 A 股,不预测财务造假。
Asset allocation theory and optimizer usage — MPT / Black-Litterman / risk budgeting / all-weather strategy, including guides for 4 optimizers and rebalancing rules.
Diagnose failed or underperforming backtests, locate the root cause, and fix the issue
Behavioral finance applications: theories of overreaction and underreaction, behavioral explanations for momentum and reversal, investor sentiment cycles, cognitive-bias checklists, and debiasing quantitative strategies.