加载工具库
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
from gluonts.model import deepar
from gluonts.dataset import common
from gluonts.dataset.util import to_pandas
from gluonts.model.predictor import Predictor
import gluonts
import mxnet as mx
import baostock as bs
import pandas as pd
数据下载函数
def getData(code='sh.000001'):
#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond error_msg:'+lg.error_msg)
#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus("sh.000001",
"date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
start_date='2000-01-01', end_date='2020-09-26',
frequency="d", adjustflag="3")
print('query_history_k_data_plus respond error_code:'+rs.error_code)
print('query_history_k_data_plus respond error_msg:'+rs.error_msg)
#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
# 获取一条记录,将记录合并在一起
data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
#### 结果集输出到csv文件 ####
# result.to_csv("%s.csv"%(code), index=False)
#### 登出系统 ####
bs.logout()
return result
主要代码
data = getData()
value = data['close'].values
value = value.astype(np.float32)
date = data['date'].values
date = date.astype(np.str)
data_dict={'timestamp':date,'value':value}
df = pd.DataFrame(data=data_dict)
df.to_csv("data.csv", index=False)
data = pd.read_csv("data.csv", header=0, index_col=0)
training_data = common.ListDataset([{"start": data.index[0],
"target": data.value[:"2020-09-18"]}], freq="d")
testing_data = common.ListDataset([{"start": data.index[0],
"target": data.value[:"2020-09-18"]}], freq="d")
trainer=gluonts.trainer._base.Trainer(batch_size=32,
clip_gradient=10.0,
ctx=mx.gpu(0),
epochs=10,
hybridize=True,
init="xavier",
learning_rate=0.001,
learning_rate_decay_factor=0.5,
minimum_learning_rate=5e-05,
num_batches_per_epoch=len(value)//32,
patience=10,
weight_decay=1e-05)
estimator = deepar.DeepAREstimator(freq="d", prediction_length=14,trainer=trainer)
predictor = estimator.train(training_data=training_data)
for test_entry, forecast in zip(testing_data, predictor.predict(testing_data)):
to_pandas(test_entry)[-15:].plot(linewidth=2)
forecast.plot(color='g', prediction_intervals=[50.0, 90.0])
plt.grid(which='both')
plt.show()
结果展示