diff --git a/Bitcoin-Factory/Forecast-Client/README.md b/Bitcoin-Factory/Forecast-Client/README.md
new file mode 100644
index 0000000000..bfbbfd0bf3
--- /dev/null
+++ b/Bitcoin-Factory/Forecast-Client/README.md
@@ -0,0 +1,123 @@
+# Forecast Client
+
+The Forecast Client app feeds itself from the Test Server's forecast cases. A forecast case is the best known set of parameters for a certain Asset / Timeframe. The job of this App is to recreate the model discovered by a Tester using the Test Client App. Once this model is recreated, it is used to start forecasting the next candle for that Asset / Timeframe. The forecasts produced by this App are then sent to the Test Server and distributed to the Test Client Apps every time they solve a new test case.
+
+Each tested model (created based on a set of parameters and a custom dataset) has a certain implied Error: the root-mean-square error (RMSE).
+
+https://en.wikipedia.org/wiki/Root-mean-square_deviation
+
+The whole point of crowd-testing is to find the model with the lowest % of error for a certain Asset / Time-Frame.
+
+**Note:** All forecasts are done at the Asset/USDT markets on Binance for now.
+
+When you are running a Test Client App, you are testing certain combinations of parameters for a certain Asset / Time-Frame including a custom dataset for your specific test, which might include a certain combination of indicators data.
+
+The crowd-sourced forecasts you receive after each test, are the ones belonging to ML models with the lowest % error for a certain Asset / Time-Frame.
+
+## How to setup Forecast Client?
+This section describes how to install the Farecast Client. It is assumed that docker and Superalgos are already installed and running on the server where Forecast Client will be run.
+
+### Running Docker Container
+
+1. Navigate to the `cd Superalgos/Bitcoin-Factory/DockerBuild` folder.
+2. `docker build -t bitcoin-factory-machine-learning .` command to build the docker image.
+**Note:** If you have previously run the Bitcoin Factory Test Client on the server where you will run the Forecast Client, you have probably built the doker image. If you have done this process before, you do not need to do it again.
+3. `docker run -it --rm --shm-size=4.37gb --name Bitcoin-Factory-ML-Forecasting -v /Superalgos/Bitcoin-Factory/Forecast-Client/notebooks:/tf/notebooks -p 8888:8888 bitcoin-factory-machine-learning` Let's run the docker container using the command. `/Superalgos/Bitcoin-Factory/Forecast-Client/notebooks` Remember to set the specified folder to the Superalgos folder on your own server.
+ Once the docker container is running correctly you will see at the first terminal an output similar to this:
+
+```text
+[I 12:58:36.546 NotebookApp] Writing notebook server cookie secret to /home/ubuntu/.local/share/jupyter/runtime/notebook_cookie_secret
+[I 12:58:37.532 NotebookApp] Serving notebooks from local directory: /tf/notebooks
+[I 12:58:37.532 NotebookApp] Jupyter Notebook 6.4.10 is running at:
+[I 12:58:37.533 NotebookApp] http://aa1b305587bd:8888/?token=49c135d693e0b4d07d8c0164410ee6fc4593ac5e0578a34a
+[I 12:58:37.533 NotebookApp] or http://127.0.0.1:8888/?token=49c135d693e0b4d07d8c0164410ee6fc4593ac5e0578a34a
+[I 12:58:37.533 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
+[C 12:58:37.544 NotebookApp]
+
+ To access the notebook, open this file in a browser:
+ file:///home/ubuntu/.local/share/jupyter/runtime/nbserver-1-open.html
+ Or copy and paste one of these URLs:
+ http://aa1b305587bd:8888/?token=49c135d693e0b4d07d8c0164410ee6fc4593ac5e0578a34a
+ or http://127.0.0.1:8888/?token=49c135d693e0b4d07d8c0164410ee6fc4593ac5e0578a34a
+```
+**Note:** At that terminal there is no further action required.
+
+### Forecast Client'inin çalıştırılması.
+For your Forecast Client App to work and be able to connect to the Test Server you need to:
+
+1. Update your User Profile with several nodes that today you might not have.
+2. Create the Signing Account node to allow your Forecast Client app to run with an identity that the Superalgos Network can recognize.
+3. Reference from the Task -> Task Server App Reference one of the nodes you added to your profile.
+4. Change a config to specify the name of your Forecast Client, so that you can recognize it among other forecast clients on the execution reports.
+
+Continue reading this section for detailed step by step instructions of how to do the above.
+
+***Update your User Profile***
+
+Before you can participate within the Superalgos P2P network, You need to add a few nodes to your User Profile. Once these nodes are added and configured properly you will need to contribute your updated profile to the Governance repo and make sure that it is merged by the PR merging bot.
+
+Here is the complete list of nodes you need to add to your profile and how to configure them.
+
+**Note:** All paths start from the User Profile node.
+
+**Task Server App Node**
+1. User Profile -> User Apps
+2. User Profile -> User Apps -> Server Apps
+3. User Profile -> User Apps -> Server Apps -> Task Server App
+
+Once you have added the Task Server App node, hover over it and rename it using the following name: "Task Server App #1"
+
+Then add the following configuration within the Task Server App node's config:
+```json
+{
+ "codeName": "Task-Server-App-1"
+}
+ ```
+
+**Bitcoin Factory Forecasts**
+4. User Profile -> Forecast Providers
+5. User Profile -> Forecast Providers -> Bitcoin Factory Forecasts
+
+Hover over the Bitcoin Factory Forcasts node and rename it using the following name: "Testnet"
+
+### Signing Accounts
+
+Finally, you need to generate/re-generate the signing accounts of your User Profile, so that a new node of type Signing Accounts is created under the "Task-Server-App-1" node. The procedure to do this is the following:
+
+1. At the Governance Project node create a Profile Constructor node.
+2. Reference the Profile Constructor to your User Profile.
+3. At the Profile Constructor menu, click on Install Signing Accounts. This will generate a new node under "Task-Server-App-1" and save a file to your My-Secrets folder with the Signing Accounts of your User Profile.
+
+Congratulations! Now you are done with your profile.
+
+Remember to save your User Profile plugin, contribute it and check that it was merged at the Governance repository.
+
+**IMPORTANT:** It takes a few minutes for your profile to be auto-merged into the Governance repository and another 5 minutes to be picked up by the running Network Node. After changes to your profile, wait for around 10 minutes before expecting it to be able to connect to the Superalgos Network node.
+
+***Reference the Task Server App***
+
+Go to Bitcoin-Factory-Demo Workspace, change it's name and save it (so to have your own instance of that workspace). Go to Plugins Node and then import your User Profile into the Workspace
+
+Locate the node Task Server App Reference, under your Forecast Client Task, and replace the current reference with a reference to the "Task-Server-App-1" node you created at your User Profile.
+
+By setting up this reference you define the identity under which the forecast client will run on the P2P network. In other words, the signing account held under your "Task-Server-App-1" node acts like a finger print so that other entities running on the network can identify and work with your forecast client.
+
+***Change the Config***
+
+After that, open the config of the Forecast-Client Sensor Bot Instance. It looks like this:
+
+```json
+{
+ "startDate": "2021-01-01",
+ "networkCodeName": "Testnet",
+ "clientInstanceForecaster": "devosonder-01",
+ "clientInstanceBuilder": "devosonder-01"
+}
+```
+
+* clientInstanceForecaster: **IMPORTANT:** Change this to match the name you gave to your Test Client Instance node you created at your user profile.
+* clientInstanceBuilder: **IMPORTANT:** Change this to match the name you gave to your Test Client Instance node you created at your user profile.
+
+**IMPORTANT:** If you are going to be using 2 or more computers, you need to take care of the Signing Accounts file that needs to be present at both / all computers (This is the one that lives in your My-Secrets file). In other words, you cannot generate the signing account at one computer and then generate it again at the second one. If you generate it at one computer and contributed your profile, then you need to copy the file inside the My-Secrets folder to the second computer/s.
+
+**IMPORTANT:** Currently Test-Client and Forecast-Client do not work together on the same server.
diff --git a/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.ipynb b/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.ipynb
index fffe66c62a..351b425be0 100644
--- a/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.ipynb
+++ b/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.ipynb
@@ -3,7 +3,10 @@
{
"cell_type": "markdown",
"metadata": {
- "id": "DweYe9FcbMK_"
+ "id": "DweYe9FcbMK_",
+ "pycharm": {
+ "name": "#%% md\n"
+ }
},
"source": [
"##### Bitcoin Factory Machine Learning\n"
@@ -11,7 +14,11 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"# Multivariate Time Series Forecasting with LSTMs in Keras"
]
@@ -19,7 +26,10 @@
{
"cell_type": "markdown",
"metadata": {
- "id": "sUtoed20cRJJ"
+ "id": "sUtoed20cRJJ",
+ "pycharm": {
+ "name": "#%% md\n"
+ }
},
"source": [
"## Time Series Forcasting - Multiple Lag Timesteps - Multiple Labels"
@@ -27,72 +37,125 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"Based on Tutorial from https://machinelearningmastery.com/multivariate-time-series-forecasting-lstms-keras/"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"# Strategy"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"The strategy is to predict the Candle.Max and Candle.Min of a set of Crypto Assets at the highest timeframe possible, in order to use the prediction to pick the one with higher % of predicted increase in price to take a position in it before that happens."
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"# Code to Run"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Libraries Used"
]
},
{
"cell_type": "code",
- "execution_count": 1,
- "metadata": {},
+ "execution_count": 45,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
- "\n",
+ "from json import JSONEncoder\n",
"from math import sqrt\n",
+ "\n",
+ "import numpy\n",
"from numpy import concatenate\n",
"from matplotlib import pyplot\n",
"from pandas import read_csv\n",
"from pandas import DataFrame\n",
"from pandas import concat\n",
"from sklearn.preprocessing import MinMaxScaler\n",
- "from sklearn.preprocessing import LabelEncoder\n",
"from sklearn.metrics import mean_squared_error\n",
"from keras.models import Sequential\n",
"from keras.layers import Dense\n",
"from keras.layers import LSTM\n",
- "from keras.models import load_model"
+ "from keras.models import load_model\n",
+ "import json"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "## Functions Used"
- ]
+ "## Functions Used\n"
+ ],
+ "outputs": []
},
{
"cell_type": "code",
- "execution_count": 2,
- "metadata": {},
+ "execution_count": 46,
+ "outputs": [],
+ "source": [
+ "class NumpyArrayEncoder(JSONEncoder):\n",
+ " def default(self, obj):\n",
+ " if isinstance(obj, numpy.ndarray):\n",
+ " return obj.tolist()\n",
+ " return JSONEncoder.default(self, obj)"
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# convert series to supervised learning\n",
@@ -117,78 +180,44 @@
"\t# drop rows with NaN values\n",
"\tif dropnan:\n",
"\t\tagg.dropna(inplace=True)\n",
- "\treturn agg \n",
- " "
+ "\treturn agg\n"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Load the Instructions Dataset"
]
},
{
"cell_type": "code",
- "execution_count": 3,
- "metadata": {},
+ "execution_count": 48,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/html": [
- "
\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " INSTRUCTION \n",
- " VALUE \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " ACTION_TO_TAKE \n",
- " LOAD_MODEL_AND_PREDICT \n",
- " \n",
- " \n",
- " 1 \n",
- " MODEL_FILE_NAME \n",
- " MODEL-1 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " INSTRUCTION VALUE\n",
- "0 ACTION_TO_TAKE LOAD_MODEL_AND_PREDICT\n",
- "1 MODEL_FILE_NAME MODEL-1"
- ]
+ "text/plain": " INSTRUCTION VALUE\n0 ACTION_TO_TAKE BUILD_AND_SAVE_MODEL\n1 MODEL_FILE_NAME MODEL-30",
+ "text/html": "\n\n
\n \n \n \n INSTRUCTION \n VALUE \n \n \n \n \n 0 \n ACTION_TO_TAKE \n BUILD_AND_SAVE_MODEL \n \n \n 1 \n MODEL_FILE_NAME \n MODEL-30 \n \n \n
\n
"
},
- "execution_count": 3,
+ "execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"instructions_dataset = read_csv(\n",
- " '/tf/notebooks/instructions.csv', \n",
- " header=0, \n",
- " sep=' ', \n",
+ " '/tf/notebooks/instructions.csv',\n",
+ " header=0,\n",
+ " sep=' ',\n",
" skipinitialspace=True\n",
")\n",
"\n",
@@ -197,8 +226,12 @@
},
{
"cell_type": "code",
- "execution_count": 4,
- "metadata": {},
+ "execution_count": 49,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# what are we going to do in the current run?\n",
@@ -210,120 +243,39 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Load the Parameters Dataset\n"
]
},
{
"cell_type": "code",
- "execution_count": 5,
- "metadata": {},
+ "execution_count": 50,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " PARAMETER \n",
- " VALUE \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 0 \n",
- " LIST_OF_ASSETS \n",
- " BTC \n",
- " \n",
- " \n",
- " 1 \n",
- " LIST_OF_TIMEFRAMES \n",
- " 01-hs \n",
- " \n",
- " \n",
- " 2 \n",
- " NUMBER_OF_INDICATORS_PROPERTIES \n",
- " 5 \n",
- " \n",
- " \n",
- " 3 \n",
- " NUMBER_OF_LAG_TIMESTEPS \n",
- " 9 \n",
- " \n",
- " \n",
- " 4 \n",
- " NUMBER_OF_ASSETS \n",
- " 1 \n",
- " \n",
- " \n",
- " 5 \n",
- " NUMBER_OF_LABELS \n",
- " 3 \n",
- " \n",
- " \n",
- " 6 \n",
- " PERCENTAGE_OF_DATASET_FOR_TRAINING \n",
- " 80 \n",
- " \n",
- " \n",
- " 7 \n",
- " NUMBER_OF_FEATURES \n",
- " 5 \n",
- " \n",
- " \n",
- " 8 \n",
- " NUMBER_OF_EPOCHS \n",
- " 2 \n",
- " \n",
- " \n",
- " 9 \n",
- " NUMBER_OF_LSTM_NEURONS \n",
- " 50 \n",
- " \n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " PARAMETER VALUE\n",
- "0 LIST_OF_ASSETS BTC\n",
- "1 LIST_OF_TIMEFRAMES 01-hs\n",
- "2 NUMBER_OF_INDICATORS_PROPERTIES 5\n",
- "3 NUMBER_OF_LAG_TIMESTEPS 9\n",
- "4 NUMBER_OF_ASSETS 1\n",
- "5 NUMBER_OF_LABELS 3\n",
- "6 PERCENTAGE_OF_DATASET_FOR_TRAINING 80\n",
- "7 NUMBER_OF_FEATURES 5\n",
- "8 NUMBER_OF_EPOCHS 2\n",
- "9 NUMBER_OF_LSTM_NEURONS 50"
- ]
+ "text/plain": " LIST_OF_ASSETS LIST_OF_TIMEFRAMES NUMBER_OF_INDICATORS_PROPERTIES \\\n0 BTC 01-hs 8 \n\n TIMESTEPS_TO_TRAIN OBSERVATION_WINDOW_SIZE INITIAL_QUOTE_ASSET \\\n0 undefined undefined undefined \n\n INITIAL_BASE_ASSET TRADING_FEE ENV_NAME ENV_VERSION ... \\\n0 undefined undefined undefined undefined ... \n\n ZEUS_DMI_DMI_DMI_ADX ZEUS_DMI_DMI_DMI_MINUSDI ZEUS_DMI_DMI_DMI_PLUSDI \\\n0 NaN NaN NaN \n\n QUANTUM_HARSI_HARSI_HARSI_STOCHD QUANTUM_HARSI_HARSI_HARSI_STOCHK \\\n0 NaN NaN \n\n QUANTUM_HARSI_HARSI_HARSI_HAMIN QUANTUM_HARSI_HARSI_HARSI_HAMAX \\\n0 NaN NaN \n\n QUANTUM_HARSI_HARSI_HARSI_HACLOSE QUANTUM_HARSI_HARSI_HARSI_HAOPEN \\\n0 NaN NaN \n\n QUANTUM_HARSI_HARSI_HARSI_RSI \n0 NaN \n\n[1 rows x 814 columns]",
+ "text/html": "\n\n
\n \n \n \n LIST_OF_ASSETS \n LIST_OF_TIMEFRAMES \n NUMBER_OF_INDICATORS_PROPERTIES \n TIMESTEPS_TO_TRAIN \n OBSERVATION_WINDOW_SIZE \n INITIAL_QUOTE_ASSET \n INITIAL_BASE_ASSET \n TRADING_FEE \n ENV_NAME \n ENV_VERSION \n ... \n ZEUS_DMI_DMI_DMI_ADX \n ZEUS_DMI_DMI_DMI_MINUSDI \n ZEUS_DMI_DMI_DMI_PLUSDI \n QUANTUM_HARSI_HARSI_HARSI_STOCHD \n QUANTUM_HARSI_HARSI_HARSI_STOCHK \n QUANTUM_HARSI_HARSI_HARSI_HAMIN \n QUANTUM_HARSI_HARSI_HARSI_HAMAX \n QUANTUM_HARSI_HARSI_HARSI_HACLOSE \n QUANTUM_HARSI_HARSI_HARSI_HAOPEN \n QUANTUM_HARSI_HARSI_HARSI_RSI \n \n \n \n \n 0 \n BTC \n 01-hs \n 8 \n undefined \n undefined \n undefined \n undefined \n undefined \n undefined \n undefined \n ... \n NaN \n NaN \n NaN \n NaN \n NaN \n NaN \n NaN \n NaN \n NaN \n NaN \n \n \n
\n
1 rows × 814 columns
\n
"
},
- "execution_count": 5,
+ "execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"parameters_dataset = read_csv(\n",
- " '/tf/notebooks/parameters.csv', \n",
- " header=0, \n",
- " sep=' ', \n",
+ " '/tf/notebooks/parameters.csv',\n",
+ " header=0,\n",
+ " sep=' ',\n",
" skipinitialspace=True\n",
")\n",
"\n",
@@ -332,8 +284,12 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
+ "execution_count": 51,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# supporting both positional access and by name\n",
@@ -361,7 +317,7 @@
" NUMBER_OF_LSTM_NEURONS = int(parameters_dataset.values[9][1])\n",
"\n",
"else:\n",
- " \n",
+ "\n",
" NUMBER_OF_INDICATORS_PROPERTIES = int(parameters_dataset['NUMBER_OF_INDICATORS_PROPERTIES'][0])\n",
" # number of timesteps in the secuence that we are going to use to feed the model.\n",
" NUMBER_OF_LAG_TIMESTEPS = int(parameters_dataset['NUMBER_OF_LAG_TIMESTEPS'][0])\n",
@@ -384,203 +340,40 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Load the Time-Series Dataset"
]
},
{
"cell_type": "code",
- "execution_count": 7,
- "metadata": {},
+ "execution_count": 52,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " BTC-candle.max-01-hs-1 \n",
- " BTC-candle.min-01-hs-1 \n",
- " BTC-candle.open-01-hs-1 \n",
- " BTC-candle.close-01-hs-1 \n",
- " BTC-volume.total-01-hs-1 \n",
- " \n",
- " \n",
- " Timestamp \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 1502942400000 \n",
- " 4313.62 \n",
- " 4261.32 \n",
- " 4261.48 \n",
- " 4308.83 \n",
- " 47.181009 \n",
- " \n",
- " \n",
- " 1502946000000 \n",
- " 4328.69 \n",
- " 4291.37 \n",
- " 4308.83 \n",
- " 4315.32 \n",
- " 23.234916 \n",
- " \n",
- " \n",
- " 1502949600000 \n",
- " 4345.45 \n",
- " 4309.37 \n",
- " 4315.32 \n",
- " 4324.35 \n",
- " 7.229691 \n",
- " \n",
- " \n",
- " 1502953200000 \n",
- " 4349.99 \n",
- " 4287.41 \n",
- " 4324.35 \n",
- " 4349.99 \n",
- " 4.443249 \n",
- " \n",
- " \n",
- " 1502956800000 \n",
- " 4377.85 \n",
- " 4333.32 \n",
- " 4333.32 \n",
- " 4360.69 \n",
- " 0.972807 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 1648440000000 \n",
- " 47218.88 \n",
- " 46864.40 \n",
- " 47049.40 \n",
- " 47124.80 \n",
- " 1410.573460 \n",
- " \n",
- " \n",
- " 1648443600000 \n",
- " 47371.99 \n",
- " 47011.38 \n",
- " 47124.80 \n",
- " 47056.19 \n",
- " 4718.796400 \n",
- " \n",
- " \n",
- " 1648447200000 \n",
- " 47106.24 \n",
- " 46716.83 \n",
- " 47056.19 \n",
- " 46904.73 \n",
- " 3764.161810 \n",
- " \n",
- " \n",
- " 1648450800000 \n",
- " 47200.00 \n",
- " 46884.84 \n",
- " 46904.72 \n",
- " 46989.24 \n",
- " 2119.947300 \n",
- " \n",
- " \n",
- " 1648454400000 \n",
- " 47053.25 \n",
- " 46845.98 \n",
- " 46989.24 \n",
- " 47021.24 \n",
- " 1568.216550 \n",
- " \n",
- " \n",
- "
\n",
- "
40421 rows × 5 columns
\n",
- "
"
- ],
- "text/plain": [
- " BTC-candle.max-01-hs-1 BTC-candle.min-01-hs-1 \\\n",
- "Timestamp \n",
- "1502942400000 4313.62 4261.32 \n",
- "1502946000000 4328.69 4291.37 \n",
- "1502949600000 4345.45 4309.37 \n",
- "1502953200000 4349.99 4287.41 \n",
- "1502956800000 4377.85 4333.32 \n",
- "... ... ... \n",
- "1648440000000 47218.88 46864.40 \n",
- "1648443600000 47371.99 47011.38 \n",
- "1648447200000 47106.24 46716.83 \n",
- "1648450800000 47200.00 46884.84 \n",
- "1648454400000 47053.25 46845.98 \n",
- "\n",
- " BTC-candle.open-01-hs-1 BTC-candle.close-01-hs-1 \\\n",
- "Timestamp \n",
- "1502942400000 4261.48 4308.83 \n",
- "1502946000000 4308.83 4315.32 \n",
- "1502949600000 4315.32 4324.35 \n",
- "1502953200000 4324.35 4349.99 \n",
- "1502956800000 4333.32 4360.69 \n",
- "... ... ... \n",
- "1648440000000 47049.40 47124.80 \n",
- "1648443600000 47124.80 47056.19 \n",
- "1648447200000 47056.19 46904.73 \n",
- "1648450800000 46904.72 46989.24 \n",
- "1648454400000 46989.24 47021.24 \n",
- "\n",
- " BTC-volume.total-01-hs-1 \n",
- "Timestamp \n",
- "1502942400000 47.181009 \n",
- "1502946000000 23.234916 \n",
- "1502949600000 7.229691 \n",
- "1502953200000 4.443249 \n",
- "1502956800000 0.972807 \n",
- "... ... \n",
- "1648440000000 1410.573460 \n",
- "1648443600000 4718.796400 \n",
- "1648447200000 3764.161810 \n",
- "1648450800000 2119.947300 \n",
- "1648454400000 1568.216550 \n",
- "\n",
- "[40421 rows x 5 columns]"
- ]
+ "text/plain": " BTC-CANDLE-MAX-01-HS-1 BTC-CANDLE-MIN-01-HS-1 \\\nTIMESTAMP \n1502928000000 29864.04 29864.04 \n1502931600000 29864.04 29864.04 \n1502935200000 29864.04 29864.04 \n1502938800000 29864.04 29864.04 \n1502942400000 4313.62 4261.32 \n... ... ... \n1658160000000 22713.28 22110.77 \n1658163600000 22222.40 21821.05 \n1658167200000 22010.70 21801.56 \n1658170800000 21879.53 21388.00 \n1658174400000 21678.43 21434.35 \n\n BTC-CANDLE-CLOSE-01-HS-1 BTC-CANDLE-OPEN-01-HS-1 \\\nTIMESTAMP \n1502928000000 29864.04 29864.04 \n1502931600000 29864.04 29864.04 \n1502935200000 29864.04 29864.04 \n1502938800000 29864.04 29864.04 \n1502942400000 4308.83 4261.48 \n... ... ... \n1658160000000 22202.00 22675.83 \n1658163600000 21878.06 22200.57 \n1658167200000 21832.70 21876.30 \n1658170800000 21617.92 21835.17 \n1658174400000 21493.18 21617.92 \n\n BTC-VOLUME-BUY-01-HS-1 BTC-RESISTANCE-RESISTANCE2RATE-01-HS-1 \\\nTIMESTAMP \n1502928000000 0.000000 0.00 \n1502931600000 0.000000 0.00 \n1502935200000 0.000000 0.00 \n1502938800000 0.000000 0.00 \n1502942400000 23.590505 0.00 \n... ... ... \n1658160000000 7005.838035 22995.73 \n1658163600000 4920.851585 22995.73 \n1658167200000 4242.611330 22995.73 \n1658170800000 6178.571300 22995.73 \n1658174400000 3304.876955 22995.73 \n\n BTC-RESISTANCE-RESISTANCE3RATE-01-HS-1 \\\nTIMESTAMP \n1502928000000 0.00 \n1502931600000 0.00 \n1502935200000 0.00 \n1502938800000 0.00 \n1502942400000 0.00 \n... ... \n1658160000000 23041.27 \n1658163600000 23041.27 \n1658167200000 23041.27 \n1658170800000 23041.27 \n1658174400000 23041.27 \n\n BTC-RESISTANCE-RESISTANCE4RATE-01-HS-1 \nTIMESTAMP \n1502928000000 0.00 \n1502931600000 0.00 \n1502935200000 0.00 \n1502938800000 0.00 \n1502942400000 0.00 \n... ... \n1658160000000 23362.88 \n1658163600000 23362.88 \n1658167200000 23362.88 \n1658170800000 23362.88 \n1658174400000 23362.88 \n\n[43125 rows x 8 columns]",
+ "text/html": "\n\n
\n \n \n \n BTC-CANDLE-MAX-01-HS-1 \n BTC-CANDLE-MIN-01-HS-1 \n BTC-CANDLE-CLOSE-01-HS-1 \n BTC-CANDLE-OPEN-01-HS-1 \n BTC-VOLUME-BUY-01-HS-1 \n BTC-RESISTANCE-RESISTANCE2RATE-01-HS-1 \n BTC-RESISTANCE-RESISTANCE3RATE-01-HS-1 \n BTC-RESISTANCE-RESISTANCE4RATE-01-HS-1 \n \n \n TIMESTAMP \n \n \n \n \n \n \n \n \n \n \n \n \n 1502928000000 \n 29864.04 \n 29864.04 \n 29864.04 \n 29864.04 \n 0.000000 \n 0.00 \n 0.00 \n 0.00 \n \n \n 1502931600000 \n 29864.04 \n 29864.04 \n 29864.04 \n 29864.04 \n 0.000000 \n 0.00 \n 0.00 \n 0.00 \n \n \n 1502935200000 \n 29864.04 \n 29864.04 \n 29864.04 \n 29864.04 \n 0.000000 \n 0.00 \n 0.00 \n 0.00 \n \n \n 1502938800000 \n 29864.04 \n 29864.04 \n 29864.04 \n 29864.04 \n 0.000000 \n 0.00 \n 0.00 \n 0.00 \n \n \n 1502942400000 \n 4313.62 \n 4261.32 \n 4308.83 \n 4261.48 \n 23.590505 \n 0.00 \n 0.00 \n 0.00 \n \n \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n \n \n 1658160000000 \n 22713.28 \n 22110.77 \n 22202.00 \n 22675.83 \n 7005.838035 \n 22995.73 \n 23041.27 \n 23362.88 \n \n \n 1658163600000 \n 22222.40 \n 21821.05 \n 21878.06 \n 22200.57 \n 4920.851585 \n 22995.73 \n 23041.27 \n 23362.88 \n \n \n 1658167200000 \n 22010.70 \n 21801.56 \n 21832.70 \n 21876.30 \n 4242.611330 \n 22995.73 \n 23041.27 \n 23362.88 \n \n \n 1658170800000 \n 21879.53 \n 21388.00 \n 21617.92 \n 21835.17 \n 6178.571300 \n 22995.73 \n 23041.27 \n 23362.88 \n \n \n 1658174400000 \n 21678.43 \n 21434.35 \n 21493.18 \n 21617.92 \n 3304.876955 \n 22995.73 \n 23041.27 \n 23362.88 \n \n \n
\n
43125 rows × 8 columns
\n
"
},
- "execution_count": 7,
+ "execution_count": 52,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"timeseries_dataset = read_csv(\n",
- " '/tf/notebooks/time-series.csv', \n",
- " header=0, \n",
+ " '/tf/notebooks/time-series.csv',\n",
+ " header=0,\n",
" index_col=0, #The first colum is a timestamp that will be used to index all the data.\n",
- " sep=' ', \n",
+ " sep=' ',\n",
" skipinitialspace=True\n",
")\n",
"\n",
@@ -589,22 +382,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Duplicate the Last Record"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"The reframing process shift each record to the left of the shifting window, producing that the last record of data is ignored at the last prediction. To fix this we will duplicate the last record so that the last prediction belongs to the the last piece of information available."
]
},
{
"cell_type": "code",
- "execution_count": 8,
- "metadata": {},
+ "execution_count": 53,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"values = timeseries_dataset.values"
@@ -612,16 +417,18 @@
},
{
"cell_type": "code",
- "execution_count": 9,
- "metadata": {},
+ "execution_count": 54,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[47053.25 , 46845.98 , 46989.24 , 47021.24 , 1568.21655]])"
- ]
+ "text/plain": "array([[21678.43 , 21434.35 , 21493.18 , 21617.92 ,\n 3304.876955, 22995.73 , 23041.27 , 23362.88 ]])"
},
- "execution_count": 9,
+ "execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
@@ -633,28 +440,18 @@
},
{
"cell_type": "code",
- "execution_count": 10,
- "metadata": {},
+ "execution_count": 55,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[4.31362000e+03, 4.26132000e+03, 4.26148000e+03, 4.30883000e+03,\n",
- " 4.71810090e+01],\n",
- " [4.32869000e+03, 4.29137000e+03, 4.30883000e+03, 4.31532000e+03,\n",
- " 2.32349160e+01],\n",
- " [4.34545000e+03, 4.30937000e+03, 4.31532000e+03, 4.32435000e+03,\n",
- " 7.22969100e+00],\n",
- " ...,\n",
- " [4.72000000e+04, 4.68848400e+04, 4.69047200e+04, 4.69892400e+04,\n",
- " 2.11994730e+03],\n",
- " [4.70532500e+04, 4.68459800e+04, 4.69892400e+04, 4.70212400e+04,\n",
- " 1.56821655e+03],\n",
- " [4.70532500e+04, 4.68459800e+04, 4.69892400e+04, 4.70212400e+04,\n",
- " 1.56821655e+03]])"
- ]
+ "text/plain": "array([[29864.04, 29864.04, 29864.04, ..., 0. , 0. , 0. ],\n [29864.04, 29864.04, 29864.04, ..., 0. , 0. , 0. ],\n [29864.04, 29864.04, 29864.04, ..., 0. , 0. , 0. ],\n ...,\n [21879.53, 21388. , 21617.92, ..., 22995.73, 23041.27, 23362.88],\n [21678.43, 21434.35, 21493.18, ..., 22995.73, 23041.27, 23362.88],\n [21678.43, 21434.35, 21493.18, ..., 22995.73, 23041.27, 23362.88]])"
},
- "execution_count": 10,
+ "execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
@@ -666,8 +463,12 @@
},
{
"cell_type": "code",
- "execution_count": 11,
- "metadata": {},
+ "execution_count": 56,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# ensure all data is float\n",
@@ -676,31 +477,43 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Plot & Verify"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"We plot our raw data just to be sure with a glimpse that it is alright."
]
},
{
"cell_type": "code",
- "execution_count": 12,
- "metadata": {},
+ "execution_count": 57,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "image/png": "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",
- "text/plain": [
- ""
- ]
+ "text/plain": "",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
},
- "metadata": {},
"output_type": "display_data"
}
],
@@ -720,22 +533,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Normalization"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "Normalizing or removing the scale, is a standar prodcedure of any machine learning workflow. "
+ "Normalizing or removing the scale, is a standar prodcedure of any machine learning workflow."
]
},
{
"cell_type": "code",
- "execution_count": 13,
- "metadata": {},
+ "execution_count": 58,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# normalize features\n",
@@ -745,22 +570,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Reframing as a Supervised Learning Problem"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"Each Raw record needs to be expanded with the previous records in order to be suitable for beeing fed into a LSTM model. Some fields of the record at time = 0 will be used as labels and the ones at time < 0 as features."
]
},
{
"cell_type": "code",
- "execution_count": 14,
- "metadata": {},
+ "execution_count": 59,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# frame as supervised learning\n",
@@ -769,380 +606,19 @@
},
{
"cell_type": "code",
- "execution_count": 15,
- "metadata": {},
+ "execution_count": 60,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " var1(t-9) \n",
- " var2(t-9) \n",
- " var3(t-9) \n",
- " var4(t-9) \n",
- " var5(t-9) \n",
- " var1(t-8) \n",
- " var2(t-8) \n",
- " var3(t-8) \n",
- " var4(t-8) \n",
- " var5(t-8) \n",
- " ... \n",
- " var1(t-1) \n",
- " var2(t-1) \n",
- " var3(t-1) \n",
- " var4(t-1) \n",
- " var5(t-1) \n",
- " var1(t) \n",
- " var2(t) \n",
- " var3(t) \n",
- " var4(t) \n",
- " var5(t) \n",
- " \n",
- " \n",
- " \n",
- " \n",
- " 9 \n",
- " 0.020645 \n",
- " 0.022006 \n",
- " 0.021145 \n",
- " 0.021149 \n",
- " 0.000998 \n",
- " 0.020873 \n",
- " 0.022463 \n",
- " 0.021865 \n",
- " 0.021248 \n",
- " 0.000492 \n",
- " ... \n",
- " 0.022703 \n",
- " 0.024286 \n",
- " 0.023666 \n",
- " 0.022704 \n",
- " 0.000487 \n",
- " 0.022846 \n",
- " 0.024286 \n",
- " 0.023419 \n",
- " 0.023435 \n",
- " 0.000663 \n",
- " \n",
- " \n",
- " 10 \n",
- " 0.020873 \n",
- " 0.022463 \n",
- " 0.021865 \n",
- " 0.021248 \n",
- " 0.000492 \n",
- " 0.021127 \n",
- " 0.022738 \n",
- " 0.021964 \n",
- " 0.021386 \n",
- " 0.000153 \n",
- " ... \n",
- " 0.022846 \n",
- " 0.024286 \n",
- " 0.023419 \n",
- " 0.023435 \n",
- " 0.000663 \n",
- " 0.023246 \n",
- " 0.024666 \n",
- " 0.024148 \n",
- " 0.023615 \n",
- " 0.001095 \n",
- " \n",
- " \n",
- " 11 \n",
- " 0.021127 \n",
- " 0.022738 \n",
- " 0.021964 \n",
- " 0.021386 \n",
- " 0.000153 \n",
- " 0.021196 \n",
- " 0.022403 \n",
- " 0.022101 \n",
- " 0.021776 \n",
- " 0.000094 \n",
- " ... \n",
- " 0.023246 \n",
- " 0.024666 \n",
- " 0.024148 \n",
- " 0.023615 \n",
- " 0.001095 \n",
- " 0.023025 \n",
- " 0.023104 \n",
- " 0.024328 \n",
- " 0.021812 \n",
- " 0.001449 \n",
- " \n",
- " \n",
- " 12 \n",
- " 0.021196 \n",
- " 0.022403 \n",
- " 0.022101 \n",
- " 0.021776 \n",
- " 0.000094 \n",
- " 0.021618 \n",
- " 0.023103 \n",
- " 0.022237 \n",
- " 0.021939 \n",
- " 0.000021 \n",
- " ... \n",
- " 0.023025 \n",
- " 0.023104 \n",
- " 0.024328 \n",
- " 0.021812 \n",
- " 0.001449 \n",
- " 0.021262 \n",
- " 0.021914 \n",
- " 0.022527 \n",
- " 0.021840 \n",
- " 0.001428 \n",
- " \n",
- " \n",
- " 13 \n",
- " 0.021618 \n",
- " 0.023103 \n",
- " 0.022237 \n",
- " 0.021939 \n",
- " 0.000021 \n",
- " 0.022646 \n",
- " 0.023509 \n",
- " 0.022654 \n",
- " 0.023206 \n",
- " 0.000228 \n",
- " ... \n",
- " 0.021262 \n",
- " 0.021914 \n",
- " 0.022527 \n",
- " 0.021840 \n",
- " 0.001428 \n",
- " 0.021269 \n",
- " 0.021611 \n",
- " 0.022555 \n",
- " 0.020851 \n",
- " 0.001263 \n",
- " \n",
- " \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " ... \n",
- " \n",
- " \n",
- " 40417 \n",
- " 0.661107 \n",
- " 0.637794 \n",
- " 0.638033 \n",
- " 0.657339 \n",
- " 0.202918 \n",
- " 0.663891 \n",
- " 0.655469 \n",
- " 0.657575 \n",
- " 0.663978 \n",
- " 0.100338 \n",
- " ... \n",
- " 0.670233 \n",
- " 0.671105 \n",
- " 0.671771 \n",
- " 0.672693 \n",
- " 0.029850 \n",
- " 0.672551 \n",
- " 0.673344 \n",
- " 0.672918 \n",
- " 0.671649 \n",
- " 0.099857 \n",
- " \n",
- " \n",
- " 40418 \n",
- " 0.663891 \n",
- " 0.655469 \n",
- " 0.657575 \n",
- " 0.663978 \n",
- " 0.100338 \n",
- " 0.666904 \n",
- " 0.663389 \n",
- " 0.664209 \n",
- " 0.664905 \n",
- " 0.132034 \n",
- " ... \n",
- " 0.672551 \n",
- " 0.673344 \n",
- " 0.672918 \n",
- " 0.671649 \n",
- " 0.099857 \n",
- " 0.668527 \n",
- " 0.668856 \n",
- " 0.671874 \n",
- " 0.669344 \n",
- " 0.079655 \n",
- " \n",
- " \n",
- " 40419 \n",
- " 0.666904 \n",
- " 0.663389 \n",
- " 0.664209 \n",
- " 0.664905 \n",
- " 0.132034 \n",
- " 0.665070 \n",
- " 0.666460 \n",
- " 0.665135 \n",
- " 0.668173 \n",
- " 0.040316 \n",
- " ... \n",
- " 0.668527 \n",
- " 0.668856 \n",
- " 0.671874 \n",
- " 0.669344 \n",
- " 0.079655 \n",
- " 0.669947 \n",
- " 0.671416 \n",
- " 0.669571 \n",
- " 0.670630 \n",
- " 0.044861 \n",
- " \n",
- " \n",
- " 40420 \n",
- " 0.665070 \n",
- " 0.666460 \n",
- " 0.665135 \n",
- " 0.668173 \n",
- " 0.040316 \n",
- " 0.676760 \n",
- " 0.668045 \n",
- " 0.668401 \n",
- " 0.669591 \n",
- " 0.129738 \n",
- " ... \n",
- " 0.669947 \n",
- " 0.671416 \n",
- " 0.669571 \n",
- " 0.670630 \n",
- " 0.044861 \n",
- " 0.667725 \n",
- " 0.670824 \n",
- " 0.670856 \n",
- " 0.671117 \n",
- " 0.033186 \n",
- " \n",
- " \n",
- " 40421 \n",
- " 0.676760 \n",
- " 0.668045 \n",
- " 0.668401 \n",
- " 0.669591 \n",
- " 0.129738 \n",
- " 0.667486 \n",
- " 0.668600 \n",
- " 0.669819 \n",
- " 0.667910 \n",
- " 0.036835 \n",
- " ... \n",
- " 0.667725 \n",
- " 0.670824 \n",
- " 0.670856 \n",
- " 0.671117 \n",
- " 0.033186 \n",
- " 0.667725 \n",
- " 0.670824 \n",
- " 0.670856 \n",
- " 0.671117 \n",
- " 0.033186 \n",
- " \n",
- " \n",
- "
\n",
- "
40413 rows × 50 columns
\n",
- "
"
- ],
- "text/plain": [
- " var1(t-9) var2(t-9) var3(t-9) var4(t-9) var5(t-9) var1(t-8) \\\n",
- "9 0.020645 0.022006 0.021145 0.021149 0.000998 0.020873 \n",
- "10 0.020873 0.022463 0.021865 0.021248 0.000492 0.021127 \n",
- "11 0.021127 0.022738 0.021964 0.021386 0.000153 0.021196 \n",
- "12 0.021196 0.022403 0.022101 0.021776 0.000094 0.021618 \n",
- "13 0.021618 0.023103 0.022237 0.021939 0.000021 0.022646 \n",
- "... ... ... ... ... ... ... \n",
- "40417 0.661107 0.637794 0.638033 0.657339 0.202918 0.663891 \n",
- "40418 0.663891 0.655469 0.657575 0.663978 0.100338 0.666904 \n",
- "40419 0.666904 0.663389 0.664209 0.664905 0.132034 0.665070 \n",
- "40420 0.665070 0.666460 0.665135 0.668173 0.040316 0.676760 \n",
- "40421 0.676760 0.668045 0.668401 0.669591 0.129738 0.667486 \n",
- "\n",
- " var2(t-8) var3(t-8) var4(t-8) var5(t-8) ... var1(t-1) var2(t-1) \\\n",
- "9 0.022463 0.021865 0.021248 0.000492 ... 0.022703 0.024286 \n",
- "10 0.022738 0.021964 0.021386 0.000153 ... 0.022846 0.024286 \n",
- "11 0.022403 0.022101 0.021776 0.000094 ... 0.023246 0.024666 \n",
- "12 0.023103 0.022237 0.021939 0.000021 ... 0.023025 0.023104 \n",
- "13 0.023509 0.022654 0.023206 0.000228 ... 0.021262 0.021914 \n",
- "... ... ... ... ... ... ... ... \n",
- "40417 0.655469 0.657575 0.663978 0.100338 ... 0.670233 0.671105 \n",
- "40418 0.663389 0.664209 0.664905 0.132034 ... 0.672551 0.673344 \n",
- "40419 0.666460 0.665135 0.668173 0.040316 ... 0.668527 0.668856 \n",
- "40420 0.668045 0.668401 0.669591 0.129738 ... 0.669947 0.671416 \n",
- "40421 0.668600 0.669819 0.667910 0.036835 ... 0.667725 0.670824 \n",
- "\n",
- " var3(t-1) var4(t-1) var5(t-1) var1(t) var2(t) var3(t) \\\n",
- "9 0.023666 0.022704 0.000487 0.022846 0.024286 0.023419 \n",
- "10 0.023419 0.023435 0.000663 0.023246 0.024666 0.024148 \n",
- "11 0.024148 0.023615 0.001095 0.023025 0.023104 0.024328 \n",
- "12 0.024328 0.021812 0.001449 0.021262 0.021914 0.022527 \n",
- "13 0.022527 0.021840 0.001428 0.021269 0.021611 0.022555 \n",
- "... ... ... ... ... ... ... \n",
- "40417 0.671771 0.672693 0.029850 0.672551 0.673344 0.672918 \n",
- "40418 0.672918 0.671649 0.099857 0.668527 0.668856 0.671874 \n",
- "40419 0.671874 0.669344 0.079655 0.669947 0.671416 0.669571 \n",
- "40420 0.669571 0.670630 0.044861 0.667725 0.670824 0.670856 \n",
- "40421 0.670856 0.671117 0.033186 0.667725 0.670824 0.670856 \n",
- "\n",
- " var4(t) var5(t) \n",
- "9 0.023435 0.000663 \n",
- "10 0.023615 0.001095 \n",
- "11 0.021812 0.001449 \n",
- "12 0.021840 0.001428 \n",
- "13 0.020851 0.001263 \n",
- "... ... ... \n",
- "40417 0.671649 0.099857 \n",
- "40418 0.669344 0.079655 \n",
- "40419 0.670630 0.044861 \n",
- "40420 0.671117 0.033186 \n",
- "40421 0.671117 0.033186 \n",
- "\n",
- "[40413 rows x 50 columns]"
- ]
+ "text/plain": " var1(t-10) var2(t-10) var3(t-10) var4(t-10) var5(t-10) var6(t-10) \\\n10 0.407480 0.412088 0.410031 0.410453 0.000000 0.000000 \n11 0.407480 0.412088 0.410031 0.410453 0.000000 0.000000 \n12 0.407480 0.412088 0.410031 0.410453 0.000000 0.000000 \n13 0.407480 0.412088 0.410031 0.410453 0.000000 0.000000 \n14 0.020645 0.022006 0.021149 0.021145 0.000344 0.000000 \n... ... ... ... ... ... ... \n43121 0.294474 0.293824 0.294104 0.293880 0.082412 0.333271 \n43122 0.296215 0.294587 0.294771 0.294614 0.101387 0.333271 \n43123 0.294474 0.295623 0.294044 0.295281 0.061760 0.333271 \n43124 0.293988 0.294371 0.293399 0.294539 0.061271 0.333271 \n43125 0.293414 0.291673 0.292390 0.293910 0.083027 0.333271 \n\n var7(t-10) var8(t-10) var1(t-9) var2(t-9) ... var7(t-1) \\\n10 0.000000 0.000000 0.407480 0.412088 ... 0.000000 \n11 0.000000 0.000000 0.407480 0.412088 ... 0.000000 \n12 0.000000 0.000000 0.407480 0.412088 ... 0.000000 \n13 0.000000 0.000000 0.020645 0.022006 ... 0.000000 \n14 0.000000 0.000000 0.020873 0.022463 ... 0.000000 \n... ... ... ... ... ... ... \n43121 0.333931 0.338592 0.296215 0.294587 ... 0.333931 \n43122 0.333931 0.338592 0.294474 0.295623 ... 0.333931 \n43123 0.333931 0.338592 0.293988 0.294371 ... 0.333931 \n43124 0.333931 0.338592 0.293414 0.291673 ... 0.333931 \n43125 0.333931 0.338592 0.293263 0.290717 ... 0.333931 \n\n var8(t-1) var1(t) var2(t) var3(t) var4(t) var5(t) var6(t) \\\n10 0.000000 0.023013 0.024116 0.023450 0.023876 0.000181 0.000000 \n11 0.000000 0.023246 0.024534 0.022952 0.024164 0.000197 0.000000 \n12 0.000000 0.022703 0.024286 0.022704 0.023666 0.000168 0.000000 \n13 0.000000 0.022846 0.024286 0.023435 0.023419 0.000228 0.000000 \n14 0.000000 0.023246 0.024666 0.023615 0.024148 0.000377 0.000000 \n... ... ... ... ... ... ... ... \n43121 0.338592 0.291785 0.289545 0.288506 0.293924 0.071729 0.333271 \n43122 0.338592 0.288580 0.289248 0.287815 0.288993 0.061842 0.333271 \n43123 0.338592 0.286594 0.282947 0.284547 0.288368 0.090062 0.333271 \n43124 0.338592 0.283549 0.283653 0.282649 0.285064 0.048174 0.333271 \n43125 0.338592 0.283549 0.283653 0.282649 0.285064 0.048174 0.333271 \n\n var7(t) var8(t) \n10 0.000000 0.000000 \n11 0.000000 0.000000 \n12 0.000000 0.000000 \n13 0.000000 0.000000 \n14 0.000000 0.000000 \n... ... ... \n43121 0.333931 0.338592 \n43122 0.333931 0.338592 \n43123 0.333931 0.338592 \n43124 0.333931 0.338592 \n43125 0.333931 0.338592 \n\n[43116 rows x 88 columns]",
+ "text/html": "\n\n
\n \n \n \n var1(t-10) \n var2(t-10) \n var3(t-10) \n var4(t-10) \n var5(t-10) \n var6(t-10) \n var7(t-10) \n var8(t-10) \n var1(t-9) \n var2(t-9) \n ... \n var7(t-1) \n var8(t-1) \n var1(t) \n var2(t) \n var3(t) \n var4(t) \n var5(t) \n var6(t) \n var7(t) \n var8(t) \n \n \n \n \n 10 \n 0.407480 \n 0.412088 \n 0.410031 \n 0.410453 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.407480 \n 0.412088 \n ... \n 0.000000 \n 0.000000 \n 0.023013 \n 0.024116 \n 0.023450 \n 0.023876 \n 0.000181 \n 0.000000 \n 0.000000 \n 0.000000 \n \n \n 11 \n 0.407480 \n 0.412088 \n 0.410031 \n 0.410453 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.407480 \n 0.412088 \n ... \n 0.000000 \n 0.000000 \n 0.023246 \n 0.024534 \n 0.022952 \n 0.024164 \n 0.000197 \n 0.000000 \n 0.000000 \n 0.000000 \n \n \n 12 \n 0.407480 \n 0.412088 \n 0.410031 \n 0.410453 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.407480 \n 0.412088 \n ... \n 0.000000 \n 0.000000 \n 0.022703 \n 0.024286 \n 0.022704 \n 0.023666 \n 0.000168 \n 0.000000 \n 0.000000 \n 0.000000 \n \n \n 13 \n 0.407480 \n 0.412088 \n 0.410031 \n 0.410453 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.020645 \n 0.022006 \n ... \n 0.000000 \n 0.000000 \n 0.022846 \n 0.024286 \n 0.023435 \n 0.023419 \n 0.000228 \n 0.000000 \n 0.000000 \n 0.000000 \n \n \n 14 \n 0.020645 \n 0.022006 \n 0.021149 \n 0.021145 \n 0.000344 \n 0.000000 \n 0.000000 \n 0.000000 \n 0.020873 \n 0.022463 \n ... \n 0.000000 \n 0.000000 \n 0.023246 \n 0.024666 \n 0.023615 \n 0.024148 \n 0.000377 \n 0.000000 \n 0.000000 \n 0.000000 \n \n \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n ... \n \n \n 43121 \n 0.294474 \n 0.293824 \n 0.294104 \n 0.293880 \n 0.082412 \n 0.333271 \n 0.333931 \n 0.338592 \n 0.296215 \n 0.294587 \n ... \n 0.333931 \n 0.338592 \n 0.291785 \n 0.289545 \n 0.288506 \n 0.293924 \n 0.071729 \n 0.333271 \n 0.333931 \n 0.338592 \n \n \n 43122 \n 0.296215 \n 0.294587 \n 0.294771 \n 0.294614 \n 0.101387 \n 0.333271 \n 0.333931 \n 0.338592 \n 0.294474 \n 0.295623 \n ... \n 0.333931 \n 0.338592 \n 0.288580 \n 0.289248 \n 0.287815 \n 0.288993 \n 0.061842 \n 0.333271 \n 0.333931 \n 0.338592 \n \n \n 43123 \n 0.294474 \n 0.295623 \n 0.294044 \n 0.295281 \n 0.061760 \n 0.333271 \n 0.333931 \n 0.338592 \n 0.293988 \n 0.294371 \n ... \n 0.333931 \n 0.338592 \n 0.286594 \n 0.282947 \n 0.284547 \n 0.288368 \n 0.090062 \n 0.333271 \n 0.333931 \n 0.338592 \n \n \n 43124 \n 0.293988 \n 0.294371 \n 0.293399 \n 0.294539 \n 0.061271 \n 0.333271 \n 0.333931 \n 0.338592 \n 0.293414 \n 0.291673 \n ... \n 0.333931 \n 0.338592 \n 0.283549 \n 0.283653 \n 0.282649 \n 0.285064 \n 0.048174 \n 0.333271 \n 0.333931 \n 0.338592 \n \n \n 43125 \n 0.293414 \n 0.291673 \n 0.292390 \n 0.293910 \n 0.083027 \n 0.333271 \n 0.333931 \n 0.338592 \n 0.293263 \n 0.290717 \n ... \n 0.333931 \n 0.338592 \n 0.283549 \n 0.283653 \n 0.282649 \n 0.285064 \n 0.048174 \n 0.333271 \n 0.333931 \n 0.338592 \n \n \n
\n
43116 rows × 88 columns
\n
"
},
- "execution_count": 15,
+ "execution_count": 60,
"metadata": {},
"output_type": "execute_result"
}
@@ -1153,30 +629,40 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Train and Test Dataset Preparation"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"The first part of the dataset will be used to train the model. The last part for calculating the prediction error. Later we will generate the predictions for the test dataset and measure how accurate they were."
]
},
{
"cell_type": "code",
- "execution_count": 16,
- "metadata": {},
+ "execution_count": 61,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "32330"
- ]
+ "text/plain": "34492"
},
- "execution_count": 16,
+ "execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
@@ -1191,8 +677,12 @@
},
{
"cell_type": "code",
- "execution_count": 17,
- "metadata": {},
+ "execution_count": 62,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# split into train and test sets\n",
@@ -1202,16 +692,18 @@
},
{
"cell_type": "code",
- "execution_count": 18,
- "metadata": {},
+ "execution_count": 63,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "(32330, 50)"
- ]
+ "text/plain": "(34492, 88)"
},
- "execution_count": 18,
+ "execution_count": 63,
"metadata": {},
"output_type": "execute_result"
}
@@ -1222,16 +714,18 @@
},
{
"cell_type": "code",
- "execution_count": 19,
- "metadata": {},
+ "execution_count": 64,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "(8083, 50)"
- ]
+ "text/plain": "(8624, 88)"
},
- "execution_count": 19,
+ "execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
@@ -1242,23 +736,35 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Split into Input and Outputs"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "Here we will split both the Train and the Test datasets into features and labels. \n",
+ "Here we will split both the Train and the Test datasets into features and labels.\n",
"Features will be all the information where time < 0. For the labels, we will pick only the first 2 fields of each set of indicator properties, which we expect them to contain the Candle Max and Candle Min for each Asset."
]
},
{
"cell_type": "code",
- "execution_count": 20,
- "metadata": {},
+ "execution_count": 65,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# split into input and outputs\n",
@@ -1273,28 +779,18 @@
},
{
"cell_type": "code",
- "execution_count": 21,
- "metadata": {},
+ "execution_count": 66,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[2.0645272e-02, 2.2005606e-02, 2.1144930e-02, ..., 2.3666363e-02,\n",
- " 2.2704210e-02, 4.8739873e-04],\n",
- " [2.0873431e-02, 2.2463445e-02, 2.1864932e-02, ..., 2.3418512e-02,\n",
- " 2.3434643e-02, 6.6261622e-04],\n",
- " [2.1127176e-02, 2.2737693e-02, 2.1963615e-02, ..., 2.4148393e-02,\n",
- " 2.3614507e-02, 1.0948061e-03],\n",
- " ...,\n",
- " [7.1735293e-01, 7.1278405e-01, 7.2103208e-01, ..., 7.0659775e-01,\n",
- " 7.0960891e-01, 3.9517116e-02],\n",
- " [7.0787340e-01, 7.1278769e-01, 7.1096200e-01, ..., 7.0980603e-01,\n",
- " 7.1430814e-01, 5.1062260e-02],\n",
- " [7.0755398e-01, 7.1406299e-01, 7.1183151e-01, ..., 7.1452701e-01,\n",
- " 7.1451163e-01, 6.2090937e-02]], dtype=float32)"
- ]
+ "text/plain": "array([[0.40747976, 0.41208768, 0.4100307 , ..., 0. , 0. ,\n 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. , 0. ,\n 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. , 0. ,\n 0. ],\n ...,\n [0.4647994 , 0.4661892 , 0.4669264 , ..., 0.5001449 , 0.5024058 ,\n 0.50411594],\n [0.46677107, 0.46867132, 0.46793485, ..., 0.5024058 , 0.50411594,\n 0.5081028 ],\n [0.46556962, 0.46765798, 0.46794683, ..., 0.5001449 , 0.5024058 ,\n 0.50411594]], dtype=float32)"
},
- "execution_count": 21,
+ "execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
@@ -1305,22 +801,18 @@
},
{
"cell_type": "code",
- "execution_count": 22,
- "metadata": {},
+ "execution_count": 67,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[0.02284633, 0.02428612, 0.02341851],\n",
- " [0.02324587, 0.02466596, 0.02414839],\n",
- " [0.02302528, 0.02310412, 0.02432812],\n",
- " ...,\n",
- " [0.7119553 , 0.71049863, 0.709806 ],\n",
- " [0.7147231 , 0.7150694 , 0.714527 ],\n",
- " [0.7199092 , 0.71430767, 0.71470475]], dtype=float32)"
- ]
+ "text/plain": "array([[0.02301287, 0.02411563, 0.02344986],\n [0.02324587, 0.02453447, 0.02295225],\n [0.02270341, 0.02428612, 0.02270421],\n ...,\n [0.4710933 , 0.47022754, 0.47094494],\n [0.4680848 , 0.47111344, 0.47017765],\n [0.4691372 , 0.47155666, 0.46966803]], dtype=float32)"
},
- "execution_count": 22,
+ "execution_count": 67,
"metadata": {},
"output_type": "execute_result"
}
@@ -1331,22 +823,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Reshape Inputs to fit LSTM type of Network"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"This type of Network Architecture requires the features to be in a 3D shape."
]
},
{
"cell_type": "code",
- "execution_count": 23,
- "metadata": {},
+ "execution_count": 68,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# reshape input to be 3D [samples, timesteps, features]\n",
@@ -1356,22 +860,56 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "## Network Architecture"
+ "## Network Architecture\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 69,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "array([[[0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n ...,\n [0.02119591, 0.02240312, 0.02177581, ..., 0. ,\n 0. , 0. ],\n [0.02161771, 0.02310259, 0.02193863, ..., 0. ,\n 0. , 0. ],\n [0.02264617, 0.02350909, 0.02320638, ..., 0. ,\n 0. , 0. ]],\n\n [[0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n ...,\n [0.02161771, 0.02310259, 0.02193863, ..., 0. ,\n 0. , 0. ],\n [0.02264617, 0.02350909, 0.02320638, ..., 0. ,\n 0. , 0. ],\n [0.02301287, 0.02411563, 0.02344986, ..., 0. ,\n 0. , 0. ]],\n\n [[0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n [0.40747976, 0.41208768, 0.4100307 , ..., 0. ,\n 0. , 0. ],\n [0.02064527, 0.02200561, 0.02114946, ..., 0. ,\n 0. , 0. ],\n ...,\n [0.02264617, 0.02350909, 0.02320638, ..., 0. ,\n 0. , 0. ],\n [0.02301287, 0.02411563, 0.02344986, ..., 0. ,\n 0. , 0. ],\n [0.02324587, 0.02453447, 0.02295225, ..., 0. ,\n 0. , 0. ]],\n\n ...,\n\n [[0.4647994 , 0.4661892 , 0.4669264 , ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.46677107, 0.46867132, 0.46793485, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.46556962, 0.46765798, 0.46794683, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n ...,\n [0.4675246 , 0.468131 , 0.46706426, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.468081 , 0.46896613, 0.4704371 , ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.4690969 , 0.47129405, 0.47111493, ..., 0.5001449 ,\n 0.5024058 , 0.50411594]],\n\n [[0.46677107, 0.46867132, 0.46793485, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.46556962, 0.46765798, 0.46794683, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.46775794, 0.46918494, 0.46821463, ..., 0.5024058 ,\n 0.50411594, 0.5081028 ],\n ...,\n [0.468081 , 0.46896613, 0.4704371 , ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.4690969 , 0.47129405, 0.47111493, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.4710933 , 0.47022754, 0.47094494, ..., 0.5024058 ,\n 0.50411594, 0.5081028 ]],\n\n [[0.46556962, 0.46765798, 0.46794683, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.46775794, 0.46918494, 0.46821463, ..., 0.5024058 ,\n 0.50411594, 0.5081028 ],\n [0.4666354 , 0.46857792, 0.46911418, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n ...,\n [0.4690969 , 0.47129405, 0.47111493, ..., 0.5001449 ,\n 0.5024058 , 0.50411594],\n [0.4710933 , 0.47022754, 0.47094494, ..., 0.5024058 ,\n 0.50411594, 0.5081028 ],\n [0.4680848 , 0.47111344, 0.47017765, ..., 0.5001449 ,\n 0.5024058 , 0.50411594]]], dtype=float32)"
+ },
+ "execution_count": 69,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "train_X"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"Here we are using an LSTM architecture for our neural network. This is the type of architecture usually used for problems involving time-series."
]
},
{
"cell_type": "code",
- "execution_count": 24,
- "metadata": {},
+ "execution_count": 70,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"if ACTION_TO_TAKE == \"LOAD_MODEL_AND_PREDICT\":\n",
@@ -1387,22 +925,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Fit the Model"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"We print this output so that the caller program can get the results in a JSON object."
]
},
{
"cell_type": "code",
- "execution_count": 25,
- "metadata": {},
+ "execution_count": 71,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"name": "stdout",
@@ -1414,67 +964,116 @@
}
],
"source": [
- "print('{')\n",
- "print('\"trainingOutput\": \"')"
+ "print('{')"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "This is the actual process of training the neural network. "
+ "This is the actual process of training the neural network."
]
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 72,
"metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ },
"scrolled": true
},
- "outputs": [],
- "source": [
- "if ACTION_TO_TAKE == \"BUILD_AND_SAVE_MODEL\":\n",
- " # fit network\n",
- " history = model.fit(\n",
- " train_X, \n",
- " train_y, \n",
- " epochs=NUMBER_OF_EPOCHS, \n",
- " batch_size=72, \n",
- " validation_data=(test_X, test_y), \n",
- " verbose=2, \n",
- " shuffle=False\n",
- " ) "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 27,
- "metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- "\"\n"
+ "Epoch 1/5\n",
+ "480/480 - 7s - loss: 0.0131 - val_loss: 0.1000\n",
+ "Epoch 2/5\n",
+ "480/480 - 2s - loss: 0.0104 - val_loss: 0.0796\n",
+ "Epoch 3/5\n",
+ "480/480 - 2s - loss: 0.0097 - val_loss: 0.0808\n",
+ "Epoch 4/5\n",
+ "480/480 - 2s - loss: 0.0108 - val_loss: 0.0803\n",
+ "Epoch 5/5\n",
+ "480/480 - 2s - loss: 0.0105 - val_loss: 0.0741\n"
]
}
],
"source": [
- "print('\"')"
+ "if ACTION_TO_TAKE == \"BUILD_AND_SAVE_MODEL\":\n",
+ " # fit network\n",
+ " history = model.fit(\n",
+ " train_X,\n",
+ " train_y,\n",
+ " epochs=NUMBER_OF_EPOCHS,\n",
+ " batch_size=72,\n",
+ " validation_data=(test_X, test_y),\n",
+ " verbose=0,\n",
+ " shuffle=False\n",
+ " )"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
+ "source": [],
+ "outputs": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "outputs": [],
"source": [
"## Save the Model"
- ]
+ ],
+ "metadata": {
+ "collapsed": false,
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ }
},
{
"cell_type": "code",
- "execution_count": 28,
- "metadata": {},
- "outputs": [],
+ "execution_count": 74,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "WARNING:absl:Found untraced functions such as lstm_cell_1_layer_call_and_return_conditional_losses, lstm_cell_1_layer_call_fn, lstm_cell_1_layer_call_fn, lstm_cell_1_layer_call_and_return_conditional_losses, lstm_cell_1_layer_call_and_return_conditional_losses while saving (showing 5 of 5). These functions will not be directly callable after loading.\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "INFO:tensorflow:Assets written to: D:\\Projeler\\Superalgos\\Bitcoin-Factory\\Forecast-Client\\notebooks\\models\\MODEL-30\\assets\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "INFO:tensorflow:Assets written to: D:\\Projeler\\Superalgos\\Bitcoin-Factory\\Forecast-Client\\notebooks\\models\\MODEL-30\\assets\n"
+ ]
+ }
+ ],
"source": [
"if ACTION_TO_TAKE == \"BUILD_AND_SAVE_MODEL\":\n",
" # dave the entire model\n",
@@ -1483,16 +1082,35 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Plot Fitting History"
]
},
{
"cell_type": "code",
- "execution_count": 29,
- "metadata": {},
- "outputs": [],
+ "execution_count": 75,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": "",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
+ },
+ "output_type": "display_data"
+ }
+ ],
"source": [
"if ACTION_TO_TAKE == \"BUILD_AND_SAVE_MODEL\":\n",
" # plot history\n",
@@ -1504,22 +1122,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Batch Prediction of all Test Records"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "Here we take all Test Records and get a prediction for each one of them. "
+ "Here we take all Test Records and get a prediction for each one of them."
]
},
{
"cell_type": "code",
- "execution_count": 30,
- "metadata": {},
+ "execution_count": 76,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# make a prediction\n",
@@ -1529,22 +1159,18 @@
},
{
"cell_type": "code",
- "execution_count": 31,
- "metadata": {},
+ "execution_count": 77,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[0.7463217 , 0.7425063 , 0.7618598 ],\n",
- " [0.74774474, 0.74432 , 0.76341444],\n",
- " [0.74881595, 0.7451773 , 0.76438785],\n",
- " ...,\n",
- " [0.7180586 , 0.711705 , 0.7296703 ],\n",
- " [0.71827245, 0.7122372 , 0.73024595],\n",
- " [0.7184125 , 0.7120944 , 0.73030937]], dtype=float32)"
- ]
+ "text/plain": "array([[0.46147934, 0.48969296, 0.47389597],\n [0.4615014 , 0.48980254, 0.4740106 ],\n [0.46170077, 0.4898885 , 0.47413343],\n ...,\n [0.32475248, 0.3554522 , 0.34371322],\n [0.32267568, 0.35362568, 0.3415323 ],\n [0.3208269 , 0.35218957, 0.34012085]], dtype=float32)"
},
- "execution_count": 31,
+ "execution_count": 77,
"metadata": {},
"output_type": "execute_result"
}
@@ -1555,7 +1181,11 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Reversing Normalization\n",
"\n",
@@ -1564,22 +1194,18 @@
},
{
"cell_type": "code",
- "execution_count": 32,
- "metadata": {},
+ "execution_count": 78,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[52244.547, 51550.797, 52974.01 ],\n",
- " [52338.54 , 51669.836, 53076.254],\n",
- " [52409.293, 51726.105, 53140.27 ],\n",
- " ...,\n",
- " [50377.77 , 49529.18 , 50857.098],\n",
- " [50391.895, 49564.105, 50894.953],\n",
- " [50401.15 , 49554.74 , 50899.125]], dtype=float32)"
- ]
+ "text/plain": "array([[33430.71 , 34957.6 , 34060.926],\n [33432.168, 34964.79 , 34068.457],\n [33445.336, 34970.43 , 34076.53 ],\n ...,\n [24399.9 , 26146.816, 25506.008],\n [24262.729, 26026.934, 25362.688],\n [24140.615, 25932.676, 25269.936]], dtype=float32)"
},
- "execution_count": 32,
+ "execution_count": 78,
"metadata": {},
"output_type": "execute_result"
}
@@ -1594,24 +1220,19 @@
},
{
"cell_type": "code",
- "execution_count": 33,
+ "execution_count": 79,
"metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ },
"scrolled": true
},
"outputs": [
{
"data": {
- "text/plain": [
- "array([[50567.91, 50191.26, 50335.67],\n",
- " [50395.49, 50043.28, 50257.97],\n",
- " [50434. , 49768.17, 50395.49],\n",
- " ...,\n",
- " [47200. , 46884.84, 46904.72],\n",
- " [47053.25, 46845.98, 46989.24],\n",
- " [47053.25, 46845.98, 46989.24]], dtype=float32)"
- ]
+ "text/plain": "array([[33904.76, 33720.01, 33851.44],\n [34047.86, 33816.98, 33847.51],\n [34444. , 33816.97, 34423.48],\n ...,\n [21879.53, 21388. , 21617.92],\n [21678.43, 21434.35, 21493.18],\n [21678.43, 21434.35, 21493.18]], dtype=float32)"
},
- "execution_count": 33,
+ "execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
@@ -1626,22 +1247,34 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Error Calculations"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"### Main Error Value"
]
},
{
"cell_type": "code",
- "execution_count": 34,
- "metadata": {},
+ "execution_count": 80,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [],
"source": [
"# calculate RMSE\n",
@@ -1650,36 +1283,40 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"This is the main value we use to know how much error there is. We need this value to go as down as possible."
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"### Alternative Error Analisys"
]
},
{
"cell_type": "code",
- "execution_count": 35,
- "metadata": {},
+ "execution_count": 81,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[3.31, 2.7 , 5.24],\n",
- " [3.85, 3.25, 5.6 ],\n",
- " [3.91, 3.93, 5.44],\n",
- " ...,\n",
- " [6.73, 5.64, 8.42],\n",
- " [7.09, 5.8 , 8.31],\n",
- " [7.11, 5.78, 8.32]])"
- ]
+ "text/plain": "array([[-1.39, 3.67, 0.61],\n [-1.8 , 3.39, 0.65],\n [-2.89, 3.41, -1. ],\n ...,\n [11.51, 22.24, 17.98],\n [11.92, 21.42, 18. ],\n [11.35, 20.98, 17.57]])"
},
- "execution_count": 35,
+ "execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
@@ -1693,24 +1330,32 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "### Plot of the % of Error of each Predicted Value "
+ "### Plot of the % of Error of each Predicted Value"
]
},
{
"cell_type": "code",
- "execution_count": 36,
- "metadata": {},
+ "execution_count": 82,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "image/png": "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ZdF8OmH32THiZunSpSwqKop99tln7O+//2ZTp05lycnJrLCwMNRFE1m1ahV75pln2Pfff88AsOXLl4vWL1iwgCUlJbEffviB/fXXX+z6669nnTp1YvX19Y5trr76atanTx+2bds29scff7AuXbqwO+64w7G+srKSpaWlsYkTJ7IDBw6wr776isXExLCPP/446O9vzJgx7PPPP2cHDhxg2dnZ7JprrmGZmZmspqbGsc20adNYRkYGW7duHdu1axcbMmQIGzp0qGO91WplPXv2ZKNGjWJ79+5lq1atYq1atWLz5s1zbHPy5EkWGxvL5s6dyw4ePMj+9a9/Ma1Wy1avXh209/bTTz+xn3/+mR09epQdOXKEPf3000yv17MDBw6E9fuSsmPHDtaxY0fWu3dvNmvWLMfycH6PL7zwAuvRowc7d+6c46+4uDgi3htjjJWVlbEOHTqwKVOmsO3bt7OTJ0+yNWvWsOPHjzu2CefzS1FRkeizW7t2LQPANmzYwBgL78/v1VdfZS1btmQrV65kp06dYt988w2Lj49n7733nmObcPvsKFCRcMkll7AZM2Y4nttsNta2bVs2f/78EJbKM9dAhed5lp6ezt58803HsoqKCmYwGNhXX33FGGPs4MGDDADbuXOnY5tffvmFcRzH8vLyGGOMffDBB6xFixbMZDI5tnnyySfZRRddFOR35K6oqIgBYJs2bWKM2d+PXq9n33zzjWObQ4cOMQBs69atjDF7MKfRaFhBQYFjmw8//JAlJiY63tMTTzzBevToITrWhAkT2JgxY4L9lkRatGjB/vOf/0TU+6qurmYXXnghW7t2LbvsssscgUq4v8cXXniB9enTR3JduL83xuy/8eHDh8uuj7Tzy6xZs1jnzp0Zz/Nh//mNGzeO3XvvvaJlN998M5s4cSJjLDw/O2r6cWE2m7F7926MGjXKsUyj0WDUqFHYunVrCEvmn1OnTqGgoED0PpKSkjB48GDH+9i6dSuSk5MxcOBAxzajRo2CRqPB9u3bHdtceumliIqKcmwzZswYHDlyBOXl5c30buwqKysBACkpKQCA3bt3w2KxiN5jt27dkJmZKXqPvXr1QlpammObMWPGoKqqCn///bdjG+E+Grdprs/bZrNh6dKlqK2tRVZWVsS8LwCYMWMGxo0b51aOSHiPx44dQ9u2bXHBBRdg4sSJyMnJ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",
- "text/plain": [
- ""
- ]
+ "text/plain": "",
+ "image/png": "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\n"
+ },
+ "metadata": {
+ "needs_background": "light"
},
- "metadata": {},
"output_type": "display_data"
}
],
@@ -1722,87 +1367,108 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"### Dollar Difference Between Prediction and Actual Value"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"In the context of the Test dataset, this is what we get if we substract the Actual Value to the Predicted Value."
]
},
{
"cell_type": "code",
- "execution_count": 37,
- "metadata": {},
+ "execution_count": 83,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"data": {
- "text/plain": [
- "array([[1676.6367, 1359.5352, 2638.3398],\n",
- " [1943.0508, 1626.5547, 2818.2852],\n",
- " [1975.293 , 1957.9336, 2744.7812],\n",
- " ...,\n",
- " [3177.7695, 2644.3398, 3952.379 ],\n",
- " [3338.6445, 2718.125 , 3905.7148],\n",
- " [3347.8984, 2708.7578, 3909.8867]], dtype=float32)"
- ]
+ "text/plain": "array([[-474.05078, 1237.5898 , 209.48438],\n [-615.6914 , 1147.8086 , 220.94531],\n [-998.66406, 1153.4609 , -346.94922],\n ...,\n [2520.371 , 4758.8164 , 3888.088 ],\n [2584.2988 , 4592.584 , 3869.5078 ],\n [2462.1855 , 4498.326 , 3776.7559 ]], dtype=float32)"
},
- "execution_count": 37,
+ "execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
- "diff = (inv_yhat - inv_y) \n",
+ "diff = (inv_yhat - inv_y)\n",
"diff = diff.astype('float32')\n",
"diff"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
"## Returning Predictions & Errors"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "Here we are returning the predictions to the caller program. Only the last row of predictions are needed because they belong to the latest closed candle. "
- ]
+ "Here we are returning the predictions to the caller program. Only the last row of predictions are needed because they belong to the latest closed candle.\n"
+ ],
+ "outputs": []
},
{
"cell_type": "code",
- "execution_count": 38,
- "metadata": {},
+ "execution_count": 85,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- ",\"predictions\": \" [50401.15 49554.74 50899.125] \"\n"
+ ",\"predictions\": \" [24140.615234375, 25932.67578125, 25269.935546875] \"\n"
]
}
],
"source": [
- "print(',\"predictions\": \"', inv_yhat[-1], '\"' )"
+ "print('\"predictions\": ', json.dumps(inv_yhat[-1], cls=NumpyArrayEncoder) )"
]
},
{
"cell_type": "code",
- "execution_count": 39,
- "metadata": {},
+ "execution_count": 86,
+ "metadata": {
+ "pycharm": {
+ "name": "#%%\n"
+ }
+ },
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
- ",\"errorRMSE\": 4114.664\n",
+ ",\"errorRMSE\": 6241.474\n",
"}\n"
]
}
@@ -1814,16 +1480,24 @@
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "##### "
+ "#####"
]
},
{
"cell_type": "markdown",
- "metadata": {},
+ "metadata": {
+ "pycharm": {
+ "name": "#%% md\n"
+ }
+ },
"source": [
- "###### "
+ "######\n"
]
}
],
@@ -1835,9 +1509,9 @@
"toc_visible": true
},
"kernelspec": {
- "display_name": "Python 3",
+ "name": "conda-env-tf-py",
"language": "python",
- "name": "python3"
+ "display_name": "Python [conda env:tf] *"
},
"language_info": {
"codemirror_mode": {
@@ -1849,9 +1523,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.8.10"
+ "version": "3.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 1
-}
+}
\ No newline at end of file
diff --git a/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.py b/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.py
index 7fdd7a9d74..eac48bb932 100644
--- a/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.py
+++ b/Bitcoin-Factory/Forecast-Client/notebooks/Bitcoin_Factory_LSTM_Forecasting.py
@@ -2,7 +2,7 @@
# coding: utf-8
# ##### Bitcoin Factory Machine Learning
-#
+#
# # Multivariate Time Series Forecasting with LSTMs in Keras
@@ -19,17 +19,17 @@
# ## Libraries Used
# In[1]:
-
-
-
+import json
+from json import JSONEncoder
from math import sqrt
+
+import numpy
from numpy import concatenate
from matplotlib import pyplot
from pandas import read_csv
from pandas import DataFrame
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
-from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import Dense
@@ -41,6 +41,11 @@
# In[2]:
+class NumpyArrayEncoder(JSONEncoder):
+ def default(self, obj):
+ if isinstance(obj, numpy.ndarray):
+ return obj.tolist()
+ return JSONEncoder.default(self, obj)
# convert series to supervised learning
def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
@@ -64,8 +69,8 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# drop rows with NaN values
if dropnan:
agg.dropna(inplace=True)
- return agg
-
+ return agg
+
# ## Load the Instructions Dataset
@@ -74,9 +79,9 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
instructions_dataset = read_csv(
- '/tf/notebooks/instructions.csv',
- header=0,
- sep=' ',
+ '/tf/notebooks/instructions.csv',
+ header=0,
+ sep=' ',
skipinitialspace=True
)
@@ -94,15 +99,15 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# ## Load the Parameters Dataset
-#
+#
# In[5]:
parameters_dataset = read_csv(
- '/tf/notebooks/parameters.csv',
- header=0,
- sep=' ',
+ '/tf/notebooks/parameters.csv',
+ header=0,
+ sep=' ',
skipinitialspace=True
)
@@ -137,7 +142,7 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
NUMBER_OF_LSTM_NEURONS = int(parameters_dataset.values[9][1])
else:
-
+
NUMBER_OF_INDICATORS_PROPERTIES = int(parameters_dataset['NUMBER_OF_INDICATORS_PROPERTIES'][0])
# number of timesteps in the secuence that we are going to use to feed the model.
NUMBER_OF_LAG_TIMESTEPS = int(parameters_dataset['NUMBER_OF_LAG_TIMESTEPS'][0])
@@ -164,10 +169,10 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
timeseries_dataset = read_csv(
- '/tf/notebooks/time-series.csv',
- header=0,
+ '/tf/notebooks/time-series.csv',
+ header=0,
index_col=0, #The first colum is a timestamp that will be used to index all the data.
- sep=' ',
+ sep=' ',
skipinitialspace=True
)
@@ -227,7 +232,7 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# ## Normalization
-# Normalizing or removing the scale, is a standar prodcedure of any machine learning workflow.
+# Normalizing or removing the scale, is a standar prodcedure of any machine learning workflow.
# In[13]:
@@ -290,7 +295,7 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# ## Split into Input and Outputs
-# Here we will split both the Train and the Test datasets into features and labels.
+# Here we will split both the Train and the Test datasets into features and labels.
# Features will be all the information where time < 0. For the labels, we will pick only the first 2 fields of each set of indicator properties, which we expect them to contain the Candle Max and Candle Min for each Asset.
# In[20]:
@@ -355,11 +360,10 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# In[25]:
-print('{')
-print('"trainingOutput": "')
-# This is the actual process of training the neural network.
+
+# This is the actual process of training the neural network.
# In[26]:
@@ -367,20 +371,14 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
if ACTION_TO_TAKE == "BUILD_AND_SAVE_MODEL":
# fit network
history = model.fit(
- train_X,
- train_y,
- epochs=NUMBER_OF_EPOCHS,
- batch_size=72,
- validation_data=(test_X, test_y),
- verbose=2,
+ train_X,
+ train_y,
+ epochs=NUMBER_OF_EPOCHS,
+ batch_size=72,
+ validation_data=(test_X, test_y),
+ verbose=0,
shuffle=False
- )
-
-
-# In[27]:
-
-
-print('"')
+ )
# ## Save the Model
@@ -408,7 +406,7 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# ## Batch Prediction of all Test Records
-# Here we take all Test Records and get a prediction for each one of them.
+# Here we take all Test Records and get a prediction for each one of them.
# In[30]:
@@ -425,7 +423,7 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# ## Reversing Normalization
-#
+#
# For inverting the scale (denormalize) of a test record, we need first to unframe the test_X values so as the get the original record. Since the label was the first colum of the record, we concatenate the prediction to the last columns of the framed record.
# In[32]:
@@ -472,7 +470,7 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
errors
-# ### Plot of the % of Error of each Predicted Value
+# ### Plot of the % of Error of each Predicted Value
# In[36]:
@@ -489,19 +487,17 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
# In[37]:
-diff = (inv_yhat - inv_y)
+diff = (inv_yhat - inv_y)
diff = diff.astype('float32')
diff
# ## Returning Predictions & Errors
-# Here we are returning the predictions to the caller program. Only the last row of predictions are needed because they belong to the latest closed candle.
+# Here we are returning the predictions to the caller program. Only the last row of predictions are needed because they belong to the latest closed candle.
# In[38]:
-
-
-print(',"predictions": "', inv_yhat[-1], '"' )
+print('{"predictions": ', json.dumps(inv_yhat[-1], cls=NumpyArrayEncoder))
# In[39]:
@@ -511,6 +507,6 @@ def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
print('}')
-# #####
+# #####
-# ######
+# ######
diff --git a/Bitcoin-Factory/Test-Client/README.md b/Bitcoin-Factory/Test-Client/README.md
index 64d293deb1..3ad60a2e3c 100644
--- a/Bitcoin-Factory/Test-Client/README.md
+++ b/Bitcoin-Factory/Test-Client/README.md
@@ -5,7 +5,7 @@ The ML Test Client runs from within the Superalgos Platform and connects to a re
It is important to understand that this Test Client APP does not prepare the dataset to be tested. This is done by the Test Server App. That means that this app does not need Superalgos or any other data provider for the purpose of extracting data from it. It only depends on the Test Server which handles the management of the Test Cases and the generation of the datasets to be used at each one of the tests.
### Example of Parameters [Fraction of the actual list]
-
+```text
┌─────────────────────────────────────────────────────────────────────────┬─────────┬────────┐
│ (index) │ 0 │ Values │
├─────────────────────────────────────────────────────────────────────────┼─────────┼────────┤
@@ -56,7 +56,7 @@ It is important to understand that this Test Client APP does not prepare the dat
* 1503705600000 4367 4212.41 4280.68 4337.44 228.10806799999992
* 1503792000000 4400 4285.54 4332.51 4310.01 350.6925850000002
* 1503878400000 4399.82 4124.54 4310.01 4386.69 603.8416160000002
-
+```
### How does this Test Client App work?
This app is used to autonomously test different set's of parameters to see which Machine Learning models can produce better forecasts.
@@ -136,7 +136,7 @@ Here is the complete list of nodes you need to add to your profile and how to co
Once you have added the Task Server App node, hover over it and rename it using the following name: "Task Server App #1"
Then add the following configuration within the Task Server App node's config:
-```sh
+```json
{
"codeName": "Task-Server-App-1"
}
@@ -156,7 +156,7 @@ For this node, you need to assign a unique name of your choice. The name you cho
Node Title: "Assign-A-Name"
Node Config:
-```sh
+```json
{
"codeName": "Assign-A-Name"
}
@@ -188,7 +188,7 @@ By setting up this reference you define the identity under which the test client
After that, open the config of the Test-Client Sensor Bot Instance. It looks like this:
-```sh
+```json
{
"networkCodeName": "Testnet",
"targetSuperalgosHost": "localhost",
@@ -214,7 +214,7 @@ Build the Docker Image. Open a console at the Bitcoin-Factory folder inside Supe
### On x86 Processors
-```sh
+```shell
cd DockerBuild
docker build -t bitcoin-factory-machine-learning .
cd ..
@@ -222,7 +222,7 @@ cd ..
### On xArm Processors
-```sh
+```shell
cd ArmDockerBuild
docker build -t bitcoin-factory-machine-learning .
cd ..
@@ -245,7 +245,7 @@ Now you are ready to get things rolling! You will need to open two terminals. On
### Docker Container Terminal Output
Once the docker container is running correctly you will see at the first terminal an output similar to this:
-```sh
+```text
[I 12:58:36.546 NotebookApp] Writing notebook server cookie secret to /home/ubuntu/.local/share/jupyter/runtime/notebook_cookie_secret
[I 12:58:37.532 NotebookApp] Serving notebooks from local directory: /tf/notebooks
[I 12:58:37.532 NotebookApp] Jupyter Notebook 6.4.10 is running at:
@@ -259,7 +259,6 @@ Once the docker container is running correctly you will see at the first termina
Or copy and paste one of these URLs:
http://aa1b305587bd:8888/?token=49c135d693e0b4d07d8c0164410ee6fc4593ac5e0578a34a
or http://127.0.0.1:8888/?token=49c135d693e0b4d07d8c0164410ee6fc4593ac5e0578a34a
-
```
**Note:** At that terminal there is no further action required.
@@ -267,7 +266,7 @@ Once the docker container is running correctly you will see at the first termina
### Superalgos Platform Terminal Output
At the Superalgos terminal, once you run the Test Client Task, you will see, after 10 seconds an output similar to this one:
-```sh
+```text
-------------------------------------------------------- Test Case # 1 / 3192 --------------------------------------------------------
Starting at this GMT Datetime: 2022-03-24T10:00:55.115Z
@@ -294,7 +293,7 @@ Parameters Received for this Test:
After between 15 and 30 minutes, depending on the Test Case that was assigned to you, you will see an output like this:
-```sh
+```text
Docker Python Script exited with code 0
Prediction RMSE Error: 368.83
Predictions [candle.max, candle.min, candle.close]: 43278.008,42785.055,43028.305
@@ -330,11 +329,11 @@ For specific information on how to run the Docker Container in different OS, ple
**Very important**, if you choose to run docker under a sudo user on Linux distros, make sure you run Superalgos also under sudo, otherwise it might not work.
To run docker without sudo on Ubuntu, add the current user to the docker group with:
-```sh
+```shell
sudo gpasswd -a $USER docker
```
Then either log out and back in, or run the following command to refresh permissions:
-```
+```shell
sh
newgrp docker
```
@@ -343,7 +342,7 @@ newgrp docker
Run the container with this command. Change the path if you did not install this App at the commands location.
-```sh
+```shell
docker run --gpus all -it --rm --shm-size=4.37gb --name Bitcoin-Factory-ML -v C:/Superalgos/Bitcoin-Factory/Test-Client/notebooks:/tf/notebooks -p 8888:8888 bitcoin-factory-machine-learning
```
@@ -351,7 +350,7 @@ docker run --gpus all -it --rm --shm-size=4.37gb --name Bitcoin-Factory-ML -v C:
Run the Docker container with this command. Change the path if you did not install this App at the commands location.
-```sh
+```shell
docker run --gpus all -it --rm --shm-size=4.37gb --name Bitcoin-Factory-ML -v /Users/Your-User-Name/Superalgos/Bitcoin-Factory/Test-Client/notebooks:/tf/notebooks -p 8888:8888 bitcoin-factory-machine-learning
```
@@ -374,7 +373,7 @@ Apply & Restart makes the directory available to containers using Docker’s bin
The command to run the container on Mac should be like this (mind Your-User-Name).
-```sh
+```shell
docker run --gpus all -it --rm --name Bitcoin-Factory-ML --shm-size=4.37gb -v /Users/Your-User-Name/Superalgos/Bitcoin-Factory/Test-Client/notebooks:/tf/notebooks -p 8888:8888 bitcoin-factory-machine-learning
```
You will need to remove ```--gpus all``` for M1 based macs unless the docker image is specifically built to use the metal API.
@@ -384,10 +383,10 @@ You will need to remove ```--gpus all``` for M1 based macs unless the docker ima
Confirmed working on Raspberry Pi OS (64 bit)
- Node.js install
- ```
+ ```shell
curl -fsSL https://deb.nodesource.com/setup_17.x | sudo -E bash -
```
- ```
+ ```shell
sudo apt-get install -y nodejs
```
- Docker install following either [Repository](https://docs.docker.com/engine/install/debian/#install-using-the-repository) or [Convenience Script](https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script) install steps on [docs.docker.com](https://docs.docker.com/engine/install/debian/#installation-methods)
@@ -399,32 +398,32 @@ Confirmed working on Raspberry Pi OS (64 bit)
### Response from daemon conflict
If you get the error:
-```sh
+```text
docker: Error response from daemon: Conflict. The container name "/Bitcoin-Factory-ML" is already in use by container ...
```
Use the command
-```sh
+```shell
docker container prune
```
to fix it.
### Network Client Identity
-```sh
+```text
"Fatal Error. Can not run this task. The Network Client Identity does not match any node at User Profiles Plugins."
```
This error occurs when the signing account does not match the Governance plugin repository's account. To ensure they are the same, import your user profile on the workspace using the "Add specified User Profile" command under Plugins -> Plugin Project -> Plugin User Profiles.
Add the correct nodes, references and signing account to the plugin as detailed in [App Setup](#app-setup). Save the plugin and push the changes to the Governance repository and wait 10 minutes for it to merge and be picked up by the Forecast Server.
### Unexpected Error
-```sh
+```text
unexpected error trying to execute a python script inside the docker container"
```
This error relates to an incorrect path when launching the docker container. Ensure the path to the notebooks directory is correct in the docker run command.
After launching the docker container, the path can be verified by using the following command to run a test model:
-```sh
+```shell
docker exec -it Bitcoin-Factory-ML python /tf/notebooks/Bitcoin_Factory_LSTM.py
```
diff --git a/Projects/Bitcoin-Factory/TS/Bot-Modules/Forecast-Client/ForecastClient.js b/Projects/Bitcoin-Factory/TS/Bot-Modules/Forecast-Client/ForecastClient.js
index 110cba8308..8e14e74b42 100644
--- a/Projects/Bitcoin-Factory/TS/Bot-Modules/Forecast-Client/ForecastClient.js
+++ b/Projects/Bitcoin-Factory/TS/Bot-Modules/Forecast-Client/ForecastClient.js
@@ -372,9 +372,10 @@
function onFinished(dataReceived) {
try {
- processExecutionResult = JSON.parse(dataReceived)
- processExecutionResult.predictions = fixJSON(processExecutionResult.predictions)
- processExecutionResult.predictions = JSON.parse(processExecutionResult.predictions)
+ let index = dataReceived.indexOf('{')
+ dataReceived = dataReceived.substring(index)
+ console.log(dataReceived)
+ processExecutionResult = JSON.parse(fixJSON(dataReceived))
console.log('Prediction RMSE Error: ' + processExecutionResult.errorRMSE)
console.log('Predictions [candle.max, candle.min, candle.close]: ' + processExecutionResult.predictions)
@@ -523,6 +524,7 @@
*/
for (let i = 0; i < 10; i++) {
text = text.replace(" [", "[")
+ text = text.replace("[ ", "[")
text = text.replace(" ]", "]")
text = text.replace(" ]", "]")
text = text.replace(" ]", "]")
@@ -531,12 +533,6 @@
text = text.replace(" ]", "]")
text = text.replace("] ", "]")
}
- for (let i = 0; i < 100; i++) {
- text = text.replace(" ", ",")
- }
- for (let i = 0; i < 100; i++) {
- text = text.replace(" ", ",")
- }
for (let i = 0; i < 10; i++) {
text = text.replace(",,", ",")
text = text.replace(",]", "]")