使用时间序列工具autots预测股票(附代码)
0.引言
今天学习了一个时间序列的工具autots,想了一下一是不是可以拿来预测股票呢,说干就干 。
1.安装环境
1.1 安装AutoTS
pip install autots
autots就是时间序列的工具。这里面
是不是很简单?如果安装过程出现什么问题百度搜索解决一下。
网上摘了一段介绍
AutoTS 是一个自动化的时间序列预测库,可以使用简单的代码训练多个时间序列模型,此库的一些最佳功能包括:
利用遗传规划优化方法寻找最优时间序列预测模型。
提供置信区间预测值的下限和上限。
它训练各种各样的模型,如统计的,机器学习以及深度学习模型
它还可以执行最佳模型的自动集成
它还可以通过学习最优NaN插补和异常值去除来处理混乱的数据
它可以运行单变量和多变量时间序列
详细介绍:
https://pypi.org/project/AutoTS/
1.2 安装 tushare
pip install tushare
股票的历史数据来源,获取数据很简单。
tushare库是一个用于抓取中国股票的历史和实时报价数据的工具。特点如下:
易于使用,因为返回的大部分数据都是pandas的DataFrame对象
可以轻松保存为csv, excel或json文件
可以插入到MySQL或Mongodb
tushare 上面获取数据需要注册。120积分以上就可以调用。不同接口需要的积分不同。如果还没有注册的小伙伴可以点下面我的链接注册(我也可以得到积分,感谢。不想注册的朋友,也可以联系我,用我的token免费测试使用)。
https://tushare.pro/register?reg=541339
2.代码实现
2.1 获取历史数据
这里以000009这个股票为例
import tushare as ts
import pandas as pd
from datetime import datetime
token = '你的token'
#可以登录文章首的链接注册获取
pro = ts.pro_api(token)
df = ts.pro_bar(ts_code='000009.SZ', adj='qfq', start_date='20180101', end_date='20221031')
# df.to_csv("002609.csv")
# data = pd.read_csv ("002609.csv")
# 日期格式转换
df['date']= df['trade_date'].apply(lambda x: datetime.strptime(str(x),'%Y%m%d'))
2.2 可视化历史数据
将历史数据可视化出来看一下
temp_df = df.set_index('date')
temp_df["close"].plot(figsize=(12, 8), title="000009 Prices", fontsize=20, label="Close")
plt.legend()
plt.grid()
plt.show()
和股票软件看到的图形差不多
image.png2.3 训练模型
训练模型(拿历史数据训练)
from autots import AutoTS
import matplotlib.pyplot as plt
import pandas as pd
# 实例化一个模型(参数没有调整,本文主要是给大家有个简单认识)
model = AutoTS(forecast_length=40, frequency='infer', ensemble='simple', drop_data_older_than_periods=100)
# 模型拟合训练,这个过程会自动找到最佳模型、预处理和集成
model = model.fit(df, date_col='date', value_col='close', id_col=None)
这个需要一定的时间,耐心等一下。
2.4 预测结果
输出预测结果
prediction = model.predict()
forecast = prediction.forecast
print("Stock Price Prediction of Apple")
print(forecast)
结果出来了,是不是很激动。用图展示一下。
temp_df['close'].plot(figsize=(15,8), title= 'AAPL Stock Price', fontsize=18, label='Train')
forecast['close'].plot(figsize=(15,8), title= 'AAPL Stock Price', fontsize=18, label='Test')
plt.legend()
plt.grid()
plt.show()
出来了
image.png
再看看实际的行情数据。
dfNext = ts.pro_bar(ts_code='000009.SZ', adj='qfq', start_date='20221101', end_date='20221226')
dfNext['date']= dfNext['trade_date'].apply(lambda x: datetime.strptime(str(x),'%Y%m%d'))
dfTest = dfNext.loc[:,['date','close']]
dfTest
啊。怎么差这么远,55555555555
好了,主要是给大家演示了一下,怎么使用autots和tushare,还有好多要调整的。如果你也有兴趣时间序列预测或量化交易,欢迎一起交流。