Python |批量获取股票历史数据&可视化(上)

本文介绍了如何使用Python的Akshare库获取股票历史数据,包括不复权、前复权和后复权的方式,并讨论了复权的重要性。此外,还提到了批量获取多个股票数据以及使用pyecharts进行数据可视化的方法,强调了数据合并处理在处理股票、汇率等不同时间线数据时的必要性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

本篇主要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官方认证二维码 即可领取↓↓↓

CSDN大礼包:《python入门&进阶学习资源包》免费分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值