添加了Stock-Prediction-Models项目的多个文件,包括数据集、模型代码、README文档和CSS样式文件。这些文件用于股票预测模型的训练和展示,涵盖了LSTM、GRU等深度学习模型的应用。
941 lines
144 KiB
Plaintext
941 lines
144 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 2,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import numpy as np\n",
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import seaborn as sns\n",
|
|
"sns.set()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 21,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 720x360 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"plt.figure(figsize = (10, 5))\n",
|
|
"bins = np.linspace(-10, 10, 100)\n",
|
|
"\n",
|
|
"solution = np.random.randn(100)\n",
|
|
"w = np.random.randn(100)\n",
|
|
"\n",
|
|
"plt.hist(solution, bins, alpha = 0.5, label = 'solution', color = 'r')\n",
|
|
"plt.hist(w, bins, alpha = 0.5, label = 'random', color = 'y')\n",
|
|
"plt.legend()\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 22,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"iter 1000. w: 0.0952791586701015, solution: 0.5720518054873052, reward: -20.148099\n",
|
|
"iter 2000. w: 0.5750455468679501, solution: 0.5720518054873052, reward: -0.008058\n",
|
|
"iter 3000. w: 0.5751585748688035, solution: 0.5720518054873052, reward: -0.008793\n",
|
|
"iter 4000. w: 0.5665604300033952, solution: 0.5720518054873052, reward: -0.007711\n",
|
|
"iter 5000. w: 0.5619489293298067, solution: 0.5720518054873052, reward: -0.005604\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"def f(w):\n",
|
|
" return -np.sum(np.square(solution - w))\n",
|
|
"\n",
|
|
"\n",
|
|
"npop = 50\n",
|
|
"sigma = 0.1\n",
|
|
"alpha = 0.001\n",
|
|
"\n",
|
|
"for i in range(5000):\n",
|
|
"\n",
|
|
" if (i + 1) % 1000 == 0:\n",
|
|
" print(\n",
|
|
" 'iter %d. w: %s, solution: %s, reward: %f'\n",
|
|
" % (i + 1, str(w[-1]), str(solution[-1]), f(w))\n",
|
|
" )\n",
|
|
" N = np.random.randn(npop, 100)\n",
|
|
" R = np.zeros(npop)\n",
|
|
" for j in range(npop):\n",
|
|
" w_try = w + sigma * N[j]\n",
|
|
" R[j] = f(w_try)\n",
|
|
"\n",
|
|
" A = (R - np.mean(R)) / np.std(R)\n",
|
|
" w = w + alpha / (npop * sigma) * np.dot(N.T, A)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 12,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"image/png": "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\n",
|
|
"text/plain": [
|
|
"<Figure size 720x360 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"'''\n",
|
|
"I want to compare my first two individuals with my real w\n",
|
|
"'''\n",
|
|
"plt.figure(figsize=(10,5))\n",
|
|
"\n",
|
|
"sigma = 0.1\n",
|
|
"N = np.random.randn(npop, 100)\n",
|
|
"individuals = []\n",
|
|
"for j in range(2):\n",
|
|
" individuals.append(w + sigma * N[j])\n",
|
|
" \n",
|
|
" \n",
|
|
"plt.hist(w, bins, alpha=0.5, label='w',color='r')\n",
|
|
"plt.hist(individuals[0], bins, alpha=0.5, label='individual 1')\n",
|
|
"plt.hist(individuals[1], bins, alpha=0.5, label='individual 2')\n",
|
|
"plt.legend()\n",
|
|
"plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 29,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"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>2017-10-16</td>\n",
|
|
" <td>992.099976</td>\n",
|
|
" <td>993.906982</td>\n",
|
|
" <td>984.000000</td>\n",
|
|
" <td>992.000000</td>\n",
|
|
" <td>992.000000</td>\n",
|
|
" <td>910500</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>1</th>\n",
|
|
" <td>2017-10-17</td>\n",
|
|
" <td>990.289978</td>\n",
|
|
" <td>996.440002</td>\n",
|
|
" <td>988.590027</td>\n",
|
|
" <td>992.179993</td>\n",
|
|
" <td>992.179993</td>\n",
|
|
" <td>1290200</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>2</th>\n",
|
|
" <td>2017-10-18</td>\n",
|
|
" <td>991.770020</td>\n",
|
|
" <td>996.719971</td>\n",
|
|
" <td>986.974976</td>\n",
|
|
" <td>992.809998</td>\n",
|
|
" <td>992.809998</td>\n",
|
|
" <td>1057600</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>3</th>\n",
|
|
" <td>2017-10-19</td>\n",
|
|
" <td>986.000000</td>\n",
|
|
" <td>988.880005</td>\n",
|
|
" <td>978.390015</td>\n",
|
|
" <td>984.450012</td>\n",
|
|
" <td>984.450012</td>\n",
|
|
" <td>1313600</td>\n",
|
|
" </tr>\n",
|
|
" <tr>\n",
|
|
" <th>4</th>\n",
|
|
" <td>2017-10-20</td>\n",
|
|
" <td>989.440002</td>\n",
|
|
" <td>991.000000</td>\n",
|
|
" <td>984.580017</td>\n",
|
|
" <td>988.200012</td>\n",
|
|
" <td>988.200012</td>\n",
|
|
" <td>1183200</td>\n",
|
|
" </tr>\n",
|
|
" </tbody>\n",
|
|
"</table>\n",
|
|
"</div>"
|
|
],
|
|
"text/plain": [
|
|
" Date Open High Low Close Adj Close \\\n",
|
|
"0 2017-10-16 992.099976 993.906982 984.000000 992.000000 992.000000 \n",
|
|
"1 2017-10-17 990.289978 996.440002 988.590027 992.179993 992.179993 \n",
|
|
"2 2017-10-18 991.770020 996.719971 986.974976 992.809998 992.809998 \n",
|
|
"3 2017-10-19 986.000000 988.880005 978.390015 984.450012 984.450012 \n",
|
|
"4 2017-10-20 989.440002 991.000000 984.580017 988.200012 988.200012 \n",
|
|
"\n",
|
|
" Volume \n",
|
|
"0 910500 \n",
|
|
"1 1290200 \n",
|
|
"2 1057600 \n",
|
|
"3 1313600 \n",
|
|
"4 1183200 "
|
|
]
|
|
},
|
|
"execution_count": 29,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"import pandas as pd\n",
|
|
"google = pd.read_csv('/Users/huseinzolkepli/Desktop/GOOG.csv')\n",
|
|
"google.head()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 58,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"def get_state(data, t, n):\n",
|
|
" d = t - n + 1\n",
|
|
" block = data[d : t + 1] if d >= 0 else -d * [data[0]] + data[: t + 1]\n",
|
|
" res = []\n",
|
|
" for i in range(n - 1):\n",
|
|
" res.append(block[i + 1] - block[i])\n",
|
|
" return np.array([res])"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 60,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([[0., 0., 0., 0., 0., 0., 0., 0., 0.]])"
|
|
]
|
|
},
|
|
"execution_count": 60,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"close = google.Close.values.tolist()\n",
|
|
"get_state(close, 0, 10)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 61,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([[0. , 0. , 0. , 0. , 0. , 0. ,\n",
|
|
" 0. , 0. , 0.179993]])"
|
|
]
|
|
},
|
|
"execution_count": 61,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"get_state(close, 1, 10)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 62,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"array([[0. , 0. , 0. , 0. , 0. , 0. ,\n",
|
|
" 0. , 0.179993, 0.630005]])"
|
|
]
|
|
},
|
|
"execution_count": 62,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"get_state(close, 2, 10)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 63,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class Deep_Evolution_Strategy:\n",
|
|
" def __init__(\n",
|
|
" self, weights, reward_function, population_size, sigma, learning_rate\n",
|
|
" ):\n",
|
|
" self.weights = weights\n",
|
|
" self.reward_function = reward_function\n",
|
|
" self.population_size = population_size\n",
|
|
" self.sigma = sigma\n",
|
|
" self.learning_rate = learning_rate\n",
|
|
"\n",
|
|
" def _get_weight_from_population(self, weights, population):\n",
|
|
" weights_population = []\n",
|
|
" for index, i in enumerate(population):\n",
|
|
" jittered = self.sigma * i\n",
|
|
" weights_population.append(weights[index] + jittered)\n",
|
|
" return weights_population\n",
|
|
"\n",
|
|
" def get_weights(self):\n",
|
|
" return self.weights\n",
|
|
"\n",
|
|
" def train(self, epoch = 100, print_every = 1):\n",
|
|
" lasttime = time.time()\n",
|
|
" for i in range(epoch):\n",
|
|
" population = []\n",
|
|
" rewards = np.zeros(self.population_size)\n",
|
|
" for k in range(self.population_size):\n",
|
|
" x = []\n",
|
|
" for w in self.weights:\n",
|
|
" x.append(np.random.randn(*w.shape))\n",
|
|
" population.append(x)\n",
|
|
" for k in range(self.population_size):\n",
|
|
" weights_population = self._get_weight_from_population(\n",
|
|
" self.weights, population[k]\n",
|
|
" )\n",
|
|
" rewards[k] = self.reward_function(weights_population)\n",
|
|
" rewards = (rewards - np.mean(rewards)) / np.std(rewards)\n",
|
|
" for index, w in enumerate(self.weights):\n",
|
|
" A = np.array([p[index] for p in population])\n",
|
|
" self.weights[index] = (\n",
|
|
" w\n",
|
|
" + self.learning_rate\n",
|
|
" / (self.population_size * self.sigma)\n",
|
|
" * np.dot(A.T, rewards).T\n",
|
|
" )\n",
|
|
" if (i + 1) % print_every == 0:\n",
|
|
" print(\n",
|
|
" 'iter %d. reward: %f'\n",
|
|
" % (i + 1, self.reward_function(self.weights))\n",
|
|
" )\n",
|
|
" print('time taken to train:', time.time() - lasttime, 'seconds')"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 64,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"class Model:\n",
|
|
" def __init__(self, input_size, layer_size, output_size):\n",
|
|
" self.weights = [\n",
|
|
" np.random.randn(input_size, layer_size),\n",
|
|
" np.random.randn(layer_size, output_size),\n",
|
|
" np.random.randn(layer_size, 1),\n",
|
|
" np.random.randn(1, layer_size),\n",
|
|
" ]\n",
|
|
"\n",
|
|
" def predict(self, inputs):\n",
|
|
" feed = np.dot(inputs, self.weights[0]) + self.weights[-1]\n",
|
|
" decision = np.dot(feed, self.weights[1])\n",
|
|
" buy = np.dot(feed, self.weights[2])\n",
|
|
" return decision, buy\n",
|
|
"\n",
|
|
" def get_weights(self):\n",
|
|
" return self.weights\n",
|
|
"\n",
|
|
" def set_weights(self, weights):\n",
|
|
" self.weights = weights"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 65,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"window_size = 30\n",
|
|
"model = Model(window_size, 500, 3)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 67,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"-89.2658852200001"
|
|
]
|
|
},
|
|
"execution_count": 67,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"initial_money = 10000\n",
|
|
"starting_money = initial_money\n",
|
|
"len_close = len(close) - 1\n",
|
|
"weight = model\n",
|
|
"skip = 1\n",
|
|
"\n",
|
|
"state = get_state(close, 0, window_size + 1)\n",
|
|
"inventory = []\n",
|
|
"quantity = 0\n",
|
|
"\n",
|
|
"max_buy = 5\n",
|
|
"max_sell = 5\n",
|
|
"\n",
|
|
"\n",
|
|
"def act(model, sequence):\n",
|
|
" decision, buy = model.predict(np.array(sequence))\n",
|
|
" return np.argmax(decision[0]), int(buy[0])\n",
|
|
"\n",
|
|
"\n",
|
|
"for t in range(0, len_close, skip):\n",
|
|
" action, buy = act(weight, state)\n",
|
|
" next_state = get_state(close, t + 1, window_size + 1)\n",
|
|
" if action == 1 and initial_money >= close[t]:\n",
|
|
" if buy < 0:\n",
|
|
" buy = 1\n",
|
|
" if buy > max_buy:\n",
|
|
" buy_units = max_buy\n",
|
|
" else:\n",
|
|
" buy_units = buy\n",
|
|
" total_buy = buy_units * close[t]\n",
|
|
" initial_money -= total_buy\n",
|
|
" inventory.append(total_buy)\n",
|
|
" quantity += buy_units\n",
|
|
" elif action == 2 and len(inventory) > 0:\n",
|
|
" if quantity > max_sell:\n",
|
|
" sell_units = max_sell\n",
|
|
" else:\n",
|
|
" sell_units = quantity\n",
|
|
" quantity -= sell_units\n",
|
|
" total_sell = sell_units * close[t]\n",
|
|
" initial_money += total_sell\n",
|
|
"\n",
|
|
" state = next_state\n",
|
|
"((initial_money - starting_money) / starting_money) * 100"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 77,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"import time\n",
|
|
"\n",
|
|
"\n",
|
|
"class Agent:\n",
|
|
"\n",
|
|
" POPULATION_SIZE = 15\n",
|
|
" SIGMA = 0.1\n",
|
|
" LEARNING_RATE = 0.03\n",
|
|
"\n",
|
|
" def __init__(\n",
|
|
" self, model, money, max_buy, max_sell, close, window_size, skip\n",
|
|
" ):\n",
|
|
" self.window_size = window_size\n",
|
|
" self.skip = skip\n",
|
|
" self.close = close\n",
|
|
" self.model = model\n",
|
|
" self.initial_money = money\n",
|
|
" self.max_buy = max_buy\n",
|
|
" self.max_sell = max_sell\n",
|
|
" self.es = Deep_Evolution_Strategy(\n",
|
|
" self.model.get_weights(),\n",
|
|
" self.get_reward,\n",
|
|
" self.POPULATION_SIZE,\n",
|
|
" self.SIGMA,\n",
|
|
" self.LEARNING_RATE,\n",
|
|
" )\n",
|
|
"\n",
|
|
" def act(self, sequence):\n",
|
|
" decision, buy = self.model.predict(np.array(sequence))\n",
|
|
" return np.argmax(decision[0]), int(buy[0])\n",
|
|
"\n",
|
|
" def get_reward(self, weights):\n",
|
|
" initial_money = self.initial_money\n",
|
|
" starting_money = initial_money\n",
|
|
" len_close = len(self.close) - 1\n",
|
|
"\n",
|
|
" self.model.weights = weights\n",
|
|
" state = get_state(self.close, 0, self.window_size + 1)\n",
|
|
" inventory = []\n",
|
|
" quantity = 0\n",
|
|
" for t in range(0, len_close, self.skip):\n",
|
|
" action, buy = self.act(state)\n",
|
|
" next_state = get_state(self.close, t + 1, self.window_size + 1)\n",
|
|
" if action == 1 and initial_money >= self.close[t]:\n",
|
|
" if buy < 0:\n",
|
|
" buy = 1\n",
|
|
" if buy > self.max_buy:\n",
|
|
" buy_units = self.max_buy\n",
|
|
" else:\n",
|
|
" buy_units = buy\n",
|
|
" total_buy = buy_units * self.close[t]\n",
|
|
" initial_money -= total_buy\n",
|
|
" inventory.append(total_buy)\n",
|
|
" quantity += buy_units\n",
|
|
" elif action == 2 and len(inventory) > 0:\n",
|
|
" if quantity > self.max_sell:\n",
|
|
" sell_units = self.max_sell\n",
|
|
" else:\n",
|
|
" sell_units = quantity\n",
|
|
" quantity -= sell_units\n",
|
|
" total_sell = sell_units * self.close[t]\n",
|
|
" initial_money += total_sell\n",
|
|
"\n",
|
|
" state = next_state\n",
|
|
" return ((initial_money - starting_money) / starting_money) * 100\n",
|
|
"\n",
|
|
" def fit(self, iterations, checkpoint):\n",
|
|
" self.es.train(iterations, print_every = checkpoint)\n",
|
|
"\n",
|
|
" def buy(self):\n",
|
|
" initial_money = self.initial_money\n",
|
|
" len_close = len(self.close) - 1\n",
|
|
" state = get_state(self.close, 0, self.window_size + 1)\n",
|
|
" starting_money = initial_money\n",
|
|
" states_sell = []\n",
|
|
" states_buy = []\n",
|
|
" inventory = []\n",
|
|
" quantity = 0\n",
|
|
" for t in range(0, len_close, self.skip):\n",
|
|
" action, buy = self.act(state)\n",
|
|
" next_state = get_state(self.close, t + 1, self.window_size + 1)\n",
|
|
" if action == 1 and initial_money >= self.close[t]:\n",
|
|
" if buy < 0:\n",
|
|
" buy = 1\n",
|
|
" if buy > self.max_buy:\n",
|
|
" buy_units = self.max_buy\n",
|
|
" else:\n",
|
|
" buy_units = buy\n",
|
|
" total_buy = buy_units * self.close[t]\n",
|
|
" initial_money -= total_buy\n",
|
|
" inventory.append(total_buy)\n",
|
|
" quantity += buy_units\n",
|
|
" states_buy.append(t)\n",
|
|
" print(\n",
|
|
" 'day %d: buy %d units at price %f, total balance %f'\n",
|
|
" % (t, buy_units, total_buy, initial_money)\n",
|
|
" )\n",
|
|
" elif action == 2 and len(inventory) > 0:\n",
|
|
" bought_price = inventory.pop(0)\n",
|
|
" if quantity > self.max_sell:\n",
|
|
" sell_units = self.max_sell\n",
|
|
" else:\n",
|
|
" sell_units = quantity\n",
|
|
" if sell_units < 1:\n",
|
|
" continue\n",
|
|
" quantity -= sell_units\n",
|
|
" total_sell = sell_units * self.close[t]\n",
|
|
" initial_money += total_sell\n",
|
|
" states_sell.append(t)\n",
|
|
" try:\n",
|
|
" invest = ((total_sell - bought_price) / bought_price) * 100\n",
|
|
" except:\n",
|
|
" invest = 0\n",
|
|
" print(\n",
|
|
" 'day %d, sell %d units at price %f, investment %f %%, total balance %f,'\n",
|
|
" % (t, sell_units, total_sell, invest, initial_money)\n",
|
|
" )\n",
|
|
" state = next_state\n",
|
|
"\n",
|
|
" invest = ((initial_money - starting_money) / starting_money) * 100\n",
|
|
" print(\n",
|
|
" '\\ntotal gained %f, total investment %f %%'\n",
|
|
" % (initial_money - starting_money, invest)\n",
|
|
" )\n",
|
|
" plt.figure(figsize = (20, 10))\n",
|
|
" plt.plot(close, label = 'true close', c = 'g')\n",
|
|
" plt.plot(\n",
|
|
" close, 'X', label = 'predict buy', markevery = states_buy, c = 'b'\n",
|
|
" )\n",
|
|
" plt.plot(\n",
|
|
" close, 'o', label = 'predict sell', markevery = states_sell, c = 'r'\n",
|
|
" )\n",
|
|
" plt.legend()\n",
|
|
" plt.show()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 78,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": [
|
|
"model = Model(input_size = window_size, layer_size = 500, output_size = 3)\n",
|
|
"agent = Agent(\n",
|
|
" model = model,\n",
|
|
" money = 10000,\n",
|
|
" max_buy = 5,\n",
|
|
" max_sell = 5,\n",
|
|
" close = close,\n",
|
|
" window_size = window_size,\n",
|
|
" skip = 1,\n",
|
|
")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 79,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"iter 10. reward: 36.181611\n",
|
|
"iter 20. reward: 50.767101\n",
|
|
"iter 30. reward: 65.467698\n",
|
|
"iter 40. reward: 71.316103\n",
|
|
"iter 50. reward: 82.881994\n",
|
|
"iter 60. reward: 84.293704\n",
|
|
"iter 70. reward: 78.501997\n",
|
|
"iter 80. reward: 94.488579\n",
|
|
"iter 90. reward: 86.526799\n",
|
|
"iter 100. reward: 85.882890\n",
|
|
"iter 110. reward: 86.063284\n",
|
|
"iter 120. reward: 90.334301\n",
|
|
"iter 130. reward: 85.850098\n",
|
|
"iter 140. reward: 91.399606\n",
|
|
"iter 150. reward: 87.862805\n",
|
|
"iter 160. reward: 97.226486\n",
|
|
"iter 170. reward: 86.767297\n",
|
|
"iter 180. reward: 97.016782\n",
|
|
"iter 190. reward: 97.843791\n",
|
|
"iter 200. reward: 89.146606\n",
|
|
"iter 210. reward: 96.508885\n",
|
|
"iter 220. reward: 97.765979\n",
|
|
"iter 230. reward: 98.256375\n",
|
|
"iter 240. reward: 99.942482\n",
|
|
"iter 250. reward: 94.536183\n",
|
|
"iter 260. reward: 96.916185\n",
|
|
"iter 270. reward: 93.193185\n",
|
|
"iter 280. reward: 100.844085\n",
|
|
"iter 290. reward: 100.994682\n",
|
|
"iter 300. reward: 101.523774\n",
|
|
"iter 310. reward: 102.090896\n",
|
|
"iter 320. reward: 102.176091\n",
|
|
"iter 330. reward: 92.306981\n",
|
|
"iter 340. reward: 105.409190\n",
|
|
"iter 350. reward: 103.159886\n",
|
|
"iter 360. reward: 99.091287\n",
|
|
"iter 370. reward: 108.475085\n",
|
|
"iter 380. reward: 102.349682\n",
|
|
"iter 390. reward: 110.289382\n",
|
|
"iter 400. reward: 103.371389\n",
|
|
"iter 410. reward: 110.951287\n",
|
|
"iter 420. reward: 111.561078\n",
|
|
"iter 430. reward: 112.275285\n",
|
|
"iter 440. reward: 113.112587\n",
|
|
"iter 450. reward: 110.838887\n",
|
|
"iter 460. reward: 111.243782\n",
|
|
"iter 470. reward: 112.924874\n",
|
|
"iter 480. reward: 111.705677\n",
|
|
"iter 490. reward: 110.903074\n",
|
|
"iter 500. reward: 112.986871\n",
|
|
"time taken to train: 60.56475520133972 seconds\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"agent.fit(iterations = 500, checkpoint = 10)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 80,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"day 0: buy 1 units at price 992.000000, total balance 9008.000000\n",
|
|
"day 1: buy 1 units at price 992.179993, total balance 8015.820007\n",
|
|
"day 2: buy 1 units at price 992.809998, total balance 7023.010009\n",
|
|
"day 3: buy 5 units at price 4922.250060, total balance 2100.759949\n",
|
|
"day 4, sell 5 units at price 4941.000060, investment 398.084683 %, total balance 7041.760009,\n",
|
|
"day 5: buy 5 units at price 4842.250060, total balance 2199.509949\n",
|
|
"day 7: buy 5 units at price 4866.650085, total balance -2667.140136\n",
|
|
"day 9, sell 5 units at price 5096.350100, investment 413.651770 %, total balance 2429.209964,\n",
|
|
"day 10: buy 5 units at price 5085.549925, total balance -2656.339961\n",
|
|
"day 12, sell 5 units at price 5127.500000, investment 416.463373 %, total balance 2471.160039,\n",
|
|
"day 13, sell 5 units at price 5127.899780, investment 4.177962 %, total balance 7599.059819,\n",
|
|
"day 14, sell 3 units at price 3097.439940, investment -36.033045 %, total balance 10696.499759,\n",
|
|
"day 22: buy 1 units at price 1020.909973, total balance 9675.589786\n",
|
|
"day 24: buy 1 units at price 1019.090027, total balance 8656.499759\n",
|
|
"day 25: buy 5 units at price 5091.900025, total balance 3564.599734\n",
|
|
"day 27: buy 5 units at price 5179.799805, total balance -1615.200071\n",
|
|
"day 29, sell 5 units at price 5271.049805, investment 416.308974 %, total balance 3655.849734,\n",
|
|
"day 30, sell 5 units at price 5237.050170, investment 413.894752 %, total balance 8892.899904,\n",
|
|
"day 33: buy 5 units at price 5050.849915, total balance 3842.049989\n",
|
|
"day 35: buy 5 units at price 5025.750120, total balance -1183.700131\n",
|
|
"day 42, sell 5 units at price 5245.750120, investment 3.021467 %, total balance 4062.049989,\n",
|
|
"day 43, sell 5 units at price 5320.949705, investment 2.725007 %, total balance 9382.999694,\n",
|
|
"day 44, sell 2 units at price 2154.280030, investment -57.348168 %, total balance 11537.279724,\n",
|
|
"day 45: buy 1 units at price 1070.680054, total balance 10466.599670\n",
|
|
"day 48: buy 1 units at price 1060.119995, total balance 9406.479675\n",
|
|
"day 51: buy 5 units at price 5240.700075, total balance 4165.779600\n",
|
|
"day 52: buy 5 units at price 5232.000120, total balance -1066.220520\n",
|
|
"day 56, sell 5 units at price 5511.149900, investment 9.658255 %, total balance 4444.929380,\n",
|
|
"day 57, sell 5 units at price 5534.699705, investment 416.933110 %, total balance 9979.629085,\n",
|
|
"day 58, sell 2 units at price 2212.520020, investment 108.704678 %, total balance 12192.149105,\n",
|
|
"day 59: buy 5 units at price 5513.049925, total balance 6679.099180\n",
|
|
"day 60: buy 5 units at price 5527.600100, total balance 1151.499080\n",
|
|
"day 62: buy 5 units at price 5608.800050, total balance -4457.300970\n",
|
|
"day 69, sell 5 units at price 5851.849975, investment 11.661608 %, total balance 1394.549005,\n",
|
|
"day 70, sell 5 units at price 5879.199830, investment 12.370025 %, total balance 7273.748835,\n",
|
|
"day 71, sell 5 units at price 5877.899780, investment 6.617931 %, total balance 13151.648615,\n",
|
|
"day 72: buy 5 units at price 5818.449705, total balance 7333.198910\n",
|
|
"day 73, sell 5 units at price 5849.699705, investment 5.827115 %, total balance 13182.898615,\n",
|
|
"day 78: buy 5 units at price 5242.899780, total balance 7939.998835\n",
|
|
"day 79: buy 5 units at price 5007.600100, total balance 2932.398735\n",
|
|
"day 80: buy 5 units at price 5188.900145, total balance -2256.501410\n",
|
|
"day 87, sell 5 units at price 5556.699830, investment -0.928901 %, total balance 3300.198420,\n",
|
|
"day 89: buy 1 units at price 1126.790039, total balance 2173.408381\n",
|
|
"day 90, sell 5 units at price 5718.750000, investment -1.713510 %, total balance 7892.158381,\n",
|
|
"day 93: buy 5 units at price 5347.600100, total balance 2544.558281\n",
|
|
"day 96: buy 5 units at price 5475.300295, total balance -2930.742014\n",
|
|
"day 98, sell 5 units at price 5630.000000, investment 7.383323 %, total balance 2699.257986,\n",
|
|
"day 99, sell 5 units at price 5800.200195, investment 15.827943 %, total balance 8499.458181,\n",
|
|
"day 100, sell 5 units at price 5822.500000, investment 12.210677 %, total balance 14321.958181,\n",
|
|
"day 101: buy 1 units at price 1138.170044, total balance 13183.788137\n",
|
|
"day 102, sell 2 units at price 2298.979980, investment 104.029136 %, total balance 15482.768117,\n",
|
|
"day 111: buy 5 units at price 5025.499880, total balance 10457.268237\n",
|
|
"day 113: buy 5 units at price 5158.950195, total balance 5298.318042\n",
|
|
"day 114: buy 5 units at price 5032.349855, total balance 265.968187\n",
|
|
"day 116, sell 5 units at price 5125.700075, investment 1.993835 %, total balance 5391.668262,\n",
|
|
"day 118: buy 1 units at price 1007.039978, total balance 4384.628284\n",
|
|
"day 119: buy 5 units at price 5077.250060, total balance -692.621776\n",
|
|
"day 126, sell 5 units at price 5360.399780, investment 3.904856 %, total balance 4667.778004,\n",
|
|
"day 128, sell 5 units at price 5364.799805, investment 6.606257 %, total balance 10032.577809,\n",
|
|
"day 129, sell 5 units at price 5337.249755, investment 429.993831 %, total balance 15369.827564,\n",
|
|
"day 131, sell 1 units at price 1021.179993, investment -79.887144 %, total balance 16391.007557,\n",
|
|
"day 132: buy 1 units at price 1040.040039, total balance 15350.967518\n",
|
|
"day 135, sell 1 units at price 1037.310059, investment -0.262488 %, total balance 16388.277577,\n",
|
|
"day 136: buy 5 units at price 5121.900025, total balance 11266.377552\n",
|
|
"day 137: buy 1 units at price 1023.719971, total balance 10242.657581\n",
|
|
"day 138: buy 5 units at price 5241.049805, total balance 5001.607776\n",
|
|
"day 139: buy 5 units at price 5273.950195, total balance -272.342419\n",
|
|
"day 141, sell 5 units at price 5413.800050, investment 5.699057 %, total balance 5141.457631,\n",
|
|
"day 142, sell 5 units at price 5487.849730, investment 436.069422 %, total balance 10629.307361,\n",
|
|
"day 144: buy 1 units at price 1100.199951, total balance 9529.107410\n",
|
|
"day 147: buy 1 units at price 1078.589966, total balance 8450.517444\n",
|
|
"day 148: buy 5 units at price 5331.799925, total balance 3118.717519\n",
|
|
"day 150: buy 5 units at price 5348.649900, total balance -2229.932381\n",
|
|
"day 159, sell 5 units at price 5698.300170, investment 8.724404 %, total balance 3468.367789,\n",
|
|
"day 161, sell 5 units at price 5619.299925, investment 6.548218 %, total balance 9087.667714,\n",
|
|
"day 162: buy 5 units at price 5604.349975, total balance 3483.317739\n",
|
|
"day 168: buy 1 units at price 1173.459961, total balance 2309.857778\n",
|
|
"day 170, sell 5 units at price 5849.199830, investment 431.648799 %, total balance 8159.057608,\n",
|
|
"day 171, sell 5 units at price 5788.300170, investment 436.654368 %, total balance 13947.357778,\n",
|
|
"day 172, sell 4 units at price 4621.919920, investment -13.314078 %, total balance 18569.277698,\n",
|
|
"day 173: buy 5 units at price 5624.050295, total balance 12945.227403\n",
|
|
"day 175: buy 5 units at price 5519.899900, total balance 7425.327503\n",
|
|
"day 176: buy 5 units at price 5571.099855, total balance 1854.227648\n",
|
|
"day 179: buy 5 units at price 5514.450075, total balance -3660.222427\n",
|
|
"day 184, sell 5 units at price 5769.500120, investment 7.868345 %, total balance 2109.277693,\n",
|
|
"day 187: buy 5 units at price 5919.299925, total balance -3810.022232\n",
|
|
"day 194, sell 5 units at price 6318.499755, investment 12.742776 %, total balance 2508.477523,\n",
|
|
"day 195, sell 5 units at price 6341.649780, investment 440.423192 %, total balance 8850.127303,\n",
|
|
"day 196, sell 5 units at price 6192.500000, investment 10.107479 %, total balance 15042.627303,\n",
|
|
"day 197, sell 5 units at price 6098.699950, investment 10.485698 %, total balance 21141.327253,\n",
|
|
"day 204: buy 5 units at price 6228.049925, total balance 14913.277328\n",
|
|
"day 205: buy 5 units at price 6245.499880, total balance 8667.777448\n",
|
|
"day 206: buy 5 units at price 6188.049925, total balance 2479.727523\n",
|
|
"day 207, sell 5 units at price 6175.050050, investment -0.850987 %, total balance 8654.777573,\n",
|
|
"day 208, sell 5 units at price 6210.499880, investment -0.560404 %, total balance 14865.277453,\n",
|
|
"day 209: buy 5 units at price 6071.900025, total balance 8793.377428\n",
|
|
"day 210: buy 5 units at price 6032.449950, total balance 2760.927478\n",
|
|
"day 211: buy 5 units at price 6004.799805, total balance -3243.872327\n",
|
|
"day 219, sell 5 units at price 6246.500245, investment 0.944568 %, total balance 3002.627918,\n",
|
|
"day 220, sell 5 units at price 6195.599975, investment 2.037253 %, total balance 9198.227893,\n",
|
|
"day 221, sell 5 units at price 6090.949705, investment 0.969751 %, total balance 15289.177598,\n",
|
|
"day 227: buy 1 units at price 1177.359985, total balance 14111.817613\n",
|
|
"day 229: buy 5 units at price 5876.649780, total balance 8235.167833\n",
|
|
"day 230: buy 5 units at price 5862.650145, total balance 2372.517688\n",
|
|
"day 231: buy 1 units at price 1156.050049, total balance 1216.467639\n",
|
|
"day 232: buy 1 units at price 1161.219971, total balance 55.247668\n",
|
|
"day 233, sell 5 units at price 5855.449830, investment -2.487177 %, total balance 5910.697498,\n",
|
|
"day 234, sell 5 units at price 5934.349975, investment 404.038701 %, total balance 11845.047473,\n",
|
|
"day 235: buy 5 units at price 5830.449830, total balance 6014.597643\n",
|
|
"day 238: buy 1 units at price 1180.489990, total balance 4834.107653\n",
|
|
"day 242, sell 5 units at price 6000.549925, investment 2.108347 %, total balance 10834.657578,\n",
|
|
"day 243, sell 5 units at price 6014.749755, investment 2.594383 %, total balance 16849.407333,\n",
|
|
"day 245, sell 4 units at price 4629.399904, investment 300.449782 %, total balance 21478.807237,\n",
|
|
"\n",
|
|
"total gained 11478.807237, total investment 114.788072 %\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAABJIAAAJHCAYAAADLzny5AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4wLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvqOYd8AAAIABJREFUeJzs3Xl8lOW9///XPVu2yTZJSEDZlXGrgqIgorSenkNrW49Cj1IrirYu9bjUYu2v59Sebnaxek61HttTN1zK97QKerBaW9tqVRAVRdxgEIGAZJ2ZJJNkMpnM3Pfvj0kCkUAmyyxJ3s/Hg0eTa+655pqQGx/z7uf6XIZlWYiIiIiIiIiIiAzElukFiIiIiIiIiIjI6KAgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkqIgSUREREREREREkuLI9AKSkAOcCtQC8QyvRURERERERERkLLADE4HXgc5knzQagqRTgZcyvQgRERERERERkTHoTODlZC8eDUFSLUBTUzumaWV6LcNWVuYmEGjL9DJEsp7uFZHk6F4RSY7uFZHk6F4RGdhYuU9sNoPS0gLozl2SNRqCpDiAaVpjIkgCxsz7EEk13SsiydG9IpIc3SsiydG9IjKwMXafDKqNkJpti4iIiIiIiIhIUhQkiYiIiIiIiIhIUkbD1jYRERERERERGSPi8RhNTY3EYtFML2VIGhpsmKaZ6WUkzWazk5fnxu0uxjCMYc+nIElERERERERE0qapqZHc3HwKCqpGJNhIN4fDRiw2OoIky7KIx2O0tjbT1NSIxzNh2HNqa5uIiIiIiIiIpE0sFqWgoGhUhkijjWEYOBxOSkrKiEYjIzKngiQRERERERERSSuFSOllGDZgZE6aU5AkIiIiIiIiIiJJUZAkIiIiIiIiIuNSW1sb3/72yrS93q23fo9nnnkqba+XCgqSRERERERERGRcam0N8cEH2zO9jFFFp7aJiIiIiIiIyLj0i1/8HL+/kW9/+yauv/4brFx5HcXFJbhcOSxe/Fk2b36Df//37wFw7bVXcvnlV3LaaafxyCOreP7554jHTebN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IiKSxeraG6jKr8AwjD7jbpcbgLautkwsS0TGKQVJIiIiIiIiWaw+3Ejlx7a1Abi7K5LUcFtE0klBkoiIiIiISJaKxDpp6mymqqCfIKm7R1KrKpJEssatt36PZ555Cr+/kZtuuv6w11533VXDfr377/8f7r//fwBYuDA9TcPV2l9ERERERCRLNYQbAfqtSMp35GEzbKpIknEhtHED/rVriAUDODxllC9ZStH8BZle1iGVl1dw++13HfaazZvfSNNqRpaCJBERERERkSxVF06c2FaZX3HQYzbDRoEzXz2SZMwLbdxA/cOrsKJRAGLBAPUPrwIYdpj05pubeOCB32C3O2hoqOO4447nW9+6hUDAz8qV11FcXILLlcN//ucvueeeO9m8+Q1M0+Szn/08F174ZSzL4u67/4v161+mvLwc0zSZM+cUamtruO66q3j88aeoq6vlxz/+Pk1NQXJzc/nWt27hD394EoArrriUe+99qHc9sViMn/zk++zc+SEA55//L5x77vkEgwF+/vMfU19fj81m46qr/pVTT503rPc+VAqSREREREREslR9uBGbYaMiv7zfxwudblUkyZjnX7umN0TqYUWj+NeuGZGqpPfff49Vq37L5MlTueWW/4+1a3/PokVns2dPNY899ksmTpzEk08+DsADD/wW04xx/fXXcMwxxxEMBti+3cejj/6e1tZWVqxYdtD8d9zxUxYtOpulSy/glVde5qGH7ueHP/wpjz/+uz4hEsA772whFArx4IOraWlp5u67f8G5557PnXfezuc+dy4LFy7C7/dzzTVfYdWq1cN+70OhIElERERERCRL1bU3UJ7rwWnr/6Ob21lAa5eCJBnbYsHAoMYHa/bsOUyZMg2Az3zmHNate4JFi86mtNTDxImTANi06TU++GA7b7yxCcOAcDjMhx/uYPfunSxa9CkcDgelpaXMn3/GQfO/9dabfO97twJw+ukLOf30hYdcy4wZM9mzp5pvfONa5s8/g6997bre16+urua++xL9kGKxGPv2fTQi73+wFCSJiIiIiIhkqfpwA5X9NNru4XYV8FFbTRpXJJJ+Dk9Zv6GRw1M2IvPb7fber03T6v0+JyendzweN7nmmutZtOhsHA4bfn+QvLxc7rnnLkzT6neu/WP7oxfLsti9exfTp8/ody3FxSU88sjvef31V3nllfVcfvnF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\n",
|
|
"text/plain": [
|
|
"<Figure size 1440x720 with 1 Axes>"
|
|
]
|
|
},
|
|
"metadata": {
|
|
"needs_background": "light"
|
|
},
|
|
"output_type": "display_data"
|
|
}
|
|
],
|
|
"source": [
|
|
"agent.buy()"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"metadata": {
|
|
"inputHidden": false,
|
|
"outputHidden": false
|
|
},
|
|
"outputs": [],
|
|
"source": []
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernel_info": {
|
|
"name": "python3"
|
|
},
|
|
"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"
|
|
},
|
|
"nteract": {
|
|
"version": "0.11.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 4
|
|
}
|