From 359819f68015ddea14f46ea993752bcb14b076ad Mon Sep 17 00:00:00 2001 From: Sofien KAABAR <86428036+sofienkaabar@users.noreply.github.com> Date: Mon, 31 Jul 2023 17:42:47 +0200 Subject: [PATCH] Add files via upload --- Chapter 11/1_Indirect_LSTM_Model.py | 64 ++++++++++++ Chapter 11/2_Direct_MPF_LSTM_Model.py | 70 +++++++++++++ Chapter 11/3_Recursive_MPF_LSTM_Model.py | 58 +++++++++++ ..._LSTM_Model_Technical_Indicators_Inputs.py | 79 +++++++++++++++ Chapter 11/5_LSTM_Volatility_Model_Bitcoin.py | 78 +++++++++++++++ Chapter 11/6_Dynamic_Plotting_Model_LSTM.py | 93 ++++++++++++++++++ Chapter 11/Bitcoin_Daily_Historical_Data.xlsx | Bin 0 -> 43616 bytes Chapter 11/ISM_PMI.xlsx | Bin 0 -> 18969 bytes 8 files changed, 442 insertions(+) create mode 100644 Chapter 11/1_Indirect_LSTM_Model.py create mode 100644 Chapter 11/2_Direct_MPF_LSTM_Model.py create mode 100644 Chapter 11/3_Recursive_MPF_LSTM_Model.py create mode 100644 Chapter 11/4_LSTM_Model_Technical_Indicators_Inputs.py create mode 100644 Chapter 11/5_LSTM_Volatility_Model_Bitcoin.py create mode 100644 Chapter 11/6_Dynamic_Plotting_Model_LSTM.py create mode 100644 Chapter 11/Bitcoin_Daily_Historical_Data.xlsx create mode 100644 Chapter 11/ISM_PMI.xlsx diff --git a/Chapter 11/1_Indirect_LSTM_Model.py b/Chapter 11/1_Indirect_LSTM_Model.py new file mode 100644 index 0000000..aed7995 --- /dev/null +++ b/Chapter 11/1_Indirect_LSTM_Model.py @@ -0,0 +1,64 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +from keras.models import Sequential +from keras.layers import Dense, LSTM +from master_function import import_cot_data, data_preprocessing +from master_function import plot_train_test_values, calculate_directional_accuracy +from sklearn.metrics import mean_squared_error + +# Calling the function and preprocessing the data +CAD = 'CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE' +data = import_cot_data(2010, 2023, CAD) +data = np.array(data.iloc[:, -1], dtype = np.float64) + +# Setting the hyperparameters +num_lags = 100 +train_test_split = 0.80 +neurons = 200 +num_epochs = 200 +batch_size = 4 + +# Creating the training and test sets +x_train, y_train, x_test, y_test = data_preprocessing(data, num_lags, train_test_split) + +# Reshape the data to 3D for LSTM input +x_train = x_train.reshape((-1, num_lags, 1)) +x_test = x_test.reshape((-1, num_lags, 1)) + +# Create the LSTM model +model = Sequential() + +# Adding a first layer +model.add(LSTM(units = neurons, input_shape = (num_lags, 1))) + +# Adding a second layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding the output layer +model.add(Dense(units = 1)) + +# Compiling the model +model.compile(loss = 'mean_squared_error', optimizer = 'adam') + +# Fitting the model +model.fit(x_train, y_train, epochs = num_epochs, batch_size = batch_size) + +# Predicting in the training set for illustrative purposes +y_predicted_train = model.predict(x_train) + +# Predicting in the test set +y_predicted = model.predict(x_test) + +# Plotting +plot_train_test_values(100, 50, y_train, y_test, y_predicted) + +# Performance evaluation +print('---') +print('Directional Accuracy Train = ', round(calculate_directional_accuracy(y_predicted_train, y_train), 2), '%') +print('Directional Accuracy Test = ', round(calculate_directional_accuracy(y_predicted, y_test), 2), '%') +print('RMSE Train = ', round(np.sqrt(mean_squared_error(y_predicted_train, y_train)), 10)) +print('RMSE Test = ', round(np.sqrt(mean_squared_error(y_predicted, y_test)), 10)) +print('Correlation In-Sample Predicted/Train = ', round(np.corrcoef(np.reshape(y_predicted_train, (-1)), y_train)[0][1], 3)) +print('Correlation Out-of-Sample Predicted/Test = ', round(np.corrcoef(np.reshape(y_predicted, (-1)), np.reshape(y_test, (-1)))[0][1], 3)) +print('---') \ No newline at end of file diff --git a/Chapter 11/2_Direct_MPF_LSTM_Model.py b/Chapter 11/2_Direct_MPF_LSTM_Model.py new file mode 100644 index 0000000..60c53e9 --- /dev/null +++ b/Chapter 11/2_Direct_MPF_LSTM_Model.py @@ -0,0 +1,70 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +from keras.models import Sequential +from keras.layers import Dense, LSTM +from master_function import import_cot_data, direct_mpf +from master_function import calculate_directional_accuracy +from sklearn.metrics import mean_squared_error + +# Calling the function and preprocessing the data +CAD = 'CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE' +data = import_cot_data(2010, 2023, CAD) +data = np.array(data.iloc[:, -1], dtype = np.float64) + +# Setting the hyperparameters +num_lags = 100 +train_test_split = 0.80 +neurons = 400 +num_epochs = 200 +batch_size = 10 +forecast_horizon = 100 + +# Prepare the arrays +x_train, y_train, x_test, y_test = direct_mpf(data, + num_lags, + train_test_split, + forecast_horizon) + +# Reshape the data to 3D for LSTM input +x_train = x_train.reshape((-1, num_lags, 1)) +x_test = x_test.reshape((-1, num_lags, 1)) + +# Create the LSTM model +model = Sequential() + +# Adding a first layer +model.add(LSTM(units = neurons, input_shape = (num_lags, 1))) + +# Adding a second layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding the output layer +model.add(Dense(units = forecast_horizon)) + +# Compiling the model +model.compile(loss = 'mean_squared_error', optimizer = 'adam') + +# Fitting the model +model.fit(x_train, y_train, epochs = num_epochs, batch_size = batch_size) + +# Predicting in the test set +y_predicted = model.predict(x_test) + +# Plotting +plt.plot(y_predicted[-1, 0:50], label = 'Predicted data', color = 'red', linewidth = 1) +plt.plot(y_test[-1, 0:50], label = 'Test data', color = 'black', linestyle = 'dashed', linewidth = 2) +plt.grid() +plt.legend() + +''' +y_predicted = np.transpose(y_predicted[-1, 0:50]) +y_test = np.transpose(y_test[-1, 0:50]) + +# Performance evaluation +print('---') +print('Directional Accuracy Test = ', round(calculate_directional_accuracy(y_predicted, y_test), 2), '%') +print('RMSE Test = ', round(np.sqrt(mean_squared_error(y_predicted, y_test)), 10)) +print('Correlation Out-of-Sample Predicted/Test = ', round(np.corrcoef(np.reshape(y_predicted, (-1)), np.reshape(y_test, (-1)))[0][1], 3)) +print('---') +''' \ No newline at end of file diff --git a/Chapter 11/3_Recursive_MPF_LSTM_Model.py b/Chapter 11/3_Recursive_MPF_LSTM_Model.py new file mode 100644 index 0000000..470a1dc --- /dev/null +++ b/Chapter 11/3_Recursive_MPF_LSTM_Model.py @@ -0,0 +1,58 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +from keras.models import Sequential +from keras.layers import Dense, LSTM +from master_function import import_cot_data, data_preprocessing, recursive_mpf +from master_function import plot_train_test_values, calculate_directional_accuracy +from sklearn.metrics import mean_squared_error + +# Calling the function and preprocessing the data +CAD = 'CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE' +data = import_cot_data(2010, 2023, CAD) +data = np.array(data.iloc[:, -1], dtype = np.float64) + +# Setting the hyperparameters +num_lags = 10 +train_test_split = 0.80 +neurons = 5 +num_epochs = 10 +batch_size = 20 + +# Creating the training and test sets +x_train, y_train, x_test, y_test = data_preprocessing(data, num_lags, train_test_split) + +# Reshape the data to 3D for LSTM input +x_train = x_train.reshape((-1, num_lags, 1)) +x_test = x_test.reshape((-1, num_lags, 1)) + +# Create the LSTM model +model = Sequential() + +# Adding a first layer +model.add(LSTM(units = neurons, input_shape = (num_lags, 1))) + +# Adding a second layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding the output layer +model.add(Dense(units = 1)) + +# Compiling the model +model.compile(loss = 'mean_squared_error', optimizer = 'adam') + +# Fitting the model +model.fit(x_train, y_train, epochs = num_epochs, batch_size = batch_size) + +# Predicting in the test set on a recursive basis +x_test, y_predicted = recursive_mpf(x_test, y_test, num_lags, model) + +# Plotting +plot_train_test_values(100, 50, y_train, y_test, y_predicted) + +# Performance evaluation +print('---') +print('Directional Accuracy Test = ', round(calculate_directional_accuracy(y_predicted, y_test), 2), '%') +print('RMSE Test = ', round(np.sqrt(mean_squared_error(y_predicted, y_test)), 10)) +print('Correlation Out-of-Sample Predicted/Test = ', round(np.corrcoef(np.reshape(y_predicted, (-1)), np.reshape(y_test, (-1)))[0][1], 3)) +print('---') \ No newline at end of file diff --git a/Chapter 11/4_LSTM_Model_Technical_Indicators_Inputs.py b/Chapter 11/4_LSTM_Model_Technical_Indicators_Inputs.py new file mode 100644 index 0000000..336b352 --- /dev/null +++ b/Chapter 11/4_LSTM_Model_Technical_Indicators_Inputs.py @@ -0,0 +1,79 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +from keras.models import Sequential +from keras.layers import Dense, LSTM +from master_function import mass_import, rsi, ma, calculate_accuracy +from master_function import plot_train_test_values, multiple_data_preprocessing +from sklearn.metrics import mean_squared_error +from master_function import add_column, delete_column + +# Calling the function and preprocessing the data +data = mass_import(0, 'W1')[:, -1] +data = rsi(np.reshape(data, (-1, 1)), 5, 0, 1) +data = ma(data, 5, 0, 2) +data[:, 2] = data[:, 0] - data[:, 2] +data = add_column(data, 1) +for i in range(len(data)): + data[i, 3] = data[i, 0] - data[i - 1, 0] +data[:, 0] = data[:, -1] +data = delete_column(data, 3, 1) + +# Setting the hyperparameters +num_lags = 6 +train_test_split = 0.80 +neurons = 500 +num_epochs = 500 +batch_size = 200 + +x_train, y_train, x_test, y_test = multiple_data_preprocessing(data, train_test_split) + +# Reshape the data to 3D for LSTM input +x_train = x_train.reshape((-1, num_lags, 1)) +x_test = x_test.reshape((-1, num_lags, 1)) + +# Create the LSTM model +model = Sequential() + +# Adding a first layer +model.add(LSTM(units = neurons, input_shape = (num_lags, 1))) + +# Adding a second layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding a third layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding a fourth layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding a fifth layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding the output layer +model.add(Dense(units = 1)) + +# Compiling the model +model.compile(loss = 'mean_squared_error', optimizer = 'adam') + +# Fitting the model +model.fit(x_train, y_train, epochs = num_epochs, batch_size = batch_size) + +# Predicting in the training set for illustrative purposes +y_predicted_train = model.predict(x_train) + +# Predicting in the test set +y_predicted = model.predict(x_test) + +# Plotting +plot_train_test_values(100, 50, y_train, y_test, y_predicted) + +# Performance evaluation +print('---') +print('Accuracy Train = ', round(calculate_accuracy(y_predicted_train, y_train), 2), '%') +print('Accuracy Test = ', round(calculate_accuracy(y_predicted, y_test), 2), '%') +print('RMSE Train = ', round(np.sqrt(mean_squared_error(y_predicted_train, y_train)), 10)) +print('RMSE Test = ', round(np.sqrt(mean_squared_error(y_predicted, y_test)), 10)) +print('Correlation In-Sample Predicted/Train = ', round(np.corrcoef(np.reshape(y_predicted_train, (-1)), y_train)[0][1], 3)) +print('Correlation Out-of-Sample Predicted/Test = ', round(np.corrcoef(np.reshape(y_predicted, (-1)), np.reshape(y_test, (-1)))[0][1], 3)) +print('---') \ No newline at end of file diff --git a/Chapter 11/5_LSTM_Volatility_Model_Bitcoin.py b/Chapter 11/5_LSTM_Volatility_Model_Bitcoin.py new file mode 100644 index 0000000..e84aebc --- /dev/null +++ b/Chapter 11/5_LSTM_Volatility_Model_Bitcoin.py @@ -0,0 +1,78 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +from keras.models import Sequential +from keras.layers import Dense, LSTM +from master_function import import_cot_data, data_preprocessing +from master_function import plot_train_test_values, calculate_directional_accuracy +from sklearn.metrics import mean_squared_error +from master_function import add_column, delete_row, volatility + +# Calling the function and preprocessing the data +data = pd.read_excel('Bitcoin_Daily_Historical_Data.xlsx').values +data = volatility(data, 10, 0, 1) +data = data[:, -1] + +# Differencing for stationarity +data = np.diff(data) + +# Checking for stationarity +from statsmodels.tsa.stattools import adfuller +print('p-value: %f' % adfuller(data)[1]) + +# Setting the hyperparameters +num_lags = 300 +train_test_split = 0.80 +neurons = 80 +num_epochs = 100 +batch_size = 500 + +# Creating the training and test sets +x_train, y_train, x_test, y_test = data_preprocessing(data, num_lags, train_test_split) + +# Reshape the data to 3D for LSTM input +x_train = x_train.reshape((-1, num_lags, 1)) +x_test = x_test.reshape((-1, num_lags, 1)) + +# Create the LSTM model +model = Sequential() + +# Adding a first layer +model.add(LSTM(units = neurons, input_shape = (num_lags, 1))) + +# Adding a second layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding a third layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding a fourth layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding the output layer +model.add(Dense(units = 1)) + +# Compiling the model +model.compile(loss = 'mean_squared_error', optimizer = 'adam') + +# Fitting the model +model.fit(x_train, y_train, epochs = num_epochs, batch_size = batch_size) + +# Predicting in the training set for illustrative purposes +y_predicted_train = model.predict(x_train) + +# Predicting in the test set +y_predicted = model.predict(x_test) + +# Plotting +plot_train_test_values(100, 50, y_train, y_test, y_predicted) + +# Performance evaluation +print('---') +print('Directional Accuracy Train = ', round(calculate_directional_accuracy(y_predicted_train, y_train), 2), '%') +print('Directional Accuracy Test = ', round(calculate_directional_accuracy(y_predicted, y_test), 2), '%') +print('RMSE Train = ', round(np.sqrt(mean_squared_error(y_predicted_train, y_train)), 10)) +print('RMSE Test = ', round(np.sqrt(mean_squared_error(y_predicted, y_test)), 10)) +print('Correlation In-Sample Predicted/Train = ', round(np.corrcoef(np.reshape(y_predicted_train, (-1)), y_train)[0][1], 3)) +print('Correlation Out-of-Sample Predicted/Test = ', round(np.corrcoef(np.reshape(y_predicted, (-1)), np.reshape(y_test, (-1)))[0][1], 3)) +print('---') \ No newline at end of file diff --git a/Chapter 11/6_Dynamic_Plotting_Model_LSTM.py b/Chapter 11/6_Dynamic_Plotting_Model_LSTM.py new file mode 100644 index 0000000..98f04d3 --- /dev/null +++ b/Chapter 11/6_Dynamic_Plotting_Model_LSTM.py @@ -0,0 +1,93 @@ +import pandas as pd +import matplotlib.pyplot as plt +import numpy as np +from keras.models import Sequential +from keras.layers import Dense, LSTM +from master_function import data_preprocessing, compute_diff +from master_function import calculate_directional_accuracy, update +from sklearn.metrics import mean_squared_error +import tensorflow as tf +import random + +# Import the data +data = np.reshape(pd.read_excel('ISM_PMI.xlsx').values, (-1)) +data = compute_diff(data, 1) + +# Setting the hyperparameters +num_lags = 100 +train_test_split = 0.80 +neurons = 100 +num_epochs = 10 +batch_size = 200 + +# Creating the training and test sets +x_train, y_train, x_test, y_test = data_preprocessing(data, num_lags, train_test_split) + +# Reshape the data to 3D for LSTM input +x_train = x_train.reshape((-1, num_lags, 1)) +x_test = x_test.reshape((-1, num_lags, 1)) + +# Create the LSTM model +model = Sequential() + +# Adding a first layer +model.add(LSTM(units = neurons, input_shape = (num_lags, 1))) + +# Adding a second layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding a third layer +model.add(Dense(neurons, activation = 'relu')) + +# Adding the output layer +model.add(Dense(units = 1)) + +# Compiling the model +model.compile(loss = 'mean_squared_error', optimizer = 'adam') + +def update_plot(epoch, logs): + if epoch % 1 == 0: + plt.cla() + y_predicted_train = model.predict(x_train) + plt.plot(y_train[-100:], label = 'Training data', color = 'black', linewidth = 2.5) + plt.plot(y_predicted_train[-100:,], label = 'Predicted data', color = 'red', linewidth = 1) + plt.title(f'Training Epoch: {epoch}') + plt.xlabel('Time') + plt.ylabel('Value') + plt.legend() + plt.grid() + plt.savefig(str(random.randint(1, 1000))) + +# Create the dynamic plot +fig = plt.figure() + +# Train the model using the on_epoch_end callback +class PlotCallback(tf.keras.callbacks.Callback): + def on_epoch_end(self, epoch, logs=None): + update_plot(epoch, logs) + plt.pause(0.001) + +plot_callback = PlotCallback() +history = model.fit(x_train, y_train, epochs = num_epochs, batch_size = batch_size, callbacks = [plot_callback]) + +# Predicting in the training set +y_predicted_train = model.predict(x_train) + +# Predicting in the test set +y_predicted = model.predict(x_test) + +# Performance evaluation +print('---') +print('Directional Accuracy Train = ', round(calculate_directional_accuracy(y_predicted_train, y_train), 2), '%') +print('Directional Accuracy Test = ', round(calculate_directional_accuracy(y_predicted, y_test), 2), '%') +print('RMSE Train = ', round(np.sqrt(mean_squared_error(y_predicted_train, y_train)), 10)) +print('RMSE Test = ', round(np.sqrt(mean_squared_error(y_predicted, y_test)), 10)) +print('---') + +from tensorflow.keras.utils import plot_model +from IPython.display import Image + +plot_model(model, to_file = 'Architecture.png', + show_shapes = True, + show_layer_names = True) +Image('Architecture.png') diff --git a/Chapter 11/Bitcoin_Daily_Historical_Data.xlsx b/Chapter 11/Bitcoin_Daily_Historical_Data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4cd25b49e12f9209e9ed82b120f4fbbb7a22ff96 GIT binary patch literal 43616 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 literal 0 HcmV?d00001 diff --git a/Chapter 11/ISM_PMI.xlsx b/Chapter 11/ISM_PMI.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..5ba423fa97b5bbfada093ac1020246ffd1c37d29 GIT binary patch literal 18969 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

_Pr?L}Q* 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

P4B*+LQ`L_os!z3@YBiANwp- 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