| name | a-share-correlation |
| description | A股相关性分析/联动关系/相关系数计算。当用户说"相关性"、"联动"、"correlation"、"XX和YY相关吗"、"哪些股票走势相似"、"分散化"、"对冲"、"beta"、"同涨同跌"、"相关性分析"、"相关系数"、"相关性矩阵"时触发。MUST USE when user asks about correlation analysis, correlation coefficient between stocks/sectors, or diversification analysis based on correlation. 计算个股/指数/行业之间的收益率相关系数、Beta值,分析联动关系和分散化效果,辅助组合构建和对冲决策。支持研报风格(formal)和快速查看风格(brief)。 |
A股相关性分析 (Correlation & Co-movement Analysis)
数据源
通过 cn-stock-data skill 获取数据:
kline 路由:多标的历史日K线(至少 1 年,推荐 2-3 年)
quote 路由:实时行情、所属行业
计算工具:Python numpy/pandas
pandas.DataFrame.corr() 计算皮尔逊相关系数矩阵
numpy 做回归计算 Beta
pandas.DataFrame.rolling().corr() 计算滚动相关性
Workflow
Step 1: 获取历史K线(多标的)
- 解析用户输入,识别 2-10 个标的(个股代码/指数代码/行业ETF)
- 通过 cn-stock-data 获取各标的日K线,时间跨度至少 1 年(默认 2 年)
- 同时获取大盘基准(沪深300 / 上证指数)作为 Beta 计算基准
- 对齐交易日,剔除停牌/缺失日期,确保数据完整性
- 计算日收益率序列:
r_t = (close_t - close_{t-1}) / close_{t-1}
Step 2: 计算相关系数矩阵(Correlation Matrix)
- 基于日收益率序列,计算皮尔逊相关系数矩阵
- 输出 N x N 矩阵表格,对角线为 1.0
- 标注相关性强度等级(参考 references/correlation-guide.md):
- |r| > 0.7:强相关(红色/深色标记)
- 0.3 < |r| < 0.7:中等相关
- |r| < 0.3:弱相关(绿色/浅色标记)
- r < 0:负相关(特别标注)
- 找出最高/最低相关性配对,重点分析
Step 3: Beta 计算
- 对每个标的,以大盘指数(默认沪深300)为基准计算 Beta:
Beta = Cov(r_stock, r_market) / Var(r_market)
- 解读 Beta 含义:
- Beta > 1.2:高弹性,涨跌幅大于大盘
- 0.8 < Beta < 1.2:与大盘同步
- Beta < 0.8:防御型,波动小于大盘
- Beta < 0:反向标的(极少见,如对冲类)
- 同时计算 R-squared(拟合优度),判断 Beta 的可靠性
Step 4: 滚动相关性分析(Rolling Correlation)
- 计算 60 日滚动相关性(可自定义窗口期)
- 分析相关性的时间变化趋势:
- 相关性是否稳定?波动区间?
- 是否存在结构性变化(如某事件后相关性突增/骤降)?
- 近期相关性 vs 长期相关性的偏离度
- 用文字描述滚动相关性走势(如"近3个月相关性从0.3升至0.7")
Step 5: 输出分析结果
formal 风格:
- 分析概览:标的列表、数据区间、样本量
- 相关系数矩阵(热力图描述 + 数据表格)
- 关键配对分析(最强正相关、最强负相关、最弱相关各 top3)
- Beta 分析表(含 R-squared)
- 滚动相关性趋势分析
- 分散化建议:基于相关性矩阵,推荐低相关组合
- 风险提示
brief 风格(默认):
- 相关系数矩阵表格
- 一句话总结:关键联动关系 + Beta 特征
- 分散化结论:哪些标的适合同时持有
- 风险提示
注意事项
- 相关性不稳定,会随市场环境变化,务必结合滚动相关性判断
- 极端行情(如股灾、熔断)下相关性趋向 1,分散化失效
- 相关不等于因果,不能仅凭高相关性推断业务联系
- 分散化需要真正低相关的资产,同行业/同概念股往往高度相关
- 停牌期间数据需剔除,否则会扭曲相关性计算
- 数据为历史统计结果,不构成投资建议
使用示例
示例 1: 基本使用
result = run_skill({
"param1": "value1",
"param2": "value2"
})
示例 2: 命令行使用
python scripts/run_skill.py --input data.json