{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "cd9d2cdb-5f55-422e-8545-25e312db5f1e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2024-10-07 19:52:55.791307: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n",
"2024-10-07 19:52:55.806858: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n",
"2024-10-07 19:52:55.811709: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n",
"2024-10-07 19:52:55.824455: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n",
"To enable the following instructions: AVX2 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n",
"2024-10-07 19:52:56.419666: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n"
]
},
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" Open \n",
" High \n",
" Low \n",
" Close \n",
" Adj Close \n",
" Volume \n",
" Date \n",
" \n",
" \n",
" \n",
" \n",
" 4608 \n",
" 39.80 \n",
" 40.22 \n",
" 39.77 \n",
" 40.09 \n",
" 40.09 \n",
" 27456000 \n",
" 24-09-13 \n",
" \n",
" \n",
" 4609 \n",
" 40.00 \n",
" 40.23 \n",
" 39.58 \n",
" 39.89 \n",
" 39.89 \n",
" 12162500 \n",
" 24-09-16 \n",
" \n",
" \n",
" 4610 \n",
" 39.70 \n",
" 40.08 \n",
" 39.31 \n",
" 39.49 \n",
" 39.49 \n",
" 17906900 \n",
" 24-09-17 \n",
" \n",
" \n",
" 4611 \n",
" 39.76 \n",
" 40.99 \n",
" 39.02 \n",
" 39.06 \n",
" 39.06 \n",
" 41241400 \n",
" 24-09-18 \n",
" \n",
" \n",
" 4612 \n",
" 40.10 \n",
" 40.25 \n",
" 39.26 \n",
" 39.72 \n",
" 39.72 \n",
" 22277500 \n",
" 24-09-19 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Open High Low Close Adj Close Volume Date\n",
"4608 39.80 40.22 39.77 40.09 40.09 27456000 24-09-13\n",
"4609 40.00 40.23 39.58 39.89 39.89 12162500 24-09-16\n",
"4610 39.70 40.08 39.31 39.49 39.49 17906900 24-09-17\n",
"4611 39.76 40.99 39.02 39.06 39.06 41241400 24-09-18\n",
"4612 40.10 40.25 39.26 39.72 39.72 22277500 24-09-19"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import pandas_ta as ta\n",
"import IPython\n",
"from keras.models import Sequential\n",
"from keras.layers import LSTM\n",
"from keras.layers import Dropout\n",
"from keras.layers import Dense\n",
"from keras.layers import TimeDistributed\n",
"from datetime import datetime, timedelta\n",
"import tensorflow as tf\n",
"import keras\n",
"from keras import optimizers\n",
"from keras.callbacks import History\n",
"from keras.models import Model\n",
"from keras.layers import Dense, Dropout, LSTM, Input, Activation, concatenate\n",
"import numpy as np\n",
"\n",
"from tensorflow.keras.models import Sequential\n",
"from tensorflow.keras.optimizers import Adam\n",
"from tensorflow.keras import layers\n",
"\n",
"# Uncomment for Interactive Graphs\n",
"#%matplotlib widget\n",
"\n",
"\n",
"name = \"GDX\"\n",
"data = pd.read_csv(\"data/\"+name + \".csv\")\n",
"data.tail()"
]
},
{
"cell_type": "markdown",
"id": "235f0ce4-e78c-46a9-9255-3f2b4167faec",
"metadata": {},
"source": [
"# Load Model"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "080c690e-de59-4576-bd86-3d448c950d1b",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n",
"I0000 00:00:1728345176.891277 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345176.933307 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345176.935466 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345176.938339 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345176.940357 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345176.942232 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345177.061726 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345177.063279 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"I0000 00:00:1728345177.064609 163696 cuda_executor.cc:1015] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero. See more at https://github.com/torvalds/linux/blob/v6.0/Documentation/ABI/testing/sysfs-bus-pci#L344-L355\n",
"2024-10-07 19:52:57.065904: I tensorflow/core/common_runtime/gpu/gpu_device.cc:2021] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 5387 MB memory: -> device: 0, name: NVIDIA GeForce RTX 3050, pci bus id: 0000:2d:00.0, compute capability: 8.6\n"
]
},
{
"data": {
"text/html": [
"Model: \"sequential\" \n",
" \n"
],
"text/plain": [
"\u001b[1mModel: \"sequential\"\u001b[0m\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃ Layer (type) ┃ Output Shape ┃ Param # ┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ dense (Dense ) │ (None , 20 , 128 ) │ 2,176 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (Dense ) │ (None , 20 , 64 ) │ 8,256 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_2 (Dense ) │ (None , 20 , 32 ) │ 2,080 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout (Dropout ) │ (None , 20 , 32 ) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten (Flatten ) │ (None , 640 ) │ 0 │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_layer (Dense ) │ (None , 9 ) │ 5,769 │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
" \n"
],
"text/plain": [
"┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
"┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
"┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
"│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m20\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m2,176\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m20\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m8,256\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m20\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m2,080\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dropout (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m20\u001b[0m, \u001b[38;5;34m32\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ flatten (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m640\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │\n",
"├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
"│ dense_layer (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m9\u001b[0m) │ \u001b[38;5;34m5,769\u001b[0m │\n",
"└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" Total params: 54,845 (214.24 KB)\n",
" \n"
],
"text/plain": [
"\u001b[1m Total params: \u001b[0m\u001b[38;5;34m54,845\u001b[0m (214.24 KB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" Trainable params: 18,281 (71.41 KB)\n",
" \n"
],
"text/plain": [
"\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m18,281\u001b[0m (71.41 KB)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" Non-trainable params: 0 (0.00 B)\n",
" \n"
],
"text/plain": [
"\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
" Optimizer params: 36,564 (142.83 KB)\n",
" \n"
],
"text/plain": [
"\u001b[1m Optimizer params: \u001b[0m\u001b[38;5;34m36,564\u001b[0m (142.83 KB)\n"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = tf.keras.models.load_model(\"models/\" + name + \".keras\")\n",
"\n",
"\n",
"model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "c236e1ec-fb73-4b70-bec1-864e596f6fed",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" Open \n",
" High \n",
" Low \n",
" Close \n",
" Adj Close \n",
" Volume \n",
" Date \n",
" Diff_Close \n",
" RSI \n",
" EMAF \n",
" EMAM \n",
" EMAS \n",
" BBL_5_2.0 \n",
" BBM_5_2.0 \n",
" BBU_5_2.0 \n",
" BBB_5_2.0 \n",
" BBP_5_2.0 \n",
" STOCHk_14_3_3 \n",
" STOCHd_14_3_3 \n",
" \n",
" \n",
" \n",
" \n",
" 4608 \n",
" 4608 \n",
" 39.80 \n",
" 40.22 \n",
" 39.77 \n",
" 40.09 \n",
" 40.09 \n",
" 27456000 \n",
" 24-09-13 \n",
" 0.29 \n",
" 63.393660 \n",
" 38.020788 \n",
" 37.252686 \n",
" 33.997792 \n",
" 35.563316 \n",
" 38.134 \n",
" 40.704684 \n",
" 13.482372 \n",
" 0.880443 \n",
" 72.443237 \n",
" 48.919613 \n",
" \n",
" \n",
" 4609 \n",
" 4609 \n",
" 40.00 \n",
" 40.23 \n",
" 39.58 \n",
" 39.89 \n",
" 39.89 \n",
" 12162500 \n",
" 24-09-16 \n",
" -0.11 \n",
" 61.923518 \n",
" 38.217547 \n",
" 37.356110 \n",
" 34.056421 \n",
" 36.311033 \n",
" 38.760 \n",
" 41.208967 \n",
" 12.636569 \n",
" 0.730710 \n",
" 91.645955 \n",
" 71.097146 \n",
" \n",
" \n",
" 4610 \n",
" 4610 \n",
" 39.70 \n",
" 40.08 \n",
" 39.31 \n",
" 39.49 \n",
" 39.49 \n",
" 17906900 \n",
" 24-09-17 \n",
" -0.21 \n",
" 58.977635 \n",
" 38.351489 \n",
" 37.439792 \n",
" 34.110487 \n",
" 37.289938 \n",
" 39.214 \n",
" 41.138062 \n",
" 9.813140 \n",
" 0.571723 \n",
" 89.939111 \n",
" 84.676101 \n",
" \n",
" \n",
" 4611 \n",
" 4611 \n",
" 39.76 \n",
" 40.99 \n",
" 39.02 \n",
" 39.06 \n",
" 39.06 \n",
" 41241400 \n",
" 24-09-18 \n",
" -0.70 \n",
" 55.899007 \n",
" 38.426069 \n",
" 37.503330 \n",
" 34.159736 \n",
" 38.764939 \n",
" 39.548 \n",
" 40.331061 \n",
" 3.960052 \n",
" 0.188402 \n",
" 77.535372 \n",
" 86.373479 \n",
" \n",
" \n",
" 4612 \n",
" 4612 \n",
" 40.10 \n",
" 40.25 \n",
" 39.26 \n",
" 39.72 \n",
" 39.72 \n",
" 22277500 \n",
" 24-09-19 \n",
" -0.38 \n",
" 59.401965 \n",
" 38.562273 \n",
" 37.590258 \n",
" 34.215062 \n",
" 38.940183 \n",
" 39.650 \n",
" 40.359817 \n",
" 3.580413 \n",
" 0.549308 \n",
" 71.486727 \n",
" 79.653736 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" index Open High Low Close Adj Close Volume Date \\\n",
"4608 4608 39.80 40.22 39.77 40.09 40.09 27456000 24-09-13 \n",
"4609 4609 40.00 40.23 39.58 39.89 39.89 12162500 24-09-16 \n",
"4610 4610 39.70 40.08 39.31 39.49 39.49 17906900 24-09-17 \n",
"4611 4611 39.76 40.99 39.02 39.06 39.06 41241400 24-09-18 \n",
"4612 4612 40.10 40.25 39.26 39.72 39.72 22277500 24-09-19 \n",
"\n",
" Diff_Close RSI EMAF EMAM EMAS BBL_5_2.0 \\\n",
"4608 0.29 63.393660 38.020788 37.252686 33.997792 35.563316 \n",
"4609 -0.11 61.923518 38.217547 37.356110 34.056421 36.311033 \n",
"4610 -0.21 58.977635 38.351489 37.439792 34.110487 37.289938 \n",
"4611 -0.70 55.899007 38.426069 37.503330 34.159736 38.764939 \n",
"4612 -0.38 59.401965 38.562273 37.590258 34.215062 38.940183 \n",
"\n",
" BBM_5_2.0 BBU_5_2.0 BBB_5_2.0 BBP_5_2.0 STOCHk_14_3_3 STOCHd_14_3_3 \n",
"4608 38.134 40.704684 13.482372 0.880443 72.443237 48.919613 \n",
"4609 38.760 41.208967 12.636569 0.730710 91.645955 71.097146 \n",
"4610 39.214 41.138062 9.813140 0.571723 89.939111 84.676101 \n",
"4611 39.548 40.331061 3.960052 0.188402 77.535372 86.373479 \n",
"4612 39.650 40.359817 3.580413 0.549308 71.486727 79.653736 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Adding indicators\n",
"data['Diff_Close'] = data['Adj Close']-data.Open\n",
"data['RSI']=ta.rsi(data.Close, length=14)\n",
"data['EMAF']=ta.ema(data.Close, length=18)\n",
"data['EMAM']=ta.ema(data.Close, length=50)\n",
"data['EMAS']=ta.ema(data.Close, length=200)\n",
"data.ta.bbands(append=True)\n",
"data.ta.stoch(append=True)\n",
"\n",
"\n",
"\n",
"data.reset_index(inplace = True)\n",
"pd.set_option('display.max_columns', None)\n",
"\n",
"data.tail()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "83cf51c3-f3d8-49f8-b7cd-63e8c831dc20",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" Open \n",
" High \n",
" Low \n",
" Adj Close \n",
" Diff_Close \n",
" RSI \n",
" EMAF \n",
" EMAM \n",
" EMAS \n",
" BBL_5_2.0 \n",
" BBM_5_2.0 \n",
" BBU_5_2.0 \n",
" BBB_5_2.0 \n",
" BBP_5_2.0 \n",
" STOCHk_14_3_3 \n",
" STOCHd_14_3_3 \n",
" \n",
" \n",
" \n",
" \n",
" 4608 \n",
" 4608 \n",
" 39.80 \n",
" 40.22 \n",
" 39.77 \n",
" 40.09 \n",
" 0.29 \n",
" 63.393660 \n",
" 38.020788 \n",
" 37.252686 \n",
" 33.997792 \n",
" 35.563316 \n",
" 38.134 \n",
" 40.704684 \n",
" 13.482372 \n",
" 0.880443 \n",
" 72.443237 \n",
" 48.919613 \n",
" \n",
" \n",
" 4609 \n",
" 4609 \n",
" 40.00 \n",
" 40.23 \n",
" 39.58 \n",
" 39.89 \n",
" -0.11 \n",
" 61.923518 \n",
" 38.217547 \n",
" 37.356110 \n",
" 34.056421 \n",
" 36.311033 \n",
" 38.760 \n",
" 41.208967 \n",
" 12.636569 \n",
" 0.730710 \n",
" 91.645955 \n",
" 71.097146 \n",
" \n",
" \n",
" 4610 \n",
" 4610 \n",
" 39.70 \n",
" 40.08 \n",
" 39.31 \n",
" 39.49 \n",
" -0.21 \n",
" 58.977635 \n",
" 38.351489 \n",
" 37.439792 \n",
" 34.110487 \n",
" 37.289938 \n",
" 39.214 \n",
" 41.138062 \n",
" 9.813140 \n",
" 0.571723 \n",
" 89.939111 \n",
" 84.676101 \n",
" \n",
" \n",
" 4611 \n",
" 4611 \n",
" 39.76 \n",
" 40.99 \n",
" 39.02 \n",
" 39.06 \n",
" -0.70 \n",
" 55.899007 \n",
" 38.426069 \n",
" 37.503330 \n",
" 34.159736 \n",
" 38.764939 \n",
" 39.548 \n",
" 40.331061 \n",
" 3.960052 \n",
" 0.188402 \n",
" 77.535372 \n",
" 86.373479 \n",
" \n",
" \n",
" 4612 \n",
" 4612 \n",
" 40.10 \n",
" 40.25 \n",
" 39.26 \n",
" 39.72 \n",
" -0.38 \n",
" 59.401965 \n",
" 38.562273 \n",
" 37.590258 \n",
" 34.215062 \n",
" 38.940183 \n",
" 39.650 \n",
" 40.359817 \n",
" 3.580413 \n",
" 0.549308 \n",
" 71.486727 \n",
" 79.653736 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" index Open High Low Adj Close Diff_Close RSI EMAF \\\n",
"4608 4608 39.80 40.22 39.77 40.09 0.29 63.393660 38.020788 \n",
"4609 4609 40.00 40.23 39.58 39.89 -0.11 61.923518 38.217547 \n",
"4610 4610 39.70 40.08 39.31 39.49 -0.21 58.977635 38.351489 \n",
"4611 4611 39.76 40.99 39.02 39.06 -0.70 55.899007 38.426069 \n",
"4612 4612 40.10 40.25 39.26 39.72 -0.38 59.401965 38.562273 \n",
"\n",
" EMAM EMAS BBL_5_2.0 BBM_5_2.0 BBU_5_2.0 BBB_5_2.0 \\\n",
"4608 37.252686 33.997792 35.563316 38.134 40.704684 13.482372 \n",
"4609 37.356110 34.056421 36.311033 38.760 41.208967 12.636569 \n",
"4610 37.439792 34.110487 37.289938 39.214 41.138062 9.813140 \n",
"4611 37.503330 34.159736 38.764939 39.548 40.331061 3.960052 \n",
"4612 37.590258 34.215062 38.940183 39.650 40.359817 3.580413 \n",
"\n",
" BBP_5_2.0 STOCHk_14_3_3 STOCHd_14_3_3 \n",
"4608 0.880443 72.443237 48.919613 \n",
"4609 0.730710 91.645955 71.097146 \n",
"4610 0.571723 89.939111 84.676101 \n",
"4611 0.188402 77.535372 86.373479 \n",
"4612 0.549308 71.486727 79.653736 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_set = data.copy()\n",
"data_set.drop(['Volume', 'Close', 'Date'], axis=1, inplace=True)\n",
"data_set.tail()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "d73f69a4-8537-48d2-be3e-e05ff6e891cf",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" index \n",
" Open \n",
" High \n",
" Low \n",
" Adj Close \n",
" Diff_Close \n",
" RSI \n",
" EMAF \n",
" EMAM \n",
" EMAS \n",
" BBL_5_2.0 \n",
" BBM_5_2.0 \n",
" BBU_5_2.0 \n",
" BBB_5_2.0 \n",
" BBP_5_2.0 \n",
" STOCHk_14_3_3 \n",
" STOCHd_14_3_3 \n",
" \n",
" \n",
" \n",
" \n",
" 4608 \n",
" 4608 \n",
" 0.004820 \n",
" 0.009989 \n",
" 0.021269 \n",
" 0.195898 \n",
" 0.420548 \n",
" 0.350430 \n",
" -0.021347 \n",
" -0.015309 \n",
" -0.136385 \n",
" -0.107757 \n",
" -0.042160 \n",
" -0.008961 \n",
" -0.525940 \n",
" 0.761191 \n",
" 0.450564 \n",
" -0.022171 \n",
" \n",
" \n",
" 4609 \n",
" 4609 \n",
" 0.012236 \n",
" 0.010359 \n",
" 0.014179 \n",
" 0.187526 \n",
" 0.365753 \n",
" 0.310595 \n",
" -0.013510 \n",
" -0.010960 \n",
" -0.133631 \n",
" -0.079099 \n",
" -0.018426 \n",
" 0.009222 \n",
" -0.556316 \n",
" 0.461328 \n",
" 0.839660 \n",
" 0.440119 \n",
" \n",
" \n",
" 4610 \n",
" 4610 \n",
" 0.001112 \n",
" 0.004809 \n",
" 0.004104 \n",
" 0.170783 \n",
" 0.352055 \n",
" 0.230773 \n",
" -0.008174 \n",
" -0.007441 \n",
" -0.131091 \n",
" -0.041580 \n",
" -0.001213 \n",
" 0.006666 \n",
" -0.657717 \n",
" 0.142935 \n",
" 0.805075 \n",
" 0.723172 \n",
" \n",
" \n",
" 4611 \n",
" 4611 \n",
" 0.003337 \n",
" 0.038476 \n",
" -0.006716 \n",
" 0.152784 \n",
" 0.284932 \n",
" 0.147354 \n",
" -0.005204 \n",
" -0.004769 \n",
" -0.128777 \n",
" 0.014953 \n",
" 0.011450 \n",
" -0.022433 \n",
" -0.867925 \n",
" -0.624720 \n",
" 0.553744 \n",
" 0.758553 \n",
" \n",
" \n",
" 4612 \n",
" 4612 \n",
" 0.015944 \n",
" 0.011099 \n",
" 0.002239 \n",
" 0.180410 \n",
" 0.328767 \n",
" 0.242270 \n",
" 0.000222 \n",
" -0.001113 \n",
" -0.126178 \n",
" 0.021670 \n",
" 0.015317 \n",
" -0.021396 \n",
" -0.881560 \n",
" 0.098046 \n",
" 0.431183 \n",
" 0.618480 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" index Open High Low Adj Close Diff_Close RSI \\\n",
"4608 4608 0.004820 0.009989 0.021269 0.195898 0.420548 0.350430 \n",
"4609 4609 0.012236 0.010359 0.014179 0.187526 0.365753 0.310595 \n",
"4610 4610 0.001112 0.004809 0.004104 0.170783 0.352055 0.230773 \n",
"4611 4611 0.003337 0.038476 -0.006716 0.152784 0.284932 0.147354 \n",
"4612 4612 0.015944 0.011099 0.002239 0.180410 0.328767 0.242270 \n",
"\n",
" EMAF EMAM EMAS BBL_5_2.0 BBM_5_2.0 BBU_5_2.0 \\\n",
"4608 -0.021347 -0.015309 -0.136385 -0.107757 -0.042160 -0.008961 \n",
"4609 -0.013510 -0.010960 -0.133631 -0.079099 -0.018426 0.009222 \n",
"4610 -0.008174 -0.007441 -0.131091 -0.041580 -0.001213 0.006666 \n",
"4611 -0.005204 -0.004769 -0.128777 0.014953 0.011450 -0.022433 \n",
"4612 0.000222 -0.001113 -0.126178 0.021670 0.015317 -0.021396 \n",
"\n",
" BBB_5_2.0 BBP_5_2.0 STOCHk_14_3_3 STOCHd_14_3_3 \n",
"4608 -0.525940 0.761191 0.450564 -0.022171 \n",
"4609 -0.556316 0.461328 0.839660 0.440119 \n",
"4610 -0.657717 0.142935 0.805075 0.723172 \n",
"4611 -0.867925 -0.624720 0.553744 0.758553 \n",
"4612 -0.881560 0.098046 0.431183 0.618480 "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import MinMaxScaler\n",
"sc = MinMaxScaler(feature_range=(-1,1))\n",
"\n",
"df_scaled = sc.fit_transform(data_set.to_numpy())\n",
"data_set_scaled_pd = pd.DataFrame(df_scaled, columns=data_set.columns.tolist())\n",
"\n",
"\n",
"\n",
"data_set_scaled_pd['index'] = data_set['index']\n",
"\n",
"data_set_scaled_pd.tail()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "15bdc18d-18f2-44e5-ad58-6d6711bcc3ff",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Length of Data 4613\n",
"X Shape: (4593, 20, 16)\n",
"[ 0.00333704 0.03847577 -0.00671642 0.15278359 0.28493151 0.14735398\n",
" -0.00520376 -0.00476876 -0.12877696 0.01495339 0.0114498 -0.02243267\n",
" -0.86792546 -0.62472028 0.55374401 0.75855333]\n"
]
}
],
"source": [
"X = []\n",
"backcandles = 20\n",
"\n",
"\n",
"data_set_scaled = data_set_scaled_pd.to_numpy()\n",
"\n",
"print(\"Length of Data\", data_set_scaled.shape[0])\n",
"\n",
"features = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]\n",
"\n",
"feature_count = len(features)\n",
"\n",
"it = 0\n",
"for j in features:\n",
" X.append([])\n",
" for i in range(backcandles, data_set_scaled.shape[0]):\n",
" X[it].append(data_set_scaled[i-backcandles:i, j])\n",
" it += 1\n",
"\n",
"\n",
"X=np.moveaxis(X, [0], [2])\n",
"\n",
"X = np.array(X)\n",
"#print(X)\n",
"print(\"X Shape:\", X.shape)\n",
"print(X[-1][19])"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f529f6b0-e444-4ae0-9013-ec02fced6628",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: All log messages before absl::InitializeLog() is called are written to STDERR\n",
"I0000 00:00:1728345178.233869 163771 service.cc:146] XLA service 0x7a0588004680 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:\n",
"I0000 00:00:1728345178.233901 163771 service.cc:154] StreamExecutor device (0): NVIDIA GeForce RTX 3050, Compute Capability 8.6\n",
"2024-10-07 19:52:58.246285: I tensorflow/compiler/mlir/tensorflow/utils/dump_mlir_util.cc:268] disabling MLIR crash reproducer, set env var `MLIR_CRASH_REPRODUCER_DIRECTORY` to enable.\n",
"2024-10-07 19:52:58.300650: I external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:531] Loaded cuDNN version 8907\n",
"2024-10-07 19:52:59.745797: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:393] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_33', 36 bytes spill stores, 36 bytes spill loads\n",
"\n",
"2024-10-07 19:53:00.087891: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:393] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_33', 360 bytes spill stores, 360 bytes spill loads\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m110/144\u001b[0m \u001b[32m━━━━━━━━━━━━━━━\u001b[0m\u001b[37m━━━━━\u001b[0m \u001b[1m0s\u001b[0m 927us/step"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"I0000 00:00:1728345180.575803 163771 device_compiler.h:188] Compiled cluster using XLA! This line is logged at most once for the lifetime of the process.\n",
"2024-10-07 19:53:02.168487: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:393] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_33', 84 bytes spill stores, 84 bytes spill loads\n",
"\n",
"2024-10-07 19:53:02.252466: I external/local_xla/xla/stream_executor/cuda/cuda_asm_compiler.cc:393] ptxas warning : Registers are spilled to local memory in function 'gemm_fusion_dot_33', 396 bytes spill stores, 396 bytes spill loads\n",
"\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\u001b[1m144/144\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 15ms/step\n",
"Y Predict Shape: (4593, 20, 16) 4592\n"
]
}
],
"source": [
"y_pred = model.predict(X)\n",
"print(\"Y Predict Shape:\", X.shape, len(y_pred)-1)\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "2a6fd4a1-89a6-4713-a381-3e45f62b7a1f",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"start_date = datetime.strptime(data.Date[len(data.Date)-2], \"%y-%m-%d\")\n",
"next_dates = []\n",
"\n",
"while len(next_dates) < 9:\n",
" start_date += timedelta(days=1)\n",
" \n",
" # Skip Saturdays (5) and Sundays (6)\n",
" if start_date.weekday() < 5:\n",
" next_dates.append(start_date.strftime(\"%y-%m-%d\"))\n",
"\n",
"\n",
"\n",
"plt.figure(figsize=(10,5))\n",
"\n",
"plt.plot(next_dates, y_pred[len(y_pred)-1], color='green', label='pred')\n",
"plt.legend()\n",
"plt.ion()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.10.14"
}
},
"nbformat": 4,
"nbformat_minor": 5
}