mirror of
https://github.com/ZhangXinNan/DL-with-Python-and-PyTorch2.git
synced 2025-10-21 07:43:46 +08:00
552 lines
103 KiB
Plaintext
552 lines
103 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"## 7.8 用LSTM预测股票行情\n",
|
||
"这里采用沪深300指数数据,时间跨度为2010-10-10至今,选择每天最高价格。假设当天最高价依赖当天的前n天(如30天)的沪深300的最高价。用LSTM模型来捕捉最高价的时序信息,通过训练模型,使之学会用前n天的最高价,判断当天的最高价(作为训练的标签值)。"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 7.8.1 导入数据\n",
|
||
"这里使用tushare来下载沪深300指数数据。可以用pip 安装tushare。\n",
|
||
"### <font color = blue>注意:目前下载沪深300指数数据需要注册及需要一定积分,如果你无法下载数据,可以跳过这步,直接使用我们已下载的数据包sh300.csv</font>"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import tushare as ts "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"cons = ts.get_apis()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"#获取沪深指数(000300)的信息,包括交易日期(datetime)、开盘价(open)、收盘价(close),\n",
|
||
"#最高价(high)、最低价(low)、成交量(vol)、成交金额(amount)、涨跌幅(p_change)\n",
|
||
"df = ts.bar('000300', conn=cons, asset='INDEX', start_date='2010-01-01', end_date='')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"df = df.dropna()\n",
|
||
"df.to_csv('sh300.csv')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['code', 'open', 'close', 'high', 'low', 'vol', 'amount', 'p_change'], dtype='object')"
|
||
]
|
||
},
|
||
"execution_count": 9,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.columns"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 7.8.2 数据概览"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/html": [
|
||
"<div>\n",
|
||
"<style scoped>\n",
|
||
" .dataframe tbody tr th:only-of-type {\n",
|
||
" vertical-align: middle;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe tbody tr th {\n",
|
||
" vertical-align: top;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr style=\"text-align: right;\">\n",
|
||
" <th></th>\n",
|
||
" <th>open</th>\n",
|
||
" <th>close</th>\n",
|
||
" <th>high</th>\n",
|
||
" <th>low</th>\n",
|
||
" <th>vol</th>\n",
|
||
" <th>amount</th>\n",
|
||
" <th>p_change</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>count</th>\n",
|
||
" <td>2295.000000</td>\n",
|
||
" <td>2295.000000</td>\n",
|
||
" <td>2295.000000</td>\n",
|
||
" <td>2295.000000</td>\n",
|
||
" <td>2.295000e+03</td>\n",
|
||
" <td>2.295000e+03</td>\n",
|
||
" <td>2295.000000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>mean</th>\n",
|
||
" <td>3100.514637</td>\n",
|
||
" <td>3103.181503</td>\n",
|
||
" <td>3128.213684</td>\n",
|
||
" <td>3073.658757</td>\n",
|
||
" <td>1.090221e+06</td>\n",
|
||
" <td>1.296155e+11</td>\n",
|
||
" <td>0.012397</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>std</th>\n",
|
||
" <td>627.888776</td>\n",
|
||
" <td>628.060844</td>\n",
|
||
" <td>634.870454</td>\n",
|
||
" <td>618.306225</td>\n",
|
||
" <td>9.284048e+05</td>\n",
|
||
" <td>1.268450e+11</td>\n",
|
||
" <td>1.483714</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>min</th>\n",
|
||
" <td>2079.870000</td>\n",
|
||
" <td>2086.970000</td>\n",
|
||
" <td>2118.790000</td>\n",
|
||
" <td>2023.170000</td>\n",
|
||
" <td>2.190120e+05</td>\n",
|
||
" <td>2.120044e+10</td>\n",
|
||
" <td>-8.750000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>25%</th>\n",
|
||
" <td>2534.185000</td>\n",
|
||
" <td>2534.185000</td>\n",
|
||
" <td>2558.015000</td>\n",
|
||
" <td>2514.585000</td>\n",
|
||
" <td>5.634255e+05</td>\n",
|
||
" <td>6.092613e+10</td>\n",
|
||
" <td>-0.650000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>50%</th>\n",
|
||
" <td>3160.800000</td>\n",
|
||
" <td>3165.910000</td>\n",
|
||
" <td>3193.820000</td>\n",
|
||
" <td>3134.380000</td>\n",
|
||
" <td>8.055400e+05</td>\n",
|
||
" <td>9.127102e+10</td>\n",
|
||
" <td>0.020000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>75%</th>\n",
|
||
" <td>3484.665000</td>\n",
|
||
" <td>3486.080000</td>\n",
|
||
" <td>3510.940000</td>\n",
|
||
" <td>3461.215000</td>\n",
|
||
" <td>1.202926e+06</td>\n",
|
||
" <td>1.382787e+11</td>\n",
|
||
" <td>0.705000</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>max</th>\n",
|
||
" <td>5379.470000</td>\n",
|
||
" <td>5353.750000</td>\n",
|
||
" <td>5380.430000</td>\n",
|
||
" <td>5283.090000</td>\n",
|
||
" <td>6.864391e+06</td>\n",
|
||
" <td>9.494980e+11</td>\n",
|
||
" <td>6.710000</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" open close high low vol \\\n",
|
||
"count 2295.000000 2295.000000 2295.000000 2295.000000 2.295000e+03 \n",
|
||
"mean 3100.514637 3103.181503 3128.213684 3073.658757 1.090221e+06 \n",
|
||
"std 627.888776 628.060844 634.870454 618.306225 9.284048e+05 \n",
|
||
"min 2079.870000 2086.970000 2118.790000 2023.170000 2.190120e+05 \n",
|
||
"25% 2534.185000 2534.185000 2558.015000 2514.585000 5.634255e+05 \n",
|
||
"50% 3160.800000 3165.910000 3193.820000 3134.380000 8.055400e+05 \n",
|
||
"75% 3484.665000 3486.080000 3510.940000 3461.215000 1.202926e+06 \n",
|
||
"max 5379.470000 5353.750000 5380.430000 5283.090000 6.864391e+06 \n",
|
||
"\n",
|
||
" amount p_change \n",
|
||
"count 2.295000e+03 2295.000000 \n",
|
||
"mean 1.296155e+11 0.012397 \n",
|
||
"std 1.268450e+11 1.483714 \n",
|
||
"min 2.120044e+10 -8.750000 \n",
|
||
"25% 6.092613e+10 -0.650000 \n",
|
||
"50% 9.127102e+10 0.020000 \n",
|
||
"75% 1.382787e+11 0.705000 \n",
|
||
"max 9.494980e+11 6.710000 "
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"df.describe()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 7.8.3 预处理数据"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 11,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"import matplotlib.pyplot as plt\n",
|
||
"import datetime\n",
|
||
"import torch\n",
|
||
"import torch.nn as nn\n",
|
||
"import numpy as np\n",
|
||
"from torch.utils.data import Dataset, DataLoader\n",
|
||
"import torchvision\n",
|
||
"import torchvision.transforms as transforms\n",
|
||
"\n",
|
||
"%matplotlib inline"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"n = 30\n",
|
||
"LR = 0.001\n",
|
||
"EPOCH = 200\n",
|
||
"batch_size=20\n",
|
||
"train_end =-600\n",
|
||
"\n",
|
||
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"#通过一个序列来生成一个31*(count(*)-train_end)矩阵(用于处理时序的数据)\n",
|
||
"#其中最后一列维标签数据。就是把当天的前n天作为参数,当天的数据作为label\n",
|
||
"def generate_data_by_n_days(series, n, index=False):\n",
|
||
" if len(series) <= n:\n",
|
||
" raise Exception(\"The Length of series is %d, while affect by (n=%d).\" % (len(series), n))\n",
|
||
" df = pd.DataFrame()\n",
|
||
" for i in range(n):\n",
|
||
" df['c%d' % i] = series.tolist()[i:-(n - i)] \n",
|
||
" df['y'] = series.tolist()[n:]\n",
|
||
" \n",
|
||
" if index:\n",
|
||
" df.index = series.index[n:]\n",
|
||
" return df\n",
|
||
"\n",
|
||
"#参数n与上相同。train_end表示的是后面多少个数据作为测试集。\n",
|
||
"def readData(column='high', n=30, all_too=True, index=False, train_end=-500):\n",
|
||
" df = pd.read_csv(\"sh300.csv\", index_col=0)\n",
|
||
" #以日期为索引\n",
|
||
" df.index = list(map(lambda x: datetime.datetime.strptime(x, \"%Y-%m-%d\"), df.index))\n",
|
||
" #获取每天的最高价\n",
|
||
" df_column = df[column].copy()\n",
|
||
" #拆分为训练集和测试集\n",
|
||
" df_column_train, df_column_test = df_column[:train_end], df_column[train_end - n:]\n",
|
||
" #生成训练数据\n",
|
||
" df_generate_train = generate_data_by_n_days(df_column_train, n, index=index)\n",
|
||
" if all_too:\n",
|
||
" return df_generate_train, df_column, df.index.tolist()\n",
|
||
" return df_generate_train\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 7.8.4 定义模型"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 14,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"class RNN(nn.Module):\n",
|
||
" def __init__(self, input_size):\n",
|
||
" super(RNN, self).__init__()\n",
|
||
" self.rnn = nn.LSTM(\n",
|
||
" input_size=input_size,\n",
|
||
" hidden_size=64,\n",
|
||
" num_layers=1,\n",
|
||
" batch_first=True\n",
|
||
" )\n",
|
||
" self.out = nn.Sequential(\n",
|
||
" nn.Linear(64, 1)\n",
|
||
" )\n",
|
||
"\n",
|
||
" def forward(self, x):\n",
|
||
" r_out, (h_n, h_c) = self.rnn(x, None) #None即隐层状态用0初始化\n",
|
||
" out = self.out(r_out)\n",
|
||
" return out\n",
|
||
"\n",
|
||
"\n",
|
||
"class mytrainset(Dataset):\n",
|
||
" def __init__(self, data): \n",
|
||
" self.data, self.label = data[:, :-1].float(), data[:, -1].float()\n",
|
||
" \n",
|
||
" def __getitem__(self, index):\n",
|
||
" return self.data[index], self.label[index]\n",
|
||
"\n",
|
||
" def __len__(self):\n",
|
||
" return len(self.data)\n"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 7.8.5 训练模型"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 15,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"from pandas.plotting import register_matplotlib_converters\n",
|
||
"register_matplotlib_converters()\n",
|
||
"# 获取训练数据、原始数据、索引等信息\n",
|
||
"df, df_all, df_index = readData('high', n=n, train_end=train_end)\n",
|
||
"\n",
|
||
"#可视化原高价数据\n",
|
||
"df_all = np.array(df_all.tolist())\n",
|
||
"plt.plot(df_index, df_all, label='real-data')\n",
|
||
"plt.legend(loc='upper right') \n",
|
||
"\n",
|
||
"\n",
|
||
"#对数据进行预处理,规范化及转换为Tensor\n",
|
||
"df_numpy = np.array(df)\n",
|
||
"\n",
|
||
"df_numpy_mean = np.mean(df_numpy)\n",
|
||
"df_numpy_std = np.std(df_numpy)\n",
|
||
"\n",
|
||
"df_numpy = (df_numpy - df_numpy_mean) / df_numpy_std\n",
|
||
"df_tensor = torch.Tensor(df_numpy)\n",
|
||
"\n",
|
||
"\n",
|
||
"trainset = mytrainset(df_tensor)\n",
|
||
"trainloader = DataLoader(trainset, batch_size=batch_size, shuffle=False)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 16,
|
||
"metadata": {
|
||
"collapsed": true
|
||
},
|
||
"outputs": [],
|
||
"source": [
|
||
"#记录损失值,并用tensorboardx在web上展示\n",
|
||
"from tensorboardX import SummaryWriter\n",
|
||
"writer = SummaryWriter(log_dir='logs')\n",
|
||
"\n",
|
||
"rnn = RNN(n).to(device)\n",
|
||
"optimizer = torch.optim.Adam(rnn.parameters(), lr=LR) \n",
|
||
"loss_func = nn.MSELoss()\n",
|
||
"\n",
|
||
"for step in range(EPOCH):\n",
|
||
" for tx, ty in trainloader:\n",
|
||
" tx=tx.to(device)\n",
|
||
" ty=ty.to(device)\n",
|
||
" #在第1个维度上添加一个维度为1的维度,形状变为[batch,seq_len,input_size]\n",
|
||
" output = rnn(torch.unsqueeze(tx, dim=1)).to(device)\n",
|
||
" loss = loss_func(torch.squeeze(output), ty)\n",
|
||
" optimizer.zero_grad() \n",
|
||
" loss.backward() \n",
|
||
" optimizer.step()\n",
|
||
" writer.add_scalar('sh300_loss', loss, step) "
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"### 7.8.6 测试模型"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 17,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"generate_data_train = []\n",
|
||
"generate_data_test = []\n",
|
||
"\n",
|
||
"test_index = len(df_all) + train_end\n",
|
||
"\n",
|
||
"df_all_normal = (df_all - df_numpy_mean) / df_numpy_std\n",
|
||
"df_all_normal_tensor = torch.Tensor(df_all_normal)\n",
|
||
"for i in range(n, len(df_all)):\n",
|
||
" x = df_all_normal_tensor[i - n:i].to(device)\n",
|
||
" #rnn的输入必须是3维,故需添加两个1维的维度,最后成为[1,1,input_size]\n",
|
||
" x = torch.unsqueeze(torch.unsqueeze(x, dim=0), dim=0)\n",
|
||
" \n",
|
||
" y = rnn(x).to(device)\n",
|
||
" if i < test_index:\n",
|
||
" generate_data_train.append(torch.squeeze(y).detach().cpu().numpy() * df_numpy_std + df_numpy_mean)\n",
|
||
" else:\n",
|
||
" generate_data_test.append(torch.squeeze(y).detach().cpu().numpy() * df_numpy_std + df_numpy_mean)\n",
|
||
"plt.plot(df_index[n:train_end], generate_data_train, label='generate_train')\n",
|
||
"plt.plot(df_index[train_end:], generate_data_test, label='generate_test')\n",
|
||
"plt.plot(df_index[train_end:], df_all[train_end:], label='real-data')\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"image/png": "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\n",
|
||
"text/plain": [
|
||
"<Figure size 432x288 with 1 Axes>"
|
||
]
|
||
},
|
||
"metadata": {
|
||
"needs_background": "light"
|
||
},
|
||
"output_type": "display_data"
|
||
}
|
||
],
|
||
"source": [
|
||
"plt.clf()\n",
|
||
"plt.plot(df_index[train_end:-500], df_all[train_end:-500], label='real-data')\n",
|
||
"plt.plot(df_index[train_end:-500], generate_data_test[-600:-500], label='generate_test')\n",
|
||
"plt.legend()\n",
|
||
"plt.show()"
|
||
]
|
||
}
|
||
],
|
||
"metadata": {
|
||
"kernelspec": {
|
||
"display_name": "Python 3",
|
||
"language": "python",
|
||
"name": "python3"
|
||
},
|
||
"language_info": {
|
||
"codemirror_mode": {
|
||
"name": "ipython",
|
||
"version": 3
|
||
},
|
||
"file_extension": ".py",
|
||
"mimetype": "text/x-python",
|
||
"name": "python",
|
||
"nbconvert_exporter": "python",
|
||
"pygments_lexer": "ipython3",
|
||
"version": "3.7.4"
|
||
}
|
||
},
|
||
"nbformat": 4,
|
||
"nbformat_minor": 2
|
||
}
|