(1)筛选
使用作业1的程序

  1. 完成对沪深300指数成分股过去2015年1月-2018年1月三年的数据分析
  2. 按alpha从大到小,选择出30只alpha最高的股票形成股票池1,以备进一步分析

(2)预测

  1. 对沪深300指数成分股2018年1月-2021年1月三年的数据分析
  2. 选择出30只alpha最高的股票形成股票池2
  3. 观察股票池1和股票池2的重合度
  4. 分别计算股票池1在2015-2018时间段和2018-2021时间段的Alpha均值,观察Alpha均值的变化
  5. 对观察结果进行思考与分析

股票基础信息获取网站

将沪深300的成分股的基础信息整合到txt文件中

将获取的股票基础信息整理成csv文件便于在Python中读取

使用tushare库爬取股票交易数据,建立CAMP模型,进行分析,废话不多话,直接上代码!

"""
python3.7
-*- coding: UTF-8 -*-
@Project -> File   :Code -> CAMP
@IDE    :PyCharm
@Author :YangShouWei
@USER: 296714435
@Date   :2021/4/6 15:41:37
@LastEditor:
"""import pandas as pd
import tushare as ts
import matplotlib.pyplot as plt
import statsmodels.api as sm
import re
import numpy as npdef modelCAMP(code,name, starttime, endtime):# 资本资产进价模型(CAPM)# Ri -Rf = β*(Rm-Rf) + ε# 载入股指数据sh = ts.get_k_data('sh', start=starttime,end=endtime, autype='qfq')  # 获取上证数据sh["p_change"] = (sh["close"] / sh["close"].shift(1) - 1) * 100  # 利用今日收盘价和前日收盘价计算股价波动,新增一列try:gzmt = ts.get_k_data(code, start=starttime,end=endtime, autype='qfq')  # 获取股票数据# 一些企业在2018年之前还未上市,作为特殊情况处理,返回0if len(gzmt.date) == 0:return [0]gzmt["p_change"] = (gzmt["close"] / gzmt["close"].shift(1) - 1) * 100except:return [0]# print(code)ret_merge = pd.merge(pd.DataFrame(sh.p_change), pd.DataFrame(gzmt.p_change), left_index = True, right_index = True, how = 'inner')# 计算日无风险利率Rf_year = 0.04  # 以2018 年中国三年期国债年化收益率为无风险利率Rf = (1+Rf_year)**(1/365)-1  # 年利率转化为日利率# 计算风险溢价:Ri-RfEret = ret_merge-RfEret.head()# 画出两个风险溢价的散点图,查看相关性plt.scatter(Eret.values[:, 0], Eret.values[:,1])# plt.show()# 利用最小二乘法进行线性回归,拟合CAPM 模型md_capm = sm.OLS(Eret.p_change_y[1:], sm.add_constant(Eret.p_change_x[1:]))result = md_capm.fit()text = str(result.summary())print("\n{}CAMP建立".format(name))print(result.summary())alpha = result.params[0]   # α系数Beita = result.params[1]   # β系数Pvalue = result.pvalues[1]print("a={},β={},pvalue={}".format(alpha,Beita,Pvalue))# print("{}的α系数:{},β系数:{}".format(name,number1,number2))return [alpha, Beita]def readData():# 读取沪深300成分股的基础信息data = pd.read_csv('one.csv')# print(data.head())# print(data.columns)# 处理数据,将股票代码的数据类型从int转换成字符串code =[]for i in data['股票代码']:if i<10:i = '00000'+str(i)elif i<100:i = '0000' + str(i)elif i < 1000:i = '000' + str(i)elif i < 10000:i = '00' + str(i)elif i < 100000:i = '0' + str(i)else:i = str(i)code.append(i)data["股票代码"] = codeplt.rcParams["font.sans-serif"] = "SimHei"  #设置图片中字体为中文黑体# 绘制沪深300指数成分股行业汇总统计图draw = pd.DataFrame({"行业": data.groupby('主营行业')["主营行业"].count()})draw.plot(kind="barh")plt.title("沪深300成分股行业统计图")plt.xlabel("数量")plt.ylabel("行业名称")plt.tick_params(axis='x', labelsize=8)plt.tick_params(axis='y', labelsize=8)plt.show()return dataif __name__ == "__main__":data = readData() # 读取股票基础数据info ={"股票代码":list(data["股票代码"]), "企业名称": list(data['股票简称']),"主营行业":list(data["主营行业"])}df = pd.DataFrame(info)# print(df)# 筛选stime = '2015-01-01'etime = '2018-01-01'# 依次计算企业的CAMP拟合结果code = list(df['股票代码'])name = list(df["企业名称"])n1 = [] # 用于存放α系数n2 = [] # 用于存放β系数print("对沪深300指数成分股2015年1月-2018年1月的CAMP模型计算")for i in range(len(code)):num = modelCAMP(code[i],name[i],stime,etime)if len(num) == 2:n1.append(num[0])n2.append(num[1])elif num[0] == 0:# print("{}在2018年还未上市".format(name[i]))n1.append(np.nan)n2.append(np.nan)else:print("不存在风险系数")df1 = dfdf1['α'] = n1  # 添加股票α系数df1['β'] = n2  # 添加股票β系数new1 = df1.sort_values(by='α', ascending=False)  # 按照α进行降序new1.to_csv("stock1.csv", index=False)  # 将数据存入csv文件中new1 = new1[:100]# 设定股票池1,选取α系数前30 的股票放入股票池1mean1 = new1['α'].mean()# print("股票池1的α平均值{}".format(mean1))#  预测stime = '2018-01-01'etime = '2021-01-01'n3 = [] # 存放α系数n4 = [] # 存放β系数print("对沪深300指数成分股2018年1月-2021年1月的CAMP模型计算")for i in range(len(code)):num = modelCAMP(code[i],name[i], stime, etime)if len(num) == 2:n3.append(num[0])n4.append(num[1])else:print("不存在风险系数")df2 = dfdf2['α'] = n3  # 添加股票α系数df2['β'] = n4  # 添加股票β系数new2 = df2.sort_values(by='α', ascending=False)  # 按照α进行降序new2.to_csv("stock2.csv", index=None)new2 = new2[:100]  # 设定股票池1,选取α系数前30 的股票放入股票池2# 计算股票池1和股票池2的重合度c = 0print("股票池1和股票池2都出现的企业")for i in new1["企业名称"]:if i in list(new2["企业名称"]):print(i)c += 1print("股票池1和股票池2一共有{}支股票重合,重合度为{}".format(c,c/100))# 绘制股票池中企业所属行业分布图# draw1 = pd.DataFrame({"行业": new1.groupby('主营行业')["主营行业"].count()})# draw1.plot(kind="barh")# plt.title("股票池1行业统计图")# plt.xlabel("数量")# plt.ylabel("行业名称")# plt.tick_params(axis='x', labelsize=8)# plt.tick_params(axis='y', labelsize=8)## draw2 = pd.DataFrame({"行业": new2.groupby('主营行业')["主营行业"].count()})# draw2.plot(kind="barh")# plt.title("股票池2行业统计图")# plt.xlabel("数量")# plt.ylabel("行业名称")# plt.tick_params(axis='x', labelsize=8)# plt.tick_params(axis='y', labelsize=8)# plt.show()## stime = '2018-01-01'# etime = '2021-01-01'# n5=[]# print("对股票池1中的股票2018年1月-2021年1月的阿尔法值进行计算")# code = list(new1["股票代码"])# name = list(new1["企业名称"])# for i in range(len(code)):#     num = modelCAMP(code[i], name[i], stime, etime)#     if len(num) == 2:#         n5.append(num[0])#     elif num[0] == 0:#         print("{}在2018年还未上市".format(name[i]))#     else:#         print("不存在风险系数")# df3 = new1# df3['α'] = n5  # 添加股票α系数# m = 0# for i in n5:#     m += i# mean2 = m/len(n5)# print("股票池1在2015年-2018年的α均值{},在2018年-2021年α的均值{}".format(mean1, mean2))

Python的tushare库实现沪深300 指数数据分析——CAMP模型相关推荐

  1. python获取股指_用Python读取csv文件中的沪深300指数历史交易数据

    保存路径:D:\python\用Python读取csv文件中的沪深300指数历史交易数据 程序名称:readcsvhs300.py: 数据名称:沪深300指数历史交易数据.csv: 开发环境:Win7 ...

  2. 利用tushare和pandas获得沪深300指数在每个工作日的平均日收益率

    我用下面的代码来获得沪深300指数在不同工作日的平均日收益率. 运用的python包有: pandas tushare numpy datetime #导入需要的包 import pandas as ...

  3. tushare获取沪深300指数历史_TuShare -财经数据接口包

    在Pro版接口中,我们也增加了通用通用行情接口,可以方便获得各种资产各种频度的数据,欢迎使用. 获取个股历史交易数据(包括均线数据),可以通过参数设置获取日k线.周k线.月k线,以及5分钟.15分钟. ...

  4. tushare获取沪深300指数历史_在tushare上提取沪深300指交易数据

    import numpy as np import pandas as pd import tushare as ts import MySQLdb as mdb #获取沪深300指数的股票名单 hs ...

  5. Python爬虫入门:爬虫抓取沪深300指数列表

    使用Python3爬取沪深300指数列表 1. 思路分析 用chrome打开维基百科沪深300的页面,网址为:https://en.wikipedia.org/wiki/CSI_300_Index . ...

  6. python分析数据走势图_左大营 | python数据分析篇系列1——探索沪深300指数(附代码)(中)...

    探索沪深300指数(HS300)--基于Python(中) [承接上文] 写在前面:本文只做分析,提供观点,不构成投资建议 如需转载请微信联系:eosO_oke 佛系更新,关注不迷路 沪深300指数是 ...

  7. 在tushare上提取沪深300指交易数据

    import numpy as np import pandas as pd import tushare as ts import MySQLdb as mdb #获取沪深300指数的股票名单 hs ...

  8. 用爬虫分析沪深300指数超长走势

    我们知道,一个股市里面有非常多的股票,我们如何能够量化整个股市整体的行情呢,答案是通过一些综合性的指数.本文所选用的沪深300就是这类指数中的一个.我们先来看一下百度百科对于沪深300的解释. 由于股 ...

  9. Barra 结构化风险模型实现(1)——沪深300指数的风格因子暴露度分析

    米筐科技(RiceQuant)策略研究报告:Barra 结构化风险模型实现(1)--沪深300指数的风格因子暴露度分析 江嘉键 1 年前1 概述 Barra 结构化风险模型是全球知名的投资组合表现和风 ...

最新文章

  1. Django模型Model的定义
  2. 【新鲜出炉】25套的精美 Web 应用程序图标素材
  3. 福建省高等学校非计算机考试大纲,福建省高等院校学生计算机一级考试大纲
  4. Python回调函数
  5. shell 脚本 生成文件,文件名为日期时间
  6. h5c3 part6 flex
  7. Android软件安全与逆向分析之Dalvik
  8. Spring入门之一-------实现一个简单的IoC
  9. python文件按行读取变为嵌套列表_迭代两个嵌套的2D列表,其中list2具有list1的行号...
  10. ping html 微信支付,说说PING++介入微信H5支付,我趟过的坑。
  11. 苹果降价潮一波接一波 两款廉价iPad“箭在弦上”
  12. Pantera Capital合伙人:ETH已成为机构资产类别
  13. plink 与 ssh 远程登录问题
  14. lisp用entmake生产圆柱体_蚌埠踏步板钢盖板沟盖板生产加工厂家材质齐全-老友网...
  15. 2022年工作室暑期培训
  16. element-vue admin 右击路由选项 利用fullscreen实现全局页面全屏
  17. pg8168改mac命令_使用PG8168修改8111b网卡MAC地址
  18. python 小海龟 教案_幼儿园小班健康活动《勇敢的小海龟》教案
  19. Hybrid Trajectory Planning for Autonomous Driving in On-Road Dynamic Scenarios文章解读
  20. Failed to execute ‘btoa‘ on ‘Window‘: The string to be encoded contains characters outside of the La

热门文章

  1. Android实现二维码扫描功能-ZXing识别图片二维码,相册选图
  2. 盛大游戏李阳:龙之谷服务器设计
  3. Web前端开发——CSS样式(Ⅰ)文本与文字样式
  4. IPv6基础_邻居发现协议简介
  5. 关于计算机好处的英语小作文600字,电脑的重要性英语作文初一
  6. 力扣 1 至 100 中等
  7. [渝粤教育] 郑州升达经贸管理学院 投融资决策分析 参考 资料
  8. 2022年是SEO行业凋谢的一年
  9. Android界面刷新
  10. Android应用后台保活