本篇主要po一些批量获取股票历史数据的示例,还有可视化。
有一部分代码是ChatGPT写的,效率真是高,虽然还需要根据需求进行调整,但确实是大大降低了学习成本,提高了学习效率,解决问题更有针对性。
研究相关性一直是我内心的目标,通过自己熟悉的指标or数据,推断其他产品是否有投资机会or价值*( I hope this theory establish)*。所以我喜欢把很多数据往一张图上面堆。
同花顺、新浪财经的APP都挺好用,但是要获取指定时间内的数据手机操作相对比较复杂,若进行多数据对比时,也需要更专业的工具。我的电脑也不想下载那么多乱七八糟的软件,也方便以后做分析,希望后面能有策略、量化方面的成绩。
python3.x ( anaconda )
获取股票信息:Akshare库
可视化:pyecharts库
几个库的官方网址,直接pip install 安装即可
https://akshare.akfamily.xyz/
https://efinance.readthedocs.io/en/latest/
https://pyecharts.org/#/zh-cn/intro
本文分三个部分
1、如何获取股票历史数据
2、批量获取股票历史数据
3、股票历史收盘数据的可视化
第一部分 获取股票信息
Akshare官网非常友好,还有股票相关知识的教学。
股票数据复权
1.为何要复权:由于股票存在配股、分拆、合并和发放股息等事件,会导致股价出现较大的缺口。 若使用不复权的价格处理数据、计算各种指标,将会导致它们失去连续性,且使用不复权价格计算收益也会出现错误。 为了保证数据连贯性,常通过前复权和后复权对价格序列进行调整。
2.前复权:保持当前价格不变,将历史价格进行增减,从而使股价连续。 前复权用来看盘非常方便,能一眼看出股价的历史走势,叠加各种技术指标也比较顺畅,是各种行情软件默认的复权方式。 这种方法虽然很常见,但也有两个缺陷需要注意。
2.1 为了保证当前价格不变,每次股票除权除息,均需要重新调整历史价格,因此其历史价格是时变的。 这会导致在不同时点看到的历史前复权价可能出现差异。
2.2 对于有持续分红的公司来说,前复权价可能出现负值。
3.后复权:保证历史价格不变,在每次股票权益事件发生后,调整当前的股票价格。 后复权价格和真实股票价格可能差别较大,不适合用来看盘。 其优点在于,可以被看作投资者的长期财富增长曲线,反映投资者的真实收益率情况。
4.在量化投资研究中普遍采用后复权数据。
#! usr/bin/python3.9# -*- coding = utf-8 -*-import akshare as akimport pandas as pd
# 历史行情数据-不复权stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20200101", end_date='20230515', adjust="")stock_zh_a_hist_df# 历史行情数据-前复权stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20200101", end_date='20230515', adjust="qfq")stock_zh_a_hist_df# 历史行情数据-后复权stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20200101", end_date='20230515', adjust="hfq")stock_zh_a_hist_d
多次尝试发现,有时候老取不到数据。
获取历史股票数据Akshare有个奇怪的地方,日期参数必须是‘20201201’这样的日期字符,如果你写startdate=‘20201201’,然后将startdate传入到参数里面,那么得到的就是空值。所以使用循环的时候比较麻烦,要么就把数据搞到本地再做日期的处理。
# 下面这个示例,就是上文提到的问题,这样跑不出结果。
第二部分 批量获取股票历史数据
本次随机找了4个股票代码,之后想要更新的是板块指数、基金净值、汇率等历史数据,看看他们之间的相关性,敬请期待更新。
# 选取4个股票(不复权),放在同一个坐标轴里面展示。# 股票列表stock_codes = ["000001","600489","600028","601988"]# 定义日期范围start_date = '2023-01-01' # 这样定义无效,必须手动收入end_date = '2023-01-10' # 这样定义无效,必须手动收入
road = []# 遍历股票代码,并获取历史数据for stock_code in stock_codes: # 使用 akshare 获取股票历史数据 stock_data = ak.stock_zh_a_hist(symbol=stock_code, period="daily", start_date="20200101", end_date='20230515', adjust="") # 日期是object格式,转化成日期格式 stock_data['日期'] = pd.to_datetime( stock_data ['日期'] ) # 用日期做索引,避免因停牌等情况发生时,导致合并后的数据存在缺失。 stock_data.set_index( '日期' , inplace=True ) # 重新定义列名,不重新定义的话就写成 多级列名切片 stock_data.columns = stock_data.columns+stock_code road.append(stock_data)
# 多级列合并就用这个# multiple_stock_data = pd.concat(road,axis=1,keys=stock_codes)# 多数据合并multiple_stock_data = pd.concat ( road , axis =1 )
如果想导出到Excel直接导出multiple_stock_data就可以了。
对于数据合并好像没有用,其实也有必要的。
1、有时候股票停牌,汇率、美指、石油交易时间不一致。所以不能使用默认索引,需要用日期进行索引,那么concat合并就是很好的解决方式。
2、concat默认是outer合并,如果存在上述情况,那么按日期合并后,会出现空值,空值填充or不填充,也会是个问题。(这个问题以后在石油、黄金数据处理上面更新吧)
读者福利:如果大家对Python感兴趣,这套python学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
朋友们如果有需要全套Python入门+进阶学习资源包,可以点击免费领取(如遇扫码问题,可以在评论区留言领取哦)~
👉CSDN大礼包:《python入门&进阶学习资源包》免费分享

Python学习大礼包
Python入门到精通背记手册
Python安装包
Python爬虫秘籍
Python数据分析全套资源
Python实现办公自动化全套教程
Python面试集锦和简历模板
Python副业兼职路线
资料领取
上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码 即可领取↓↓↓