Files
zhoujie2104231 2757a4d0d2 chore: 添加Stock-Prediction-Models项目文件
添加了Stock-Prediction-Models项目的多个文件,包括数据集、模型代码、README文档和CSS样式文件。这些文件用于股票预测模型的训练和展示,涵盖了LSTM、GRU等深度学习模型的应用。
2025-04-27 16:28:06 +08:00

459 lines
64 KiB
Plaintext

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"sns.set()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2016-11-02</td>\n",
" <td>778.200012</td>\n",
" <td>781.650024</td>\n",
" <td>763.450012</td>\n",
" <td>768.700012</td>\n",
" <td>768.700012</td>\n",
" <td>1872400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2016-11-03</td>\n",
" <td>767.250000</td>\n",
" <td>769.950012</td>\n",
" <td>759.030029</td>\n",
" <td>762.130005</td>\n",
" <td>762.130005</td>\n",
" <td>1943200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2016-11-04</td>\n",
" <td>750.659973</td>\n",
" <td>770.359985</td>\n",
" <td>750.560974</td>\n",
" <td>762.020020</td>\n",
" <td>762.020020</td>\n",
" <td>2134800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2016-11-07</td>\n",
" <td>774.500000</td>\n",
" <td>785.190002</td>\n",
" <td>772.549988</td>\n",
" <td>782.520020</td>\n",
" <td>782.520020</td>\n",
" <td>1585100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2016-11-08</td>\n",
" <td>783.400024</td>\n",
" <td>795.632996</td>\n",
" <td>780.190002</td>\n",
" <td>790.510010</td>\n",
" <td>790.510010</td>\n",
" <td>1350800</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close \\\n",
"0 2016-11-02 778.200012 781.650024 763.450012 768.700012 768.700012 \n",
"1 2016-11-03 767.250000 769.950012 759.030029 762.130005 762.130005 \n",
"2 2016-11-04 750.659973 770.359985 750.560974 762.020020 762.020020 \n",
"3 2016-11-07 774.500000 785.190002 772.549988 782.520020 782.520020 \n",
"4 2016-11-08 783.400024 795.632996 780.190002 790.510010 790.510010 \n",
"\n",
" Volume \n",
"0 1872400 \n",
"1 1943200 \n",
"2 2134800 \n",
"3 1585100 \n",
"4 1350800 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('../dataset/GOOG-year.csv')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"from collections import deque\n",
"import random\n",
" \n",
"class Agent:\n",
"\n",
" LEARNING_RATE = 0.003\n",
" BATCH_SIZE = 32\n",
" LAYER_SIZE = 256\n",
" OUTPUT_SIZE = 3\n",
" EPSILON = 0.5\n",
" DECAY_RATE = 0.005\n",
" MIN_EPSILON = 0.1\n",
" GAMMA = 0.99\n",
" MEMORIES = deque()\n",
" MEMORY_SIZE = 300\n",
" \n",
" def __init__(self, state_size, window_size, trend, skip):\n",
" self.state_size = state_size\n",
" self.window_size = window_size\n",
" self.half_window = window_size // 2\n",
" self.trend = trend\n",
" self.skip = skip\n",
" tf.reset_default_graph()\n",
" self.INITIAL_FEATURES = np.zeros((4, self.state_size))\n",
" self.X = tf.placeholder(tf.float32, (None, None, self.state_size))\n",
" self.Y = tf.placeholder(tf.float32, (None, self.OUTPUT_SIZE))\n",
" cell = tf.nn.rnn_cell.LSTMCell(self.LAYER_SIZE, state_is_tuple = False)\n",
" self.hidden_layer = tf.placeholder(tf.float32, (None, 2 * self.LAYER_SIZE))\n",
" self.rnn,self.last_state = tf.nn.dynamic_rnn(inputs=self.X,cell=cell,\n",
" dtype=tf.float32,\n",
" initial_state=self.hidden_layer)\n",
" self.logits = tf.layers.dense(self.rnn[:,-1], self.OUTPUT_SIZE)\n",
" self.cost = tf.reduce_sum(tf.square(self.Y - self.logits))\n",
" self.optimizer = tf.train.AdamOptimizer(learning_rate = self.LEARNING_RATE).minimize(self.cost)\n",
" self.sess = tf.InteractiveSession()\n",
" self.sess.run(tf.global_variables_initializer())\n",
" \n",
" def _memorize(self, state, action, reward, new_state, dead, rnn_state):\n",
" self.MEMORIES.append((state, action, reward, new_state, dead, rnn_state))\n",
" if len(self.MEMORIES) > self.MEMORY_SIZE:\n",
" self.MEMORIES.popleft()\n",
"\n",
" def _construct_memories(self, replay):\n",
" states = np.array([a[0] for a in replay])\n",
" new_states = np.array([a[3] for a in replay])\n",
" init_values = np.array([a[-1] for a in replay])\n",
" Q = self.sess.run(self.logits, feed_dict={self.X:states, self.hidden_layer:init_values})\n",
" Q_new = self.sess.run(self.logits, feed_dict={self.X:new_states, self.hidden_layer:init_values})\n",
" replay_size = len(replay)\n",
" X = np.empty((replay_size, 4, self.state_size))\n",
" Y = np.empty((replay_size, self.OUTPUT_SIZE))\n",
" INIT_VAL = np.empty((replay_size, 2 * self.LAYER_SIZE))\n",
" for i in range(replay_size):\n",
" state_r, action_r, reward_r, new_state_r, dead_r, rnn_memory = replay[i]\n",
" target = Q[i]\n",
" target[action_r] = reward_r\n",
" if not dead_r:\n",
" target[action_r] += self.GAMMA * np.amax(Q_new[i])\n",
" X[i] = state_r\n",
" Y[i] = target\n",
" INIT_VAL[i] = rnn_memory\n",
" return X, Y, INIT_VAL\n",
" \n",
" def get_state(self, t):\n",
" window_size = self.window_size + 1\n",
" d = t - window_size + 1\n",
" block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n",
" res = []\n",
" for i in range(window_size - 1):\n",
" res.append(block[i + 1] - block[i])\n",
" return np.array(res)\n",
" \n",
" def buy(self, initial_money):\n",
" starting_money = initial_money\n",
" states_sell = []\n",
" states_buy = []\n",
" inventory = []\n",
" state = self.get_state(0)\n",
" init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n",
" for k in range(self.INITIAL_FEATURES.shape[0]):\n",
" self.INITIAL_FEATURES[k,:] = state\n",
" for t in range(0, len(self.trend) - 1, self.skip):\n",
" action, last_state = self.sess.run([self.logits,self.last_state],\n",
" feed_dict={self.X:[self.INITIAL_FEATURES],\n",
" self.hidden_layer:init_value})\n",
" action, init_value = np.argmax(action[0]), last_state\n",
" next_state = self.get_state(t + 1)\n",
" \n",
" if action == 1 and initial_money >= self.trend[t]:\n",
" inventory.append(self.trend[t])\n",
" initial_money -= self.trend[t]\n",
" states_buy.append(t)\n",
" print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n",
" \n",
" elif action == 2 and len(inventory):\n",
" bought_price = inventory.pop(0)\n",
" initial_money += self.trend[t]\n",
" states_sell.append(t)\n",
" try:\n",
" invest = ((close[t] - bought_price) / bought_price) * 100\n",
" except:\n",
" invest = 0\n",
" print(\n",
" 'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n",
" % (t, close[t], invest, initial_money)\n",
" )\n",
" \n",
" new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n",
" self.INITIAL_FEATURES = new_state\n",
" invest = ((initial_money - starting_money) / starting_money) * 100\n",
" total_gains = initial_money - starting_money\n",
" return states_buy, states_sell, total_gains, invest\n",
" \n",
" \n",
" def train(self, iterations, checkpoint, initial_money):\n",
" for i in range(iterations):\n",
" total_profit = 0\n",
" inventory = []\n",
" state = self.get_state(0)\n",
" starting_money = initial_money\n",
" init_value = np.zeros((1, 2 * self.LAYER_SIZE))\n",
" for k in range(self.INITIAL_FEATURES.shape[0]):\n",
" self.INITIAL_FEATURES[k,:] = state\n",
" for t in range(0, len(self.trend) - 1, self.skip):\n",
" \n",
" if np.random.rand() < self.EPSILON:\n",
" action = np.random.randint(self.OUTPUT_SIZE)\n",
" else:\n",
" action, last_state = self.sess.run([self.logits,\n",
" self.last_state],\n",
" feed_dict={self.X:[self.INITIAL_FEATURES],\n",
" self.hidden_layer:init_value})\n",
" action, init_value = np.argmax(action[0]), last_state\n",
" \n",
" next_state = self.get_state(t + 1)\n",
" \n",
" if action == 1 and starting_money >= self.trend[t]:\n",
" inventory.append(self.trend[t])\n",
" starting_money -= self.trend[t]\n",
" \n",
" elif action == 2 and len(inventory) > 0:\n",
" bought_price = inventory.pop(0)\n",
" total_profit += self.trend[t] - bought_price\n",
" starting_money += self.trend[t]\n",
" \n",
" invest = ((starting_money - initial_money) / initial_money)\n",
" new_state = np.append([self.get_state(t + 1)], self.INITIAL_FEATURES[:3, :], axis = 0)\n",
" self._memorize(self.INITIAL_FEATURES, action, invest, new_state, \n",
" starting_money < initial_money, init_value[0])\n",
" self.INITIAL_FEATURES = new_state\n",
" batch_size = min(len(self.MEMORIES), self.BATCH_SIZE)\n",
" replay = random.sample(self.MEMORIES, batch_size)\n",
" X, Y, INIT_VAL = self._construct_memories(replay)\n",
" \n",
" cost, _ = self.sess.run([self.cost, self.optimizer], \n",
" feed_dict={self.X: X, self.Y:Y,\n",
" self.hidden_layer: INIT_VAL})\n",
" self.EPSILON = self.MIN_EPSILON + (1.0 - self.MIN_EPSILON) * np.exp(-self.DECAY_RATE * i)\n",
" \n",
" if (i+1) % checkpoint == 0:\n",
" print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n",
" starting_money))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"WARNING:tensorflow:<tensorflow.python.ops.rnn_cell_impl.LSTMCell object at 0x7fef003b2d30>: Using a concatenated state is slower and will soon be deprecated. Use state_is_tuple=True.\n",
"epoch: 10, total rewards: 449.400388.3, cost: 0.117951, total money: 7420.680355\n",
"epoch: 20, total rewards: 513.109983.3, cost: 0.187314, total money: 7552.130003\n",
"epoch: 30, total rewards: 1755.114813.3, cost: 0.337607, total money: 6759.834784\n",
"epoch: 40, total rewards: 545.719909.3, cost: 0.555657, total money: 9529.079894\n",
"epoch: 50, total rewards: 593.435182.3, cost: 0.399239, total money: 6611.165162\n",
"epoch: 60, total rewards: 285.174678.3, cost: 0.071772, total money: 6314.564631\n",
"epoch: 70, total rewards: 169.200014.3, cost: 0.796504, total money: 4264.030030\n",
"epoch: 80, total rewards: 520.019840.3, cost: 0.567794, total money: 6501.959842\n",
"epoch: 90, total rewards: 498.320189.3, cost: 0.245750, total money: 9481.210204\n",
"epoch: 100, total rewards: 1572.605044.3, cost: 1.142984, total money: 11572.605044\n",
"epoch: 110, total rewards: 297.584960.3, cost: 0.973414, total money: 10297.584960\n",
"epoch: 120, total rewards: 912.394901.3, cost: 2.032860, total money: 6987.034854\n",
"epoch: 130, total rewards: 22.109988.3, cost: 0.097879, total money: 10022.109988\n",
"epoch: 140, total rewards: 471.779909.3, cost: 0.532008, total money: 10471.779909\n",
"epoch: 150, total rewards: 215.255126.3, cost: 0.236825, total money: 10215.255126\n",
"epoch: 160, total rewards: 147.780093.3, cost: 0.432537, total money: 9174.450076\n",
"epoch: 170, total rewards: 203.309817.3, cost: 0.413111, total money: 10203.309817\n",
"epoch: 180, total rewards: 76.350403.3, cost: 0.132205, total money: 8084.520385\n",
"epoch: 190, total rewards: 173.749880.3, cost: 1.325852, total money: 10173.749880\n",
"epoch: 200, total rewards: 4.325196.3, cost: 0.500293, total money: 8987.685181\n"
]
}
],
"source": [
"close = df.Close.values.tolist()\n",
"initial_money = 10000\n",
"window_size = 30\n",
"skip = 1\n",
"batch_size = 32\n",
"agent = Agent(state_size = window_size, \n",
" window_size = window_size, \n",
" trend = close, \n",
" skip = skip)\n",
"agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"day 13: buy 1 unit at price 769.200012, total balance 9230.799988\n",
"day 14: buy 1 unit at price 768.270020, total balance 8462.529968\n",
"day 15, sell 1 unit at price 760.989990, investment -1.067346 %, total balance 9223.519958,\n",
"day 17: buy 1 unit at price 768.239990, total balance 8455.279968\n",
"day 18, sell 1 unit at price 770.840027, investment 0.334519 %, total balance 9226.119995,\n",
"day 19, sell 1 unit at price 758.039978, investment -1.327712 %, total balance 9984.159973,\n",
"day 29: buy 1 unit at price 797.070007, total balance 9187.089966\n",
"day 30: buy 1 unit at price 797.849976, total balance 8389.239990\n",
"day 33, sell 1 unit at price 796.419983, investment -0.081552 %, total balance 9185.659973,\n",
"day 34: buy 1 unit at price 794.559998, total balance 8391.099975\n",
"day 36, sell 1 unit at price 789.909973, investment -0.995175 %, total balance 9181.009948,\n",
"day 37, sell 1 unit at price 791.549988, investment -0.378827 %, total balance 9972.559936,\n",
"day 39: buy 1 unit at price 782.789978, total balance 9189.769958\n",
"day 40, sell 1 unit at price 771.820007, investment -1.401394 %, total balance 9961.589965,\n",
"day 46: buy 1 unit at price 804.789978, total balance 9156.799987\n",
"day 47: buy 1 unit at price 807.909973, total balance 8348.890014\n",
"day 49, sell 1 unit at price 807.880005, investment 0.383954 %, total balance 9156.770019,\n",
"day 50, sell 1 unit at price 804.609985, investment -0.408460 %, total balance 9961.380004,\n",
"day 51: buy 1 unit at price 806.070007, total balance 9155.309997\n",
"day 54, sell 1 unit at price 819.309998, investment 1.642536 %, total balance 9974.619995,\n",
"day 110: buy 1 unit at price 824.320007, total balance 9150.299988\n",
"day 111, sell 1 unit at price 823.559998, investment -0.092198 %, total balance 9973.859986,\n",
"day 128: buy 1 unit at price 932.169983, total balance 9041.690003\n",
"day 129: buy 1 unit at price 928.780029, total balance 8112.909974\n",
"day 130, sell 1 unit at price 930.599976, investment -0.168425 %, total balance 9043.509950,\n",
"day 131, sell 1 unit at price 932.219971, investment 0.370372 %, total balance 9975.729921,\n",
"day 173: buy 1 unit at price 947.159973, total balance 9028.569948\n",
"day 175, sell 1 unit at price 953.419983, investment 0.660924 %, total balance 9981.989931,\n",
"day 182: buy 1 unit at price 947.799988, total balance 9034.189943\n",
"day 183, sell 1 unit at price 934.090027, investment -1.446504 %, total balance 9968.279970,\n",
"day 197: buy 1 unit at price 926.960022, total balance 9041.319948\n",
"day 198, sell 1 unit at price 910.979980, investment -1.723919 %, total balance 9952.299928,\n",
"day 204: buy 1 unit at price 915.890015, total balance 9036.409913\n",
"day 205, sell 1 unit at price 913.809998, investment -0.227103 %, total balance 9950.219911,\n",
"day 207: buy 1 unit at price 929.570007, total balance 9020.649904\n",
"day 209, sell 1 unit at price 937.340027, investment 0.835872 %, total balance 9957.989931,\n"
]
}
],
"source": [
"states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plt.figure(figsize = (15,5))\n",
"plt.plot(close, color='r', lw=2.)\n",
"plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n",
"plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n",
"plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}