【Python量化交易】分析个股相关性以及显示股票归一化的涨跌幅收益率(包含完整代码)

1.个股相关性分析

在构建投资组合时,组合里个股之间的相关性会直接影响到投资组合的波动率。

个股之间的相关性越低,投资组合越稳健。

因此分析个股的相关性是很有必要的。

首先拿到这些数据,可以分析今年以来这几个股票的相关性:

df = pd.read_excel(r'C:\Users\aaa\Desktop\投资\stocks_analysis.xlsx')
print(df)

【Python量化交易】分析个股相关性以及显示股票归一化的涨跌幅收益率(包含完整代码)_第1张图片

只需要pandas包里的一行代码,即可计算出相关性矩阵

df_corr = df.corr()
print(df_corr)  # 输出相关性矩阵

相关性矩阵结果如下:

【Python量化交易】分析个股相关性以及显示股票归一化的涨跌幅收益率(包含完整代码)_第2张图片

也可以用seaborn库输出好看的热力图:

plt.figure(1)
sns.heatmap(df_corr, annot=True, vmax=1, square=True)  # 绘制df_corr的矩阵热力图
plt.show()  # 显示图片

【Python量化交易】分析个股相关性以及显示股票归一化的涨跌幅收益率(包含完整代码)_第3张图片

从相关性矩阵中可以看得出,同为医美赛道的爱美客华熙生物正相关性就很高,同时这俩票个和中国平安负相关性也很高,具体什么原因可以深入研究一下,不知道主力是不是拿买保险的钱去炒医美股票了。

2.个股收益率分析

同时也可以分析今年以来个股的收益率,放在同一个图表中显示,查看每个股票的收益率和走势如何,这里需要做归一化处理:

首先编写一个show()函数:

def show(df, axs=None):
    n = []
    drawer = plt if axs is None else axs
    for i in df.columns:  # 遍历列名
        if i != '日期':
            n.append(i)
            drawer.plot(100*(df[i]/df[i].iloc[0]-1))  # 归一化处理
    drawer.grid(True)   # 显示网格
    drawer.legend(n, loc='best')   # 图例标注

接着调用函数,输出图片:

show(df)
plt.title('股票涨跌幅')
plt.xlabel('时间')  # x轴时间
plt.ylabel('收益率')  # y轴收收益率
plt.show()  # 显示图片

【Python量化交易】分析个股相关性以及显示股票归一化的涨跌幅收益率(包含完整代码)_第4张图片

3.完整代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# @author: fuzhisheng
# @file: correlation_analysis.py
# @time: 2021/6/18 8:50
# @desc: 相关性分析和收益率

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif']=['SimHei']  # 显示中文
plt.rcParams['axes.unicode_minus'] = False  # 显示负号
# 列对齐
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel(r'C:\Users\jrzb\Desktop\投资\stocks_analysis.xlsx')
print(df)
df_corr = df.corr()
print(df_corr)  # 输出相关性矩阵

plt.figure(1)
sns.heatmap(df_corr, annot=True, vmax=1, square=True)  # 绘制df_corr的矩阵热力图
plt.show()  # 显示图片


def show(df, axs=None):
    n = []
    drawer = plt if axs is None else axs
    for i in df.columns:  # 遍历列名
        if i != '日期':
            n.append(i)
            drawer.plot(100*(df[i]/df[i].iloc[0]-1))  # 归一化处理
    drawer.grid(True)   # 显示网格
    drawer.legend(n, loc='best')   # 图例标注

show(df)
plt.title('股票涨跌幅')
plt.xlabel('时间')  # x轴时间
plt.ylabel('收益率%')  # y轴收收益率
plt.show()  # 显示图片

4.扫码关注微信公众号“价值智生”,持续学习,共同进步

你可能感兴趣的:(Python数据分析,量化交易研究,python,量化交易)