一:背景
作为一个996的加班狗,自己维护的股票分析系统的来源经常进行反爬处理或者干脆停止维护了,换一个来源的话,格式分析脚本也经常需要更换,经过百度之后,发现有大佬维护了一个akshare库,可以获取大量金融相关的数据,并且转换为统一的格式,然后基于从akshare库返回的数据进行加工分析就可以了
二:安装
方式一:直接pip install akshare --upgrade
由于依赖的组件比较多,需要静待一会,即可。
随后pip list查看一下:
三、akshare库简介:
官网地址: https://www.akshare.xyz/index.html Github地址: https://github.com/akfamily/akshare
四、akshare库使用:
获取个股的历史价格以及绘制曲线图
历史价格:
$ python >>> import akshare as ak >>> stock_df = ak.stock_zh_a_hist(symbol='600519', period="daily", start_date='20220101', end_date='20220125', adjust="qfq") >>> print(stock_df)日期 开盘 收盘 最高 最低 成交量 成交额 振幅 涨跌幅 涨跌额 换手率 0 2022-01-04 2055.00 2051.23 2068.95 2014.00 33843 6.913653e+09 2.68 0.06 1.23 0.27 1 2022-01-05 2045.00 2024.00 2065.00 2018.00 28396 5.774992e+09 2.29 -1.33 -27.23 0.23 2 2022-01-06 2022.01 1982.22 2036.00 1938.51 51795 1.022693e+10 4.82 -2.06 -41.78 0.41 3 2022-01-07 1975.00 1942.00 1988.88 1939.32 29817 5.831695e+09 2.50 -2.03 -40.22 0.24 4 2022-01-10 1928.01 1966.00 1977.00 1917.55 29627 5.792738e+09 3.06 1.24 24.00 0.24 5 2022-01-11 1948.00 1940.55 1965.00 1931.17 22277 4.332181e+09 1.72 -1.29 -25.45 0.18 6 2022-01-12 1948.00 1967.00 1978.80 1948.00 27474 5.384360e+09 1.59 1.36 26.45 0.22 7 2022-01-13 1964.82 1877.39 1967.99 1865.56 56747 1.078172e+10 5.21 -4.56 -89.61 0.45 8 2022-01-14 1877.39 1867.00 1893.00 1863.00 29322 5.506186e+09 1.60 -0.55 -10.39 0.23
绘制曲线图:
1 #!/usr/bin/python3 2 # -*- coding: UTF-8 -*- 3 import os 4 import sys 5 import pandas as pd 6 import numpy as np 7 import matplotlib.pyplot as plt 8 import matplotlib.dates as md 9 import seaborn as sns 10 import akshare as akdef stock_data(_symbol,_start_date, _end_date):stock_df = ak.stock_zh_a_hist(symbol=_symbol, period="daily", start_date=_start_date, end_date=_end_date, adjust="qfq")return stock_dfdef view_data(df):_date = df['日期']_open = df['开盘']_close = df['收盘']_high = df['最高']_low = df['最低']# 绘制收盘价折线图plt.figure('K-line')plt.title('600519')plt.xlabel('Date')plt.ylabel('Price')plt.tick_params(labelsize=10)plt.grid(linestyle=':')# 设置x轴刻度定位器ax = plt.gca()ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.MO))ax.xaxis.set_minor_locator(md.DayLocator())# 控制实体与影线的颜色rise = _close >= _opencolor = np.array(['red' if x else 'green' for x in rise])ecolor = np.array(['red' if x else 'green' for x in rise])# 绘制实体plt.bar(_date, _close - _open,0.8, _open, color=color,edgecolor=ecolor, zorder=3)# 绘制影线plt.vlines(_date, _low, _high, color=ecolor)plt.gcf().autofmt_xdate()plt.show()returndef main():df = stock_data('600519','20220101','20220125') #600519 贵州茅台view_data(df)if __name__ == '__main__': main()View Code
获取股票代码
1 import akshare as ak 2 import pandas as pd 3 import numpy as np 4 import os 5 6 """ 7 获取A股所有股票的代码 8 使用stock_info_a_code_name(),反馈数据格式详细参见akshare官网 9 """ 10 StockList=ak.stock_info_a_code_name() 11 #StockList返回的股票代码是“000001”,“000002”这样的格式 12 #但是stock_zh_a_daily()函数中,要求代码的格式为“sz000001”,或“sh600001” 13 #即必须有sz或者sh作为前序 14 #因此,通过for循环对股票代码code进行格式变换 15 for i in range(0,len(StockList)): 16 temp=StockList.iloc[i,0] 17 if temp[0]=="6": 18 temp="sh"+temp 19 if temp[0]=="0": 20 temp="sz"+temp 21 if temp[0]=="3": 22 temp="sz"+temp 23 StockList.iloc[i,0]=temp 24 25 #通过txt形式保存数据,先检测是否存在文件。 26 #若存在,则在更新股票列表时,先将原有文件删除,再重建文件。 27 if os.path.exists("D://akstock//stockList.txt"): 28 os.remove("D://akstock//stockList.txt") 29 StockList.to_csv("D://akstock//stockList.txt",sep="\t",index=False,header=True) 30 #将原有表格删除后,更新原有数据 31 32 """ 33 下一步,根据原有的股票代码数据,读取历史数据 34 "stock_zh_a_hist" # A 股日频率数据-东方财富 35 "stock_zh_ah_daily" # 获取 A+H 股历史行情数据(日频) 36 "stock_zh_a_daily" # 获取 A 股历史行情数据(日频) 37 "stock_zh_kcb_daily" # 获取科创板历史行情数据(日频) 38 "option_sina_cffex_hs300_daily" # 沪深300期权历史行情-日频 39 "option_sina_sse_daily" # 上交所期权日频数据 40 """View Code
五:参考链接
AKShare量化接口简介: https://blog.csdn.net/halps/article/details/126930450
每一个宽客都应该收藏的量化“利器”: https://zhuanlan.zhihu.com/p/26983703?utm_source=wechat_session&utm_medium=social