基金分析之与行业间的相关系数计算

这几年买了非常多的基金,一直很好奇基金在非业绩披露期都持有了什么东西?所以写了一个基金净值和各申万一级行业相关系数(以及和市场主流指数)的代码看看能否分析出点东西。

这里依然用了wind API,复现前记得安装。

from WindPy import w
import matplotlib.pyplot as plt
import pandas as pd
from scipy.stats import pearsonr
w.start()

def CorrFund(FundCode, StartDate, EndDate):
    # 提取基金净值序列
    error_code, fund_data = w.wsd(FundCode, "nav", StartDate, EndDate, usedf=True)

    # 提取申万一级行业收盘数据
    #index_code = ["801010.SI","801030.SI","801040.SI","801050.SI","801080.SI","801110.SI","801120.SI","801130.SI","801140.SI","801150.SI","801160.SI","801170.SI","801180.SI","801200.SI","801210.SI","801230.SI","801710.SI","801720.SI","801730.SI","801740.SI","801750.SI","801760.SI","801770.SI","801780.SI","801790.SI","801880.SI","801890.SI","801950.SI","801960.SI","801970.SI","801980.SI"]
    index_code = ["000001.SH","399001.SZ","899050.BJ","881001.WI","000688.SH","399006.SZ","000300.SH","000905.SH","000852.SH","932000.CSI","8841431.WI","881034.WI","930050.CSI","000016.SH","399850.SZ","931643.CSI","830009.XI","746059.MI","000698.SH","399005.SZ","399330.SZ","000010.SH","000009.SH","000903.SH","000906.SH","000002.SH","000015.SH","399324.SZ","399088.SZ","399106.SZ","399102.SZ","399107.SZ","399311.SZ","399303.SZ","399673.SZ","399295.SZ","399296.SZ"]
    Corr_Data = pd.DataFrame()
    name_list = []
    corr_list = []

    for index in index_code:
        error_code, index_data = w.wsd(index, "close", StartDate, EndDate, usedf=True)
        error_code, index_data0 = w.wsd(index, "sec_name", StartDate, EndDate, usedf=True)
        name = index_data0['SEC_NAME'][0]
        name_list.append(name)
        if len(index_data) == len(fund_data):
            data = pd.concat([index_data, fund_data], axis=1)
            corr = data.corr("pearson").iloc[0, 1]
            print("%s与该基金净值的相关系数为%.4f" % (name, corr))
            corr_list.append(corr)
        else:
            print("数据存在缺失值,请补全")
            corr_list.append("error")

    # 输出dataframe
    Corr_Data['Name'] = name_list
    Corr_Data['Corr'] = corr_list
    Corr_Data.sort_values(by=['Corr'], ascending=False, inplace=True)
    return Corr_Data


# 定义参数
FundCode = "167702.OF"
StartDate = '2024-01-01'
EndDate = '2024-03-01'
data = CorrFund(FundCode, StartDate, EndDate)
print(data)

输出结果:看起来这只基金主要持仓在小微盘股。行业方面与综合、轻工、环保和纺织的相关系数较高。
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值