引言
AKshare 是什么?
AKShare 是 基于 Python 的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。
AKShare 的特点?
AKShare 的特点是获取的是相对权威的财经数据网站公布的原始数据,通过利用原始数据进行各数据源之间的交叉验证,进而再加工,从而得出科学的结论。
Github:https://github.com/akfamily/akshare
文档:https://akshare.akfamily.xyz/
开始使用
安装部署
AKShare 原身是基于 Python 的财经数据接口库,当然目前也支持 http 接口部署。
本文主要使用 Python 环境,Python 如何安装不再演示,使用venv创建虚拟环境,使用 pip 安装 Akshare 包。
# 创建虚拟环境
root@mine:/pro-dev/akshare-uat# python3 -m venv venv
# 激活虚拟环境
root@mine:/pro-dev/akshare-uat# source venv/bin/activate
# 在虚拟环境安装akshare
(venv) root@mine:/pro-dev/akshare-uat# pip install akshare
然后查看包已经安装完成了:
(venv) root@mine:/pro-dev/akshare-uat# pip list | grep akshare
akshare 1.13.38
获取一只股票的行情数据
接下来我们获取一只股票的行情数据,以 工商银行 为例。
import akshare as ak
stock_zh_a_hist_df = ak.stock_zh_a_hist(
symbol="601398", # 股票代码
period="daily", # 日线数据
start_date="20180101", # 开始日期
end_date="20240101", # 截至日期
adjust=""
)
print(stock_zh_a_hist_df)
打印结果:
(venv) root@mine:/pro-dev/akshare-uat# python main.py
日期 开盘 收盘 最高 最低 成交量 成交额 振幅 涨跌幅 涨跌额 换手率
0 2018-01-02 6.19 6.18 6.39 6.11 5374662 3.356778e+09 4.52 -0.32 -0.02 0.20
1 2018-01-03 6.18 6.16 6.32 6.12 3493611 2.172614e+09 3.24 -0.32 -0.02 0.13
2 2018-01-04 6.18 6.07 6.18 6.06 4351365 2.661279e+09 1.95 -1.46 -0.09 0.16
3 2018-01-05 6.09 6.08 6.11 6.06 2817843 1.715072e+09 0.82 0.16 0.01 0.10
4 2018-01-08 6.09 6.07 6.10 6.04 2184876 1.325134e+09 0.99 -0.16 -0.01 0.08
... ... ... ... ... ... ... ... ... ... ... ...
1452 2023-12-25 4.77 4.80 4.81 4.77 1094809 5.249893e+08 0.84 0.42 0.02 0.04
1453 2023-12-26 4.80 4.82 4.82 4.79 1487372 7.155550e+08 0.63 0.42 0.02 0.06
1454 2023-12-27 4.82 4.83 4.84 4.78 1843188 8.862157e+08 1.24 0.21 0.01 0.07
1455 2023-12-28 4.83 4.77 4.85 4.77 3465162 1.664753e+09 1.66 -1.24 -0.06 0.13
1456 2023-12-29 4.78 4.78 4.80 4.77 1800478 8.615642e+08 0.63 0.21 0.01 0.07
[1457 rows x 11 columns]
增加缓存
由于每次调用都是在向财经接口发送请求,频率过高了有被封 IP 的风险。这里我们将取得的数据存储到本地,当再次需要同样数据的时候直接从存储读取,避免短时间重复发送请求,同时也提高了速度。
import akshare as ak
# 首先获取到行情数据
stock_zh_a_hist_df = ak.stock_zh_a_hist(
symbol="601398", # 股票代码
period="daily", # 日线数据
start_date="20180101", # 开始日期
end_date="20240101", # 截至日期
adjust=""
)
# 将数据保存到文件 stock_zh_a_hist_df.pkl
stock_zh_a_hist_df.to_pickle("stock_zh_a_hist_df.pkl")
这样我们在调用的时候直接读取本地文件 stock_zh_a_hist_df.pkl
即可
# 需要导入pandas
import pandas as pd
stock_zh_a_hist_df = pd.read_pickle("stock_zh_a_hist_df.pkl")
print(stock_zh_a_hist_df)
如果我们是在做测试验证,可以使用 try except
把上面过程组织起来,不用每次要先运行获取存储数据、再运行策略算法。
# 导入 akshare 和 pandas
import akshare as ak
import pandas as pd
try:
# 首先尝试从本地读取文件
stock_zh_a_hist_df = pd.read_pickle("stock_zh_a_hist_df.pkl")
except:
# 如果没有则会调用 ak 接口获取
stock_zh_a_hist_df = ak.stock_zh_a_hist(
symbol="601398", # 股票代码
period="daily", # 日线数据
start_date="20180101", # 开始日期
end_date="20240101", # 截至日期
adjust=""
)
# 获取数据后存储到本地
stock_zh_a_hist_df.to_pickle("stock_zh_a_hist_df.pkl")
print(stock_zh_a_hist_df)
能够保证我们每次相同的数据只需要执行一次接口调用。
评论 (0)