一. 股票数据下载
1.1 AKshare介绍
先简单介绍下AKShare,内容截至官网。
AKShare 是基于 Python 的开源金融数据接口库,目的是实现对股票、期货、期权、基金、债券、外汇等金融产品和另类数据从数据采集,数据清洗到数据下载的工具,满足金融数据科学家、数据科学爱好者在数据获取方面的需求。
它的特点是利用 AKShare 获取的是基于可信任数据源发布的原始数据,广大数据科学家可以利用原始数据进行再加工,从而得出科学的结论。
- 代码语法符合 PEP8 规范, 数据接口的命名统一;
- 最佳支持 Python 3.7.5 及其以上版本;
- 提供最佳的文档支持, 每个数据接口提供详细的说明和示例, 只需要复制粘贴就可以下载数据;
- 持续维护由于目标网页变化而导致的部分数据接口运行异常问题;
- 持续更新财经数据接口, 同时优化源代码;
1.2 安装AKShare
pip install akshare
1.3 如何使用AKShare?
1.3.1 获取股票实时的交易数据
该数据来源新浪,使用时候注意频率,不然会被封IP
代码:
import akshare as ak
stock_zh_a_spot_df = ak.stock_zh_a_spot()
stock_zh_a_spot_df.to_csv('E:/file/gupiao.csv',encoding="gbk")
测试记录:
1.3.2 获取股票历史行情数据
date
交易日
open
开盘价
high
最高价
low
最低价
close
收盘价
volume
成交量;单位:股
outstanding_share
流动股本;单位:股
trunover
换手率=成交量/流动股本
代码:
import akshare as ak
stock_zh_a_daily_qfq_df = ak.stock_zh_a_daily(symbol = "sh600497",adjust = '')
stock_zh_a_daily_qfq_df.to_csv('E:/file/sh600497.csv')
测试记录:
二. 股票数据预测
我们以收盘价为基准来预测
代码:
import pandas as pd
import numpy as np
import datetime as dt
import matplotlib.pylab as plt
import seaborn as sns
from matplotlib.pylab import style
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import statsmodels.api as sm
# 一些配置
style.use('ggplot')
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取数据源
stockFile = 'E:/file/sh600497.csv'
stock = pd.read_csv(stockFile, index_col=0, parse_dates=[0])
# 查看每周的均价
# 首先需要将dataframe的索引设置为时间列
stock.index = pd.to_datetime(stock['date'])
stock_week = stock['close'].resample('W-MON').mean()
stock_train = stock_week['2020':'2022']
stock_train.plot(figsize=(12,8))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Stock Close")
sns.despine()
# 一阶差分
stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()
plt.figure()
plt.plot(stock_diff)
plt.title('一阶差分')
#plt.show()
# ACF
acf = plot_acf(stock_diff, lags=20)
plt.title("ACF")
#acf.show()
# PACF
pacf = plot_pacf(stock_diff, lags=20)
plt.title("PACF")
#pacf.show()
# 进行预测
stock_train[np.isnan(stock_train)] = 0
stock_train[np.isinf(stock_train)] = 0
model = ARIMA(stock_train, order=(1, 1, 1), freq='W-MON')
result = model.fit()
#pred = result.predict('2022/1/1', '2022/6/1',dynamic=True, typ='levels')
#print (pred)
#print(help(result.predict))
pred = result.predict(start=len(stock_train)-3, end=len(stock_train)+3, dynamic=True, typ='levels')
print(pred)
plt.figure(figsize=(6, 6))
plt.xticks(rotation=45)
plt.plot(pred)
plt.plot(stock_train)
plt.show()
测试记录:
预测只能预测一个趋势,从下图我们可以看到,预测的股价趋势趋于平稳。
image.png
网友评论