mcpField
C
correlation-analysis

correlation-analysis

github.com/agiprolabs数据与数据库456471 次安装8 周前更新
代码仓库

关于 correlation-analysis

面向加密资产分析与交易的技能,介绍跨资产相关性估算、动态变化和尾部共振分析。涵盖组合分散、风险管理及配对交易的分析方法,并附有参考资料和脚本。

主要功能

  1. 01Pearson、Spearman 与 Kendall 相关性
  2. 02滚动及 EWMA 相关性
  3. 03相关矩阵与特征值分析
  4. 04层次聚类和尾部依赖
  5. 05相关性状态变化监测
  6. 06相关性矩阵与滚动分析脚本

适用场景

  1. 01评估投资组合分散效果
  2. 02识别配对交易候选资产
  3. 03分析市场压力下的共同下跌风险
  4. 04按资产相关性划分风险集群

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill correlation-analysis

安装后在 Claude Code 中输入/correlation-analysis确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
methodology.md
portfolio_applications.md
scripts/
correlation_matrix.py
rolling_correlation.py

详细介绍

相关性分析

用于评估多元化、风险管理、生成配对交易信号和构建投资组合的跨资产相关性分析。

相关性为何重要

相关性衡量资产的共同走势。在加密货币市场中,这一点至关重要,因为:

  • 多元化:持有相关资产无法带来多元化收益——实际上相当于持有一个集中的头寸
  • 风险管理:投资组合风险取决于相关性结构,而不仅仅是单个资产的波动性
  • 配对交易:高度相关的资产暂时出现偏离时,会带来均值回归机会
  • 投资组合构建:最优配置需要准确的相关性估计
  • 崩盘保护:了解尾部依赖性,可以揭示资产是否会同时崩盘

相关性方法

Pearson 相关系数

假设数据服从正态分布的线性相关性。最常用,但对加密货币市场而言稳健性最低。

import pandas as pd
import numpy as np

# Always compute on returns, never on prices
returns_a = prices_a.pct_change().dropna()
returns_b = prices_b.pct_change().dropna()

pearson_corr = returns_a.corr(returns_b)  # default is Pearson
  • 范围:-1(完全反向)到 +1(完全同向)
  • 假设:线性关系、收益率呈正态分布、没有离群值
  • 局限性:加密货币收益率具有厚尾特征——Pearson 相关系数会低估极端的共同走势
Spearman 秩相关系数

将数值转换为秩,然后在秩上计算 Pearson 相关系数。可捕捉单调关系(而不仅仅是线性关系)。

spearman_corr = returns_a.corr(returns_b, method='spearman')
  • 对离群值和非线性关系更稳健
  • 由于收益率分布具有厚尾特征,更适用于加密货币
  • 正态性成立时,其检验效能略低于 Pearson 相关系数
Kendall Tau 相关系数

统计一致对与不一致对。对离群值的稳健性最高。

kendall_corr = returns_a.corr(returns_b, method='kendall')
  • 在这三种方法中,对离群值的稳健性最高
  • 在大型数据集上计算速度较慢
  • 最适用于小样本或严重偏斜的数据

滚动相关性

静态相关性会掩盖市场状态变化。滚动相关性则能揭示关系如何演变。

基于窗口的滚动相关性
# Rolling Pearson correlation
rolling_corr = returns_a.rolling(window=60).corr(returns_b)

# Multiple windows for different time horizons
windows = {
    'short': 20,    # ~1 month of trading days
    'medium': 60,   # ~3 months
    'long': 120,    # ~6 months
}
for label, w in windows.items():
    df[f'corr_{label}'] = returns_a.rolling(w).corr(returns_b)
EWMA 相关性

采用指数加权,对近期变化的响应更灵敏。

def ewma_correlation(x: pd.Series, y: pd.Series, span: int = 60) -> pd.Series:
    """Compute EWMA correlation between two return series."""
    cov_xy = x.mul(y).ewm(span=span).mean() - x.ewm(span=span).mean() * y.ewm(span=span).mean()
    std_x = x.ewm(span=span).std()
    std_y = y.ewm(span=span).std()
    return cov_xy / (std_x * std_y)
常用窗口
窗口天数用例
短期20战术交易、配对交易入场/退出
中期60策略配置、市场状态检测
长期120投资组合构建、战略配置

相关矩阵分析

计算完整矩阵
# Build return matrix for multiple assets
returns = pd.DataFrame({
    'BTC': btc_returns,
    'ETH': eth_returns,
    'SOL': sol_returns,
    'AVAX': avax_returns,
})

# Correlation matrix (Pearson)
corr_matrix = returns.corr()

# Spearman (better for crypto)
spearman_matrix = returns.corr(method='spearman')
特征值分解

分解相关矩阵以识别主导因素。

eigenvalues, eigenvectors = np.linalg.eigh(corr_matrix.values)

# Sort descending
idx = eigenvalues.argsort()[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]

# First eigenvalue = market factor (explains most variance)
# Subsequent eigenvalues = sector/style factors
market_factor_pct = eigenvalues[0] / eigenvalues.sum() * 100
  • 第一个特征向量:市场因子——当它占主导地位(方差 >60%)时,所有资产都会同向波动
  • 后续特征向量:行业或风格因子
  • 较小的特征值:噪声/特质风险
最小方差投资组合
from numpy.linalg import inv

cov_matrix = returns.cov()
ones = np.ones(len(cov_matrix))
inv_cov = inv(cov_matrix.values)

# Minimum variance weights
weights = inv_cov @ ones / (ones @ inv_cov @ ones)

层次聚类

根据相关性相似度对资产分组,以识别自然形成的类别。

from scipy.cluster.hierarchy import linkage, fcluster
from scipy.spatial.distance import squareform

# Convert correlation to distance
dist_matrix = np.sqrt(2 * (1 - corr_matrix.values))
np.fill_diagonal(dist_matrix, 0)

# Hierarchical clustering
condensed = squareform(dist_matrix)
linkage_matrix = linkage(condensed, method='ward')

# Cut at threshold to get clusters
clusters = fcluster(linkage_matrix, t=1.0, criterion='distance')

应用:

  • 行业检测:同一类别中的资产表现相似
  • 多元化:每个类别选择一种资产,以实现最大程度的多元化
  • 风险配置:在各类别之间分配风险预算,而不是在单个资产之间分配

尾部依赖性

正态相关性会低估崩盘期间的共同走势。尾部依赖性衡量资产同时出现极端收益的频率。

下尾依赖性
def tail_dependence(x: pd.Series, y: pd.Series, quantile: float = 0.05) -> float:
    """Estimate lower tail dependence coefficient.

    Measures P(Y < q | X < q) for quantile q.
    Higher values mean assets crash together more often.
    """
    threshold_x = x.quantile(quantile)
    threshold_y = y.quantile(quantile)
    joint_extreme = ((x < threshold_x) & (y < threshold_y)).sum()
    marginal_extreme = (x < threshold_x).sum()
    return joint_extreme / marginal_extreme if marginal_extreme > 0 else 0.0
加密货币特有的尾部行为

在加密货币市场中,尾部依赖性通常高于正常时期的相关性:

  • 两种山寨币之间的正常相关性可能为 0.6,而尾部依赖性可能达到 0.8
  • 市场恐慌期间,所有风险资产之间的相关性都会飙升至接近 1.0
  • 这意味着多元化收益恰恰会在最需要时消失

与市场阶段相关的相关性

相关性并非恒定不变,而是会随市场阶段而变化。

阶段典型相关性含义
牛市(趋势上涨)0.4–0.7中等——仍能实现一定程度的分散化
区间震荡0.2–0.5较低——最适合分散化的环境
熊市(崩盘)0.8–0.95极高——分散化失效
复苏0.5–0.7从崩盘高点回落
检测相关性阶段转变
def correlation_zscore(rolling_corr: pd.Series, lookback: int = 252) -> pd.Series:
    """Z-score of rolling correlation vs its own history."""
    mean = rolling_corr.rolling(lookback).mean()
    std = rolling_corr.rolling(lookback).std()
    return (rolling_corr - mean) / std

# Flag regime shift when z-score exceeds threshold
zscore = correlation_zscore(rolling_corr_60d)
regime_shift = zscore.abs() > 2.0

加密货币特有的相关性模式

典型相关性范围
交易对正常范围备注
BTC / ETH0.7–0.9主流币中最高
BTC / SOL0.6–0.85SOL 波动性更高,相关性略低
BTC / 山寨币0.5–0.8随市值和板块而变化
Meme / BTC0.2–0.5正常情况下相关性较低
Meme / Meme0.1–0.4正常情况下较低,但尾部依赖较高
稳定币 / BTC-0.1–0.1应接近于零
主要观察结果
  • 大多数山寨币与 BTC 高度相关(0.6–0.9)——市场因子占主导地位
  • Meme 和 PumpFun 代币的正常相关性较低,但尾部依赖较高
  • SOL 生态代币与 SOL 价格高度相关
  • 稳定币不应与风险资产相关——若出现相关性,应进行调查(脱锚风险)
  • 高波动阶段的相关性往往会上升
  • 新代币上线后,价格发现趋于稳定前,相关性可能暂时较低

与其他技能的集成

  • risk-management:使用相关性计算投资组合层面的 VaR 和压力情景
  • portfolio-analytics:相关性矩阵为最优配置算法提供数据
  • regime-detection:相关性阶段转变是阶段分类的输入之一
  • cointegration-analysis:高相关性的交易对可作为协整检验的候选对象
  • position-sizing:根据相关性调整仓位规模,避免相关资产过度集中

文件

参考资料
  • references/methodology.md — 相关性公式、统计检验和估算方法
  • references/portfolio_applications.md — 分散化指标、配对交易和风险分解
脚本
  • scripts/correlation_matrix.py — 多资产相关性矩阵、聚类和分散化指标
  • scripts/rolling_correlation.py — 滚动相关性、阶段检测和尾部依赖分析

评论

支持 Markdown