diff --git a/pytorch/notebooks/Mean Reversion Studies.ipynb b/pytorch/notebooks/Mean Reversion Studies.ipynb new file mode 100644 index 0000000..997f907 --- /dev/null +++ b/pytorch/notebooks/Mean Reversion Studies.ipynb @@ -0,0 +1,263 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "c7dac550-c0ed-4ec7-846e-8edb2086c9cc", + "metadata": {}, + "source": [ + "# Augmented Dickey-Fuller Test (ADF)\n", + "Stationarity Test" + ] + }, + { + "cell_type": "markdown", + "id": "778b9362-37e3-40e0-a20a-1ca5e2cddf05", + "metadata": {}, + "source": [ + "## Preparing The data" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "998ecc54-aaba-4761-bb98-1eda5c9fa091", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\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", + " \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", + " \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", + "
idtstamptarget
0PAIR-BTC-USDT172247040000000000064640.679892
1PAIR-BTC-USDT172247046000000000064652.991289
2PAIR-BTC-USDT172247052000000000064660.005093
3PAIR-BTC-USDT172247058000000000064653.482847
4PAIR-BTC-USDT172247064000000000064687.458279
............
1372PAIR-BTC-USDT172255650000000000065439.307663
1373PAIR-BTC-USDT172255656000000000065445.733114
1374PAIR-BTC-USDT172255662000000000065446.371741
1375PAIR-BTC-USDT172255668000000000065420.879478
1376PAIR-BTC-USDT172255674000000000065377.032222
\n", + "

1377 rows × 3 columns

\n", + "
" + ], + "text/plain": [ + " id tstamp target\n", + "0 PAIR-BTC-USDT 1722470400000000000 64640.679892\n", + "1 PAIR-BTC-USDT 1722470460000000000 64652.991289\n", + "2 PAIR-BTC-USDT 1722470520000000000 64660.005093\n", + "3 PAIR-BTC-USDT 1722470580000000000 64653.482847\n", + "4 PAIR-BTC-USDT 1722470640000000000 64687.458279\n", + "... ... ... ...\n", + "1372 PAIR-BTC-USDT 1722556500000000000 65439.307663\n", + "1373 PAIR-BTC-USDT 1722556560000000000 65445.733114\n", + "1374 PAIR-BTC-USDT 1722556620000000000 65446.371741\n", + "1375 PAIR-BTC-USDT 1722556680000000000 65420.879478\n", + "1376 PAIR-BTC-USDT 1722556740000000000 65377.032222\n", + "\n", + "[1377 rows x 3 columns]" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "from statsmodels.tsa.stattools import adfuller\n", + "import numpy as np\n", + "\n", + "def demo_example_data() -> pd.Series:\n", + " # Generate example time series data\n", + " # np.random.seed(0)\n", + " time_series_data = np.random.randn(100) # Random data for demonstration\n", + " \n", + " # Create a pandas Series\n", + " data = pd.Series(time_series_data)\n", + " \n", + " # Optionally, you can add a datetime index if you have time-indexed data\n", + " dates = pd.date_range(start='2020-01-01', periods=len(time_series_data), freq='D')\n", + " data = pd.Series(time_series_data, index=dates)\n", + "\n", + " # Display the first few rows of the data\n", + " print(data.head())\n", + " return data\n", + "\n", + "def load_df_from_db(file: str, query: str) -> pd.DataFrame:\n", + " import sqlite3 \n", + " \n", + " conn = sqlite3.connect(file)\n", + " df = pd.read_sql_query(query, conn)\n", + " df['timestamp'] = pd.to_datetime(df['tstamp'])\n", + " df.set_index('timestamp', inplace=True)\n", + " return df\n", + "\n", + "file_path = \"/workspace/data/crypto_md/20240801.mktdata.ohlcv.db\"\n", + "instrument_id='PAIR-BTC-USDT'\n", + "query = f\"\"\"\n", + "select \n", + " instrument_id as id, \n", + " tstamp, \n", + " vwap \n", + "from bnbspot_ohlcv_1min \n", + "where instrument_id = '{instrument_id}'\n", + "\"\"\"\n", + "\n", + "df = load_df_from_db(file=file_path, query=query)\n", + "df.rename(columns={'vwap': 'target'}, inplace=True)\n", + "# df[\"tstamp2\"] = df.index\n", + "df = df.reset_index()\n", + "df = df.drop([\"timestamp\"], axis=1) \n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "43e43154-5a04-4a1d-977c-7f930d62f241", + "metadata": {}, + "source": [ + "## Running Test" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "b97d357f-787b-4cff-849f-b91b1ec35e7c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2020-01-01 -1.652908\n", + "2020-01-02 -0.157302\n", + "2020-01-03 -1.396187\n", + "2020-01-04 0.150374\n", + "2020-01-05 1.048603\n", + "Freq: D, dtype: float64\n", + "ADF Statistic: -9.985535987881171\n", + "p-value: 2.060269774403535e-17\n", + "Critical Values: {'1%': -3.498198082189098, '5%': -2.891208211860468, '10%': -2.5825959973472097}\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from statsmodels.tsa.stattools import adfuller\n", + "\n", + "# Example time series data\n", + "data = demo_example_data()\n", + "\n", + "# Perform the ADF test\n", + "result = adfuller(data)\n", + "\n", + "# Extract and print the results\n", + "print('ADF Statistic:', result[0])\n", + "print('p-value:', result[1])\n", + "print('Critical Values:', result[4])\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pytorch/notebooks/Testing GPU.ipynb b/pytorch/notebooks/Testing GPU.ipynb index 1042710..24b0ce0 100644 --- a/pytorch/notebooks/Testing GPU.ipynb +++ b/pytorch/notebooks/Testing GPU.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "6b269e64-be58-43b5-ad60-0fbd1d37861a", "metadata": {}, "outputs": [ @@ -46,56 +46,26 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "id": "7313a620-a0eb-4207-a12a-90aeee3cd980", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "('3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]',\n", - " environ{'USER': 'oleg',\n", - " 'SSH_CLIENT': '100.102.18.30 39290 22',\n", - " 'XDG_SESSION_TYPE': 'tty',\n", - " 'SHLVL': '1',\n", - " 'MOTD_SHOWN': 'pam',\n", - " 'HOME': '/home/oleg',\n", - " 'OLDPWD': '/home/oleg/.vscode-server',\n", - " 'SSL_CERT_FILE': '/usr/lib/ssl/certs/ca-certificates.crt',\n", - " 'DBUS_SESSION_BUS_ADDRESS': 'unix:path=/run/user/1000/bus',\n", - " 'LOGNAME': 'oleg',\n", - " '_': '/home/oleg/.pyenv/python3.10-venv/bin/python',\n", - " 'XDG_SESSION_CLASS': 'user',\n", - " 'VSCODE_CLI_REQUIRE_TOKEN': 'a18f8694-adf8-4fa9-a860-a18b2bdb3d92',\n", - " 'XDG_SESSION_ID': '149',\n", - " 'PATH': '/home/oleg/.pyenv/python3.10-venv/bin:/home/oleg/.vscode-server/cli/servers/Stable-dc96b837cf6bb4af9cd736aa3af08cf8279f7685/server/bin/remote-cli:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin',\n", - " 'VSCODE_AGENT_FOLDER': '/home/oleg/.vscode-server',\n", - " 'XDG_RUNTIME_DIR': '/run/user/1000',\n", - " 'SSL_CERT_DIR': '/usr/lib/ssl/certs',\n", - " 'LANG': 'en_US.UTF-8',\n", - " 'SHELL': '/bin/bash',\n", - " 'PWD': '/home/oleg',\n", - " 'SSH_CONNECTION': '100.102.18.30 39290 100.102.233.115 22',\n", - " 'XDG_DATA_DIRS': '/home/oleg/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share',\n", - " 'VSCODE_HANDLES_SIGPIPE': 'true',\n", - " 'LS_COLORS': '',\n", - " 'LESSCLOSE': '/usr/bin/lesspipe %s %s',\n", - " 'LESSOPEN': '| /usr/bin/lesspipe %s',\n", - " 'LD_LIBRARY_PATH': '/usr/local/cuda/lib64',\n", - " 'VSCODE_AMD_ENTRYPOINT': 'vs/workbench/api/node/extensionHostProcess',\n", - " 'VSCODE_HANDLES_UNCAUGHT_ERRORS': 'true',\n", - " 'VSCODE_NLS_CONFIG': '{\"locale\":\"en\",\"osLocale\":\"en\",\"availableLanguages\":{}}',\n", - " 'BROWSER': '/home/oleg/.vscode-server/cli/servers/Stable-dc96b837cf6bb4af9cd736aa3af08cf8279f7685/server/bin/helpers/browser.sh',\n", - " 'VSCODE_CWD': '/home/oleg',\n", - " 'ELECTRON_RUN_AS_NODE': '1',\n", - " 'VSCODE_IPC_HOOK_CLI': '/run/user/1000/vscode-ipc-c5d6268a-2e45-4659-9523-6fcffb529a08.sock',\n", - " 'PYTHONUNBUFFERED': '1',\n", - " 'VIRTUAL_ENV': '/home/oleg/.pyenv/python3.10-venv',\n", - " 'PYTHONIOENCODING': 'utf-8',\n", - " 'VIRTUAL_ENV_PROMPT': '(python3.10-venv) ',\n", - " 'PS1': '(python3.10-venv) ',\n", - " 'PYDEVD_IPYTHON_COMPATIBLE_DEBUGGING': '1',\n", - " 'PYTHON_FROZEN_MODULES': 'on',\n", + "('3.10.13 (main, Sep 11 2023, 13:44:35) [GCC 11.2.0]',\n", + " environ{'PATH': '/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',\n", + " 'HOSTNAME': '30c1a1a6daca',\n", + " 'JUPYTER_ENABLE_LAB': 'yes',\n", + " 'PYTHONPATH': '/cvtt/prod',\n", + " 'NVIDIA_VISIBLE_DEVICES': 'all',\n", + " 'NVIDIA_DRIVER_CAPABILITIES': 'compute,utility',\n", + " 'LD_LIBRARY_PATH': '/usr/local/nvidia/lib:/usr/local/nvidia/lib64',\n", + " 'PYTORCH_VERSION': '2.2.1',\n", + " 'HOME': '/root',\n", + " 'LC_CTYPE': 'C.UTF-8',\n", + " 'JPY_SESSION_NAME': '/workspace/Testing GPU.ipynb',\n", + " 'JPY_PARENT_PID': '1',\n", " 'PYDEVD_USE_FRAME_EVAL': 'NO',\n", " 'TERM': 'xterm-color',\n", " 'CLICOLOR': '1',\n", @@ -107,7 +77,7 @@ " 'CUDA_MODULE_LOADING': 'LAZY'})" ] }, - "execution_count": 10, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -116,7 +86,7 @@ "import sys\n", "import os\n", "\n", - "sys.path.append(\"/home/oleg/develop/cvtt2\")\n", + "sys.path.append(\"/\")\n", "sys.version,os.environ\n", "\n" ] @@ -131,7 +101,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "95d9a2e6-3464-4dbe-9a97-0c2d5eb34193", "metadata": {}, "outputs": [], @@ -160,14 +130,14 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "id": "eb38de31-fc19-4515-b08d-9cd7607ea958", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4be0c8cc9c004ef6b32f044018434a85", + "model_id": "54e9ddbe3f4349ca9ebbee5aaec14477", "version_major": 2, "version_minor": 0 }, @@ -188,10 +158,10 @@ { "data": { "text/plain": [ - "1718155463838047267" + "1723585308075979805" ] }, - "execution_count": 12, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -211,7 +181,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 5, "id": "f46e46a7-9b57-44aa-9bc9-dcbcf643bc88", "metadata": {}, "outputs": [ @@ -219,8 +189,15 @@ "name": "stdout", "output_type": "stream", "text": [ + "jupyter-events==0.10.0\n", + "jupyter-lsp==2.2.5\n", "jupyter_client==8.6.2\n", "jupyter_core==5.7.2\n", + "jupyter_server==2.14.2\n", + "jupyter_server_terminals==0.5.3\n", + "jupyterlab==4.2.4\n", + "jupyterlab_pygments==0.3.0\n", + "jupyterlab_server==2.27.3\n", "jupyterlab_widgets==3.0.11\n" ] } diff --git a/tensorflow/notebooks/leo/LSTM_All_Crypto_02.ipynb b/tensorflow/notebooks/leo/LSTM_All_Crypto_02.ipynb index 7fe9348..4b3c688 100644 --- a/tensorflow/notebooks/leo/LSTM_All_Crypto_02.ipynb +++ b/tensorflow/notebooks/leo/LSTM_All_Crypto_02.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "id": "1023f2c1-e45f-4e1c-9a1b-66f59f128196", "metadata": {}, "outputs": [ @@ -10,8 +10,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "Panda Version: 2.2.2\n", - "Today date is: 2024-06-17\n" + "Panda Version: 2.2.2\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-08-13 13:49:15.756217: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-08-13 13:49:15.773323: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-08-13 13:49:15.778526: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Today date is: 2024-08-13\n" ] } ], @@ -73,7 +88,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "id": "c09a37a6-f0d9-48e3-a1d1-65ddaf2c489c", "metadata": {}, "outputs": [ @@ -82,26 +97,23 @@ "output_type": "stream", "text": [ "/workspace/leo\n", - "total 22016\n", - "drwxrwxr-x 1 1000 1000 848 Jun 17 10:00 .\n", + "total 15712\n", + "drwxrwxrwx 1 1000 1000 628 Aug 13 13:00 .\n", "drwxrwxr-x 1 1000 1000 18 Jun 3 23:40 ..\n", - "-rw------- 1 1000 1000 1449984 Jun 4 00:49 20240601.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 3 23:44 20240602.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jun 4 16:45 20240603.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1269760 Jun 5 10:00 20240604.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1081344 Jun 6 10:00 20240605.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1441792 Jun 7 10:00 20240606.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 8 10:00 20240607.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 9 10:00 20240608.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jun 10 10:00 20240609.mktdata.ohlcv.db\n", - "-rw-r--r-- 1 1000 1000 0 Jun 12 15:29 20240609.mktdata.ohlcvdb\n", - "-rw------- 1 1000 1000 1437696 Jun 11 10:00 20240610.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 12 10:01 20240611.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 13 10:01 20240612.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 14 10:01 20240613.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1404928 Jun 15 10:01 20240614.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 16 10:00 20240615.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 17 10:00 20240616.mktdata.ohlcv.db\n" + "drwxrwxr-x 1 1000 1000 1500 Aug 10 21:00 2024-06\n", + "drwxrwxr-x 1 1000 1000 1550 Aug 10 21:00 2024-07\n", + "-rw------- 1 1000 1000 1425408 Aug 2 13:01 20240801.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1396736 Aug 3 13:01 20240802.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1384448 Aug 4 13:01 20240803.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1318912 Aug 6 02:54 20240804.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 2269184 Aug 10 17:04 20240805.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1146880 Aug 10 20:59 20240806.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1363968 Aug 8 13:01 20240807.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1187840 Aug 10 17:09 20240808.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1028096 Aug 10 17:10 20240809.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1187840 Aug 11 13:00 20240810.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1187840 Aug 12 13:00 20240811.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1191936 Aug 13 13:00 20240812.mktdata.ohlcv.db\n" ] } ], @@ -133,15 +145,26 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "id": "5d2aed0b-8c9d-4f5a-9166-785da4811390", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "89716\n" + "ename": "DatabaseError", + "evalue": "Execution failed on sql 'select * from coinbase_ohlcv_1min': no such table: coinbase_ohlcv_1min", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mOperationalError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/io/sql.py:2674\u001b[0m, in \u001b[0;36mSQLiteDatabase.execute\u001b[0;34m(self, sql, params)\u001b[0m\n\u001b[1;32m 2673\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 2674\u001b[0m \u001b[43mcur\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43msql\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2675\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m cur\n", + "\u001b[0;31mOperationalError\u001b[0m: no such table: coinbase_ohlcv_1min", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mDatabaseError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[4], line 32\u001b[0m\n\u001b[1;32m 29\u001b[0m conn \u001b[38;5;241m=\u001b[39m sqlite3\u001b[38;5;241m.\u001b[39mconnect(filename)\n\u001b[1;32m 31\u001b[0m \u001b[38;5;66;03m# Read the data into a DataFrame\u001b[39;00m\n\u001b[0;32m---> 32\u001b[0m df \u001b[38;5;241m=\u001b[39m \u001b[43mpd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_sql_query\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mselect * from coinbase_ohlcv_1min\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 34\u001b[0m df_concat \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mconcat([df_concat, df], axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m,ignore_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 35\u001b[0m \u001b[38;5;66;03m# Print the combined DataFrame\u001b[39;00m\n\u001b[1;32m 36\u001b[0m \u001b[38;5;66;03m# print(df_concat.shape[0])\u001b[39;00m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;66;03m# print(df_concat.shape[1])\u001b[39;00m\n", + "File \u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/io/sql.py:526\u001b[0m, in \u001b[0;36mread_sql_query\u001b[0;34m(sql, con, index_col, coerce_float, params, parse_dates, chunksize, dtype, dtype_backend)\u001b[0m\n\u001b[1;32m 523\u001b[0m \u001b[38;5;28;01massert\u001b[39;00m dtype_backend \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m lib\u001b[38;5;241m.\u001b[39mno_default\n\u001b[1;32m 525\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m pandasSQL_builder(con) \u001b[38;5;28;01mas\u001b[39;00m pandas_sql:\n\u001b[0;32m--> 526\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mpandas_sql\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mread_query\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 527\u001b[0m \u001b[43m \u001b[49m\u001b[43msql\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 528\u001b[0m \u001b[43m \u001b[49m\u001b[43mindex_col\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mindex_col\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 529\u001b[0m \u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 530\u001b[0m \u001b[43m \u001b[49m\u001b[43mcoerce_float\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcoerce_float\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 531\u001b[0m \u001b[43m \u001b[49m\u001b[43mparse_dates\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparse_dates\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 532\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunksize\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunksize\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 533\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 534\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype_backend\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdtype_backend\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 535\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/io/sql.py:2738\u001b[0m, in \u001b[0;36mSQLiteDatabase.read_query\u001b[0;34m(self, sql, index_col, coerce_float, parse_dates, params, chunksize, dtype, dtype_backend)\u001b[0m\n\u001b[1;32m 2727\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mread_query\u001b[39m(\n\u001b[1;32m 2728\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2729\u001b[0m sql,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2736\u001b[0m dtype_backend: DtypeBackend \u001b[38;5;241m|\u001b[39m Literal[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnumpy\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mnumpy\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 2737\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m DataFrame \u001b[38;5;241m|\u001b[39m Iterator[DataFrame]:\n\u001b[0;32m-> 2738\u001b[0m cursor \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexecute\u001b[49m\u001b[43m(\u001b[49m\u001b[43msql\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2739\u001b[0m columns \u001b[38;5;241m=\u001b[39m [col_desc[\u001b[38;5;241m0\u001b[39m] \u001b[38;5;28;01mfor\u001b[39;00m col_desc \u001b[38;5;129;01min\u001b[39;00m cursor\u001b[38;5;241m.\u001b[39mdescription]\n\u001b[1;32m 2741\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m chunksize \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", + "File \u001b[0;32m/usr/local/lib/python3.11/dist-packages/pandas/io/sql.py:2686\u001b[0m, in \u001b[0;36mSQLiteDatabase.execute\u001b[0;34m(self, sql, params)\u001b[0m\n\u001b[1;32m 2683\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ex \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01minner_exc\u001b[39;00m\n\u001b[1;32m 2685\u001b[0m ex \u001b[38;5;241m=\u001b[39m DatabaseError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mExecution failed on sql \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m{\u001b[39;00msql\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mexc\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 2686\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m ex \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mexc\u001b[39;00m\n", + "\u001b[0;31mDatabaseError\u001b[0m: Execution failed on sql 'select * from coinbase_ohlcv_1min': no such table: coinbase_ohlcv_1min" ] } ], diff --git a/tensorflow/notebooks/leo/TimeSeries_Crypt.ipynb b/tensorflow/notebooks/leo/TimeSeries_Crypt.ipynb index c477a7c..b63a995 100644 --- a/tensorflow/notebooks/leo/TimeSeries_Crypt.ipynb +++ b/tensorflow/notebooks/leo/TimeSeries_Crypt.ipynb @@ -2,10 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "id": "1023f2c1-e45f-4e1c-9a1b-66f59f128196", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Panda Version: 2.2.2\n", + "Today date is: 2024-08-13\n" + ] + } + ], "source": [ "import sqlite3\n", "\n", @@ -62,8 +71,10 @@ "\n", "import statsmodels.api as sm\n", "import statsmodels.tsa.stattools as ts\n", + "from statsmodels.tsa.stattools import acf, pacf\n", "from statsmodels.graphics.tsaplots import plot_acf, plot_pacf\n", "from statsmodels.tsa.seasonal import seasonal_decompose\n", + "from statsmodels.tsa.arima_model import ARMA\n", "\n", "from scipy import signal\n", "\n", @@ -141,7 +152,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 37, "id": "c09a37a6-f0d9-48e3-a1d1-65ddaf2c489c", "metadata": {}, "outputs": [ @@ -150,91 +161,32 @@ "output_type": "stream", "text": [ "/workspace/leo\n", - "total 82604\n", - "drwxrwxr-x 1 1000 1000 3250 Aug 5 13:00 .\n", + "total 15712\n", + "drwxrwxrwx 1 1000 1000 678 Aug 13 13:49 .\n", "drwxrwxr-x 1 1000 1000 18 Jun 3 23:40 ..\n", - "-rw------- 1 1000 1000 1449984 Jun 4 00:49 20240601.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 3 23:44 20240602.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jun 4 16:45 20240603.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1269760 Jun 5 10:00 20240604.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1081344 Jun 6 10:00 20240605.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1441792 Jun 7 10:00 20240606.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 8 10:00 20240607.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 9 10:00 20240608.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1175552 Jul 19 14:03 20240609.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jun 11 10:00 20240610.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 12 10:01 20240611.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 13 10:01 20240612.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 14 10:01 20240613.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1404928 Jun 15 10:01 20240614.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 16 10:00 20240615.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 17 10:00 20240616.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jun 18 10:01 20240617.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 970752 Jun 19 10:00 20240618.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 802816 Jun 20 10:00 20240619.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 806912 Jun 21 10:00 20240620.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 888832 Jun 22 10:00 20240621.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 23 10:00 20240622.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 24 10:00 20240623.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jun 25 10:00 20240624.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 26 10:00 20240625.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jun 27 10:00 20240626.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 28 10:00 20240627.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 29 10:00 20240628.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jun 30 10:00 20240629.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jul 1 10:00 20240630.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1417216 Jul 2 10:00 20240701.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jul 3 10:00 20240702.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jul 4 10:00 20240703.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jul 5 10:00 20240704.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1441792 Jul 6 10:00 20240705.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jul 7 10:00 20240706.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1433600 Jul 8 10:00 20240707.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1404928 Jul 9 10:00 20240708.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1429504 Jul 10 10:00 20240709.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1433600 Jul 11 10:00 20240710.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1056768 Jul 12 10:00 20240711.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1441792 Jul 13 10:00 20240712.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jul 14 10:00 20240713.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1449984 Jul 15 10:00 20240714.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1413120 Jul 16 10:00 20240715.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 323584 Jul 18 19:57 20240716.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 618496 Jul 18 19:52 20240717.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1085440 Jul 19 14:01 20240718.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 0 Jul 20 13:00 20240719.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jul 21 13:00 20240720.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 540672 Jul 22 13:00 20240721.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jul 23 13:02 20240722.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1445888 Jul 24 13:01 20240723.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jul 25 13:00 20240724.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1437696 Jul 26 13:01 20240725.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1429504 Jul 27 13:01 20240726.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 798720 Jul 28 13:00 20240727.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1421312 Jul 29 13:00 20240728.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1425408 Jul 30 13:01 20240729.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1396736 Jul 31 13:01 20240730.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1425408 Aug 1 13:00 20240731.mktdata.ohlcv.db\n", + "drwxrwxr-x 1 1000 1000 1500 Aug 10 21:00 2024-06\n", + "drwxrwxr-x 1 1000 1000 1550 Aug 10 21:00 2024-07\n", + "-rw-r--r-- 1 root root 0 Aug 13 13:49 20240601.mktdata.ohlcv.db\n", "-rw------- 1 1000 1000 1425408 Aug 2 13:01 20240801.mktdata.ohlcv.db\n", "-rw------- 1 1000 1000 1396736 Aug 3 13:01 20240802.mktdata.ohlcv.db\n", "-rw------- 1 1000 1000 1384448 Aug 4 13:01 20240803.mktdata.ohlcv.db\n", - "-rw------- 1 1000 1000 1318912 Aug 5 13:00 20240804.mktdata.ohlcv.db\n" + "-rw------- 1 1000 1000 1318912 Aug 6 02:54 20240804.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 2269184 Aug 10 17:04 20240805.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1146880 Aug 10 20:59 20240806.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1363968 Aug 8 13:01 20240807.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1187840 Aug 10 17:09 20240808.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1028096 Aug 10 17:10 20240809.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1187840 Aug 11 13:00 20240810.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1187840 Aug 12 13:00 20240811.mktdata.ohlcv.db\n", + "-rw------- 1 1000 1000 1191936 Aug 13 13:00 20240812.mktdata.ohlcv.db\n" ] } ], "source": [ "!pwd\n", - "\n", "!ls -la /workspace/data/crypto_md/" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "c9ce43d3-a07a-47a7-b80b-86e82396cc30", - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "code", "execution_count": null, @@ -245,7 +197,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 39, "id": "5d2aed0b-8c9d-4f5a-9166-785da4811390", "metadata": {}, "outputs": [ @@ -253,32 +205,32 @@ "name": "stdout", "output_type": "stream", "text": [ - "86221\n", + "61968\n", " tstamp exchange_id instrument_id open high \\\n", - "0 1721520000000000000 COINBASE PAIR-BTC-USD 67163.82 67218.39 \n", - "1 1721520060000000000 COINBASE PAIR-BTC-USD 67214.52 67228.20 \n", - "2 1721520120000000000 COINBASE PAIR-BTC-USD 67209.22 67215.07 \n", + "0 1722556800000000000 COINBASE PAIR-BTC-USD 65293.48 65346.67 \n", + "1 1722556860000000000 COINBASE PAIR-BTC-USD 65340.60 65370.76 \n", + "2 1722556920000000000 COINBASE PAIR-BTC-USD 65307.03 65399.08 \n", "\n", " low close volume vwap \n", - "0 67157.99 67216.19 5.171900 67199.886168 \n", - "1 67203.56 67203.58 2.185463 67217.543340 \n", - "2 67164.16 67174.18 1.584411 67196.437419 \n", + "0 65287.64 65342.40 6.968323 65311.166016 \n", + "1 65305.02 65313.07 4.523532 65345.659994 \n", + "2 65299.80 65356.48 3.176643 65383.078932 \n", " tstamp exchange_id instrument_id open high low \\\n", - "86218 1722815820000000000 COINBASE PAIR-XRP-USD 0.5223 0.5232 0.5223 \n", - "86219 1722815880000000000 COINBASE PAIR-XRP-USD 0.5230 0.5234 0.5224 \n", - "86220 1722815940000000000 COINBASE PAIR-XRP-USD 0.5223 0.5229 0.5222 \n", + "61965 1723420620000000000 COINBASE PAIR-XRP-USD 0.5530 0.5530 0.5523 \n", + "61966 1723420680000000000 COINBASE PAIR-XRP-USD 0.5525 0.5526 0.5522 \n", + "61967 1723420740000000000 COINBASE PAIR-XRP-USD 0.5524 0.5531 0.5523 \n", "\n", - " close volume vwap \n", - "86218 0.5232 21822.376721 0.522804 \n", - "86219 0.5225 47397.404109 0.522631 \n", - "86220 0.5229 138078.735162 0.522739 \n" + " close volume vwap \n", + "61965 0.5524 62414.559650 0.552595 \n", + "61966 0.5523 7221.733980 0.552432 \n", + "61967 0.5531 12114.427327 0.552750 \n" ] } ], "source": [ "directory = \"/workspace/data/crypto_md\"\n", "\n", - "# List of datesprint\n", + "# List of dates\n", "dates = [\n", " # '20240601', \n", " # '20240602', \n", @@ -332,22 +284,28 @@ " # '20240718',\n", " # '20240719',\n", " # '20240720',\n", - " '20240721', \n", - " '20240722', \n", - " '20240723',\n", - " '20240724',\n", - " '20240725', \n", - " '20240726',\n", - " '20240727',\n", - " '20240728',\n", - " '20240729',\n", - " '20240730',\n", - " '20240731',\n", - "\n", - " '20240801',\n", + " # '20240721', \n", + " # '20240722', \n", + " # '20240723',\n", + " # '20240724',\n", + " # '20240725', \n", + " # '20240726',\n", + " # '20240727',\n", + " # '20240728',\n", + " # '20240729',\n", + " # '20240730',\n", + " # '20240731',\n", + " # '20240801',\n", " '20240802',\n", " '20240803',\n", - " '20240804'\n", + " '20240804',\n", + " '20240805',\n", + " '20240806',\n", + " '20240807',\n", + " '20240808',\n", + " '20240809',\n", + " '20240810',\n", + " '20240811'\n", " ]\n", " \n", "# Create an entirely empty DataFrame\n", @@ -375,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 40, "id": "cd83027c-eaa1-44d9-98ad-8506099c323d", "metadata": {}, "outputs": [ @@ -383,10 +341,10 @@ "name": "stdout", "output_type": "stream", "text": [ - " date instrument_id close volume vwap\n", - "83340 8-4-23-59 PAIR-ETH-USD 2688.3100 82.256123 2686.567577\n", - "84780 8-4-23-59 PAIR-LTC-USD 62.4300 141.888281 62.419958\n", - "86220 8-4-23-59 PAIR-XRP-USD 0.5229 138078.735162 0.522739\n" + " date instrument_id close volume vwap\n", + "59087 8-11-23-59 PAIR-ETH-USD 2555.5800 28.028001 2554.529061\n", + "60527 8-11-23-59 PAIR-LTC-USD 59.7500 178.750636 59.706081\n", + "61967 8-11-23-59 PAIR-XRP-USD 0.5531 12114.427327 0.552750\n" ] } ], @@ -415,7 +373,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 41, "id": "2184cea7-2883-4aa5-b685-80b72141b633", "metadata": {}, "outputs": [ @@ -423,10 +381,10 @@ "name": "stdout", "output_type": "stream", "text": [ - " date instrument_id close volume vwap\n", - "81898 8-4-23-57 PAIR-BTC-USD 58099.85 11.064438 58025.626507\n", - "81899 8-4-23-58 PAIR-BTC-USD 58105.52 35.875887 58105.136515\n", - "81900 8-4-23-59 PAIR-BTC-USD 58137.92 8.787810 58119.955528\n" + " date instrument_id close volume vwap\n", + "57645 8-11-23-57 PAIR-BTC-USD 58718.05 1.344185 58742.529407\n", + "57646 8-11-23-58 PAIR-BTC-USD 58724.12 3.907811 58717.757710\n", + "57647 8-11-23-59 PAIR-BTC-USD 58719.94 2.386911 58701.797579\n" ] } ], @@ -441,7 +399,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 42, "id": "316c0cfb-c73d-4dad-9d49-eb80daa229ec", "metadata": {}, "outputs": [ @@ -449,40 +407,40 @@ "name": "stdout", "output_type": "stream", "text": [ - " date close_eth volume_eth vwap_eth\n", - "21553 8-4-23-57 0.268752 39.193421 0.268422\n", - "21554 8-4-23-58 0.268432 31.893057 0.268459\n", - "21555 8-4-23-59 0.268831 82.256123 0.268657\n", - " date close_xrp volume_xrp vwap_xrp close_eth volume_eth \\\n", - "21553 8-4-9-7 0.5487 14556.914441 0.548757 0.290817 8.595740 \n", - "21554 8-4-9-8 0.5495 18459.739887 0.548913 0.291027 17.632035 \n", - "21555 8-4-9-9 0.5498 25802.138530 0.549838 0.290987 5.739295 \n", + " date close_eth volume_eth vwap_eth\n", + "15489 8-11-23-57 0.255274 9.323818 0.255445\n", + "15490 8-11-23-58 0.255337 16.142155 0.255291\n", + "15491 8-11-23-59 0.255558 28.028001 0.255453\n", + " date close_xrp volume_xrp vwap_xrp close_eth volume_eth \\\n", + "18369 8-9-9-7 0.6037 18115.291827 0.603396 0.267486 22.309792 \n", + "18370 8-9-9-8 0.6030 135966.774838 0.602832 0.267594 36.849237 \n", + "18371 8-9-9-9 0.6033 28410.914323 0.603139 0.267658 76.562049 \n", "\n", " vwap_eth \n", - "21553 0.290673 \n", - "21554 0.290951 \n", - "21555 0.291012 \n", - "M1: 21556\n", + "18369 0.267448 \n", + "18370 0.267570 \n", + "18371 0.267648 \n", + "M1: 18372\n", "========================================\n", " date close_xrp volume_xrp vwap_xrp close_eth volume_eth \\\n", - "0 7-21-0-0 0.5947 63177.491758 0.594627 0.352176 2.757178 \n", - "1 7-21-0-1 0.5951 14104.439378 0.594942 0.352136 25.736542 \n", + "0 8-10-0-0 0.5795 77816.237627 0.580156 0.259667 16.927328 \n", + "1 8-10-0-1 0.5789 44702.503350 0.578976 0.259666 10.655055 \n", "\n", " vwap_eth close_ltc volume_ltc vwap_ltc close_btc volume_btc vwap_btc \n", - "0 0.352067 0.7311 113.257967 0.730940 0.672162 5.171900 0.671999 \n", - "1 0.352154 0.7309 62.564957 0.731035 0.672036 2.185463 0.672175 \n", - " date close_xrp volume_xrp vwap_xrp close_eth volume_eth \\\n", - "21552 8-4-9-8 0.5495 18459.739887 0.548913 0.291027 17.632035 \n", - "21553 8-4-9-9 0.5498 25802.138530 0.549838 0.290987 5.739295 \n", + "0 0.259844 0.6072 105.048920 0.607253 0.608186 1.961876 0.608431 \n", + "1 0.259694 0.6074 35.325037 0.607199 0.608049 1.174154 0.608171 \n", + " date close_xrp volume_xrp vwap_xrp close_eth volume_eth \\\n", + "35647 8-9-9-8 0.6030 135966.774838 0.602832 0.267594 36.849237 \n", + "35648 8-9-9-9 0.6033 28410.914323 0.603139 0.267658 76.562049 \n", "\n", " vwap_eth close_ltc volume_ltc vwap_ltc close_btc volume_btc \\\n", - "21552 0.290951 0.6466 10.223041 0.646115 0.605417 0.18907 \n", - "21553 0.291012 0.6467 0.359847 0.646700 0.605483 3.69892 \n", + "35647 0.267570 0.6088 166.967425 0.608706 0.612084 2.245966 \n", + "35648 0.267648 0.6085 69.239176 0.608629 0.611857 1.814084 \n", "\n", " vwap_btc \n", - "21552 0.605321 \n", - "21553 0.605487 \n", - "test sample size: 21554\n" + "35647 0.612039 \n", + "35648 0.611996 \n", + "test sample size: 35649\n" ] } ], @@ -599,7 +557,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 43, "id": "38bc81a6-12b5-4874-9f1e-c5e1fbeffa37", "metadata": {}, "outputs": [ @@ -607,10 +565,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "df_M1 shape: 21556\n", - "df_M2 shape: 21556\n", - "df_M3 shape: 21556\n", - "sample shape: 21554\n" + "df_M1 shape: 18372\n", + "df_M2 shape: 24134\n", + "df_M3 shape: 35654\n", + "sample shape: 35649\n" ] } ], @@ -906,8 +864,615 @@ { "cell_type": "code", "execution_count": null, + "id": "324941c6-a90f-45ff-a7f9-171c8fe4bb30", + "metadata": {}, + "outputs": [], + "source": [ + "# 08.08.2024 - Not going any data split now, just studying time series\n", + "# =====================================================================" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "42d21e39-5010-4ffa-9f95-7a181b6b6be8", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sample shape: 35649\n" + ] + } + ], + "source": [ + "print ('sample shape: ', sample.shape[0])" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "6b2f753a-504d-48df-bce5-7bdb8211afdb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " date close_xrp volume_xrp vwap_xrp close_eth volume_eth \\\n", + "0 8-10-0-0 0.5795 77816.237627 0.580156 0.259667 16.927328 \n", + "1 8-10-0-1 0.5789 44702.503350 0.578976 0.259666 10.655055 \n", + "2 8-10-0-10 0.5798 19948.022176 0.579373 0.259656 7.031340 \n", + "3 8-10-0-11 0.5808 26078.353339 0.580876 0.260160 18.130573 \n", + "4 8-10-0-12 0.5812 57835.097540 0.581034 0.260055 7.086208 \n", + "\n", + " vwap_eth close_ltc volume_ltc vwap_ltc close_btc volume_btc vwap_btc \n", + "0 0.259844 0.6072 105.048920 0.607253 0.608186 1.961876 0.608431 \n", + "1 0.259694 0.6074 35.325037 0.607199 0.608049 1.174154 0.608171 \n", + "2 0.259360 0.6075 180.216241 0.606880 0.608066 0.879813 0.607609 \n", + "3 0.260233 0.6083 169.073496 0.608250 0.609019 2.323902 0.609004 \n", + "4 0.260099 0.6078 45.429445 0.608001 0.608821 1.293378 0.608947 \n" + ] + } + ], + "source": [ + "print (sample.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "99b65487-9f78-44dc-b415-8189785a0fa1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " date close_xrp close_eth close_ltc close_btc\n", + "0 8-10-0-0 0.5795 0.259667 0.6072 0.608186\n", + "1 8-10-0-1 0.5789 0.259666 0.6074 0.608049\n", + "2 8-10-0-10 0.5798 0.259656 0.6075 0.608066\n", + "3 8-10-0-11 0.5808 0.260160 0.6083 0.609019\n", + "4 8-10-0-12 0.5812 0.260055 0.6078 0.608821\n" + ] + } + ], + "source": [ + "df_ts = sample[['date' , 'close_xrp' , 'close_eth' , 'close_ltc' , 'close_btc']]\n", + "print (df_ts.head())" + ] + }, + { + "cell_type": "code", + "execution_count": 47, "id": "25490206-866f-4c2c-ba14-5c46ea3dff8c", "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " date dly_xrp_ln dly_eth_ln dly_ltc_ln dly_btc_ln\n", + "0 8-10-0-1 -0.103591 -0.000385 0.032933 -0.022644\n", + "1 8-10-0-10 0.155347 -0.003851 0.016462 0.002812\n", + "2 8-10-0-11 0.172325 0.193915 0.131601 0.156669\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_3577/388518154.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_xrp_rtn'] = ((df_ts['close_xrp']/ df_ts['close_xrp'].shift(1))-1)*100\n", + "/tmp/ipykernel_3577/388518154.py:2: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_xrp_ln'] = np.log((df_ts['close_xrp']/ df_ts['close_xrp'].shift(1)))*100\n", + "/tmp/ipykernel_3577/388518154.py:4: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_eth_rtn'] = ((df_ts['close_eth']/ df_ts['close_eth'].shift(1))-1)*100\n", + "/tmp/ipykernel_3577/388518154.py:5: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_eth_ln'] = np.log((df_ts['close_eth']/ df_ts['close_eth'].shift(1)))*100\n", + "/tmp/ipykernel_3577/388518154.py:7: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_ltc_rtn'] = ((df_ts['close_ltc']/ df_ts['close_ltc'].shift(1))-1)*100\n", + "/tmp/ipykernel_3577/388518154.py:8: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_ltc_ln'] = np.log((df_ts['close_ltc']/ df_ts['close_ltc'].shift(1)))*100\n", + "/tmp/ipykernel_3577/388518154.py:10: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " df_ts['dly_btc_rtn'] = ((df_ts['close_btc']/ df_ts['close_btc'].shift(1))-1)*100\n" + ] + } + ], + "source": [ + "df_ts['dly_xrp_rtn'] = ((df_ts['close_xrp']/ df_ts['close_xrp'].shift(1))-1)*100\n", + "df_ts['dly_xrp_ln'] = np.log((df_ts['close_xrp']/ df_ts['close_xrp'].shift(1)))*100\n", + "\n", + "df_ts['dly_eth_rtn'] = ((df_ts['close_eth']/ df_ts['close_eth'].shift(1))-1)*100\n", + "df_ts['dly_eth_ln'] = np.log((df_ts['close_eth']/ df_ts['close_eth'].shift(1)))*100\n", + "\n", + "df_ts['dly_ltc_rtn'] = ((df_ts['close_ltc']/ df_ts['close_ltc'].shift(1))-1)*100\n", + "df_ts['dly_ltc_ln'] = np.log((df_ts['close_ltc']/ df_ts['close_ltc'].shift(1)))*100\n", + "\n", + "df_ts['dly_btc_rtn'] = ((df_ts['close_btc']/ df_ts['close_btc'].shift(1))-1)*100\n", + "df_ts['dly_btc_ln'] = np.log((df_ts['close_btc']/ df_ts['close_btc'].shift(1)))*100\n", + "\n", + "# df_ts_rtn = df_ts[['date', 'dly_xrp_rtn', 'dly_xrp_ln', \n", + "# 'dly_eth_rtn', 'dly_eth_ln', \n", + "# 'dly_ltc_rtn', 'dly_ltc_ln', \n", + "# 'dly_btc_rtn', 'dly_btc_ln' ]]\n", + "\n", + "df_ts_rtn = df_ts[['date', 'dly_xrp_ln', \n", + " 'dly_eth_ln', \n", + " 'dly_ltc_ln', \n", + " 'dly_btc_ln' ]]\n", + "\n", + "# Drop rows with any NaN value and assign it to a new DataFrame\n", + "df_ts_rtn = df_ts_rtn.dropna(axis = 0).reset_index(drop = True)\n", + "\n", + "print (df_ts_rtn.head(3))" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "9f00dde0-c59f-4ab3-ac96-f0ce7bafb8ec", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Create a figure and axis object\n", + "fig, ax = plt.subplots(4 , 1)\n", + "\n", + "# Plot the data\n", + "ax[0].plot(df_ts_rtn['date'], df_ts_rtn['dly_xrp_ln'], 'blue')\n", + "ax[1].plot(df_ts_rtn['date'], df_ts_rtn['dly_eth_ln'], 'green')\n", + "ax[2].plot(df_ts_rtn['date'], df_ts_rtn['dly_ltc_ln'], 'orange')\n", + "ax[3].plot(df_ts_rtn['date'], df_ts_rtn['dly_btc_ln'], 'red')\n", + "\n", + "# Customize the plot\n", + "ax[0].set_title('dly_xrp_ln')\n", + "ax[1].set_title('dly_eth_ln')\n", + "ax[2].set_title('dly_ltc_ln')\n", + "ax[3].set_title('dly_btc_ln')\n", + "\n", + "# # Show the plot\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "0d3be40e-7fcf-4219-9456-b98612d80ff3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Figure AutoCorrelations and Partial AutoCorrelations\n", + "lags = 32\n", + "acf_vals = acf(df_ts_rtn['dly_xrp_ln'])\n", + "plt.bar(range(lags), acf_vals[:lags])" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "ed62bdc7-e372-46c5-8f56-49dd1d0574d3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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66qrrgrKPKHk0KFDliRr+/btlmV9e4707NnTev75531rdu3aZUmyysrKgjVmUPzvsbEsy7rsssusRYsWBW+oENKvXz/rqaee6pbnDFdezlBzc7MqKirkdrt928LDw+V2u1VWVhbEyULDp59+qsTERA0bNkyzZs1SdXV1sEcKOfv27ZPH4/E7h2JiYpSWlsY59P+VlpYqPj5eI0eO1IIFC/Tll18Ge6SAq6+vlyT1799fklRRUaETJ074nTejRo3Seeedd86dN/97bL7zzDPPKC4uTmPHjlVubq6OHTsWjPGCpqWlRRs2bFBjY6NcLle3PGe63V/MGCh1dXVqaWmR0+n02+50OrV79+4gTRUa0tLStG7dOo0cOVIHDx7UsmXLdMkll+ijjz5S3759gz1eyPB4PJLU5jn03ffOZdOmTdM111yjoUOHau/evbr77rs1ffp0lZWVKSIiItjjBURra6tuu+02XXzxxRo7dqykb8+byMhIxcbG+q09186bto6NJN14440aMmSIEhMT9cEHH+iuu+5SVVWVXnzxxSBOGxgffvihXC6Xjh8/rj59+mjTpk0aM2aMKisru905Q7ygy02fPt33z+PHj1daWpqGDBmi5557TnPnzg3iZDDJ9ddf7/vncePGafz48Ro+fLhKS0s1ZcqUIE4WOAsXLtRHH310zt4z1pH2js28efN8/zxu3DgNHDhQU6ZM0d69ezV8+PBAjxlQI0eOVGVlperr6/XCCy9ozpw52r59e7DHsgVvG52huLg4RUREnHS3dm1trRISEoI0VWiKjY3VBRdcoD179gR7lJDy3XnCOdQ5w4YNU1xc3DlzHmVnZ+uVV17RG2+8ocGDB/u2JyQkqLm5WUePHvVbfy6dN+0dm7akpaVJ0jlx3kRGRmrEiBFKTU1VQUGBUlJS9Mgjj3TLc4Z4OUORkZFKTU1VSUmJb1tra6tKSkrkcrmCOFno+eqrr7R3714NHDgw2KOElKFDhyohIcHvHPJ6vXrvvfc4h9rw3//+V19++WW3P48sy1J2drY2bdqk119/XUOHDvX7fmpqqnr27Ol33lRVVam6urrbnzenOjZtqayslKRuf960pbW1VU1NTd3znAn2HcMm27Bhg+VwOKx169ZZ//nPf6x58+ZZsbGxlsfjCfZoQXX77bdbpaWl1r59+6y3337bcrvdVlxcnHXo0KFgjxZwDQ0N1vvvv2+9//77liRr1apV1vvvv299/vnnlmVZ1ooVK6zY2FjrpZdesj744APrqquusoYOHWp9/fXXQZ7cfh0dm4aGBuuOO+6wysrKrH379lmvvfaadeGFF1rnn3++dfz48WCPbqsFCxZYMTExVmlpqXXw4EHf49ixY7418+fPt8477zzr9ddft3bs2GG5XC7L5XIFcerAONWx2bNnj3X//fdbO3bssPbt22e99NJL1rBhw6xLL700yJPbb8mSJdb27dutffv2WR988IG1ZMkSKywszPrXv/5lWVb3O2eIl7P02GOPWeedd54VGRlpTZ482Xr33XeDPVLQZWRkWAMHDrQiIyOtQYMGWRkZGdaePXuCPVZQvPHGG5akkx5z5syxLOvbj0svXbrUcjqdlsPhsKZMmWJVVVUFd+gA6ejYHDt2zJo6dao1YMAAq2fPntaQIUOsrKysc+J/DNo6JpKsv/71r741X3/9tXXrrbda/fr1s3r37m398pe/tA4ePBi8oQPkVMemurrauvTSS63+/ftbDofDGjFihHXnnXda9fX1wR08AH7zm99YQ4YMsSIjI60BAwZYU6ZM8YWLZXW/cybMsiwrcNd5AAAAzg73vAAAAKMQLwAAwCjECwAAMArxAgAAjEK8AAAAoxAvAADAKMQLAAAwCvECAACMQrwAAACjEC8AAMAoxAsAADAK8QIAAIzy/wD0bHNw4r8d1wAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Figure AutoCorrelations and Partial AutoCorrelations\n", + "lags = 32\n", + "pacf_vals = pacf(df_ts_rtn['dly_xrp_ln'])\n", + "plt.bar(range(lags), pacf_vals[:lags])" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "c8952851-4780-40ea-ad53-49cd9028eabf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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WKcdb9P8T3JysuLi4k64E7m2tlYpKSlGU/VcgwYN0gUXXKC9e/daj9JjfHGecA51zMiRI5WcnNynzqFFixbpb3/7m15++WUNGzYsvDwlJUXNzc36+OOPW63fl86d9o5NW7KzsyWpT5w78fHxOu+885SVlaWSkhJlZmbqgQce6HXnDDHyP/Hx8crKylJ5eXl4WSgUUnl5uXw+n+FkPdMnn3yiffv2aejQodaj9BgjRoxQSkpKq3MoGAzq9ddf5xxqw3/+8x99+OGHfeIccs5p0aJFWr9+vV566SWNGDGi1fezsrLUr1+/VufOnj17VFNT0+vPnVMdm7ZUV1dLUp84d74qFAqpqamp950z1nfQ9iRr1651Ho/HPf744+7f//63u+mmm9ygQYNcIBCwHs3cL3/5S1dRUeH279/v/vnPfzq/3++Sk5NdXV2d9Wjd6ujRo27Xrl1u165dTpJbuXKl27Vrl3v//fedc84tX77cDRo0yD3//PPujTfecFdddZUbMWKE+/TTT40n73onOzZHjx51t9xyi6usrHT79+93L774orvooovc+eef744fP249epdbsGCBS0pKchUVFe7w4cPhx7Fjx8LrzJ8/351zzjnupZdecjt27HA+n8/5fD7DqbvHqY7N3r173T333ON27Njh9u/f755//nk3cuRId/nllxtP3vUKCgrc1q1b3f79+90bb7zhCgoKXExMjPvHP/7hnOtd5wwx8hV//OMf3TnnnOPi4+Pd5MmT3WuvvWY9Uo+Qm5vrhg4d6uLj411aWprLzc11e/futR6r27388stO0gmPuXPnOuc+/3jv0qVLndfrdR6Px02ZMsXt2bPHduhucrJjc+zYMTd16lR39tlnu379+rnhw4e7efPm9ZnQb+u4SHJ/+tOfwut8+umn7uc//7kbPHiw69+/v/vhD3/oDh8+bDd0NznVsampqXGXX365O+uss5zH43HnnXeeu/XWW11DQ4Pt4N3gZz/7mRs+fLiLj493Z599tpsyZUo4RJzrXedMjHPOdd91GAAAgNa4ZwQAAJgiRgAAgCliBAAAmCJGAACAKWIEAACYIkYAAIApYgQAAJgiRgAAgCliBAAAmCJGAACAKWIEAACYIkYAAICp/wNKm/2n6cuAugAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lags = 32\n", + "acf_vals = acf(df_ts_rtn['dly_btc_ln'])\n", + "plt.bar(range(lags), acf_vals[:lags])" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "id": "187e3453-c3ed-49f6-9fcb-e1811fd51677", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 53, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "lags = 32\n", + "pacf_vals = pacf(df_ts_rtn['dly_btc_ln'])\n", + "plt.bar(range(lags), pacf_vals[:lags])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4810dd06-554e-4737-b019-968f5563bf4c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "74ba447d-5b54-4ce6-a3e7-27655e2519fd", + "metadata": {}, + "outputs": [], + "source": [ + "# Step 1: Test for stationarity (ADF test)\n", + "adf_x = ts.adfuller(X)\n", + "adf_y = ts.adfuller(Y)\n", + "\n", + "print(f\"ADF Statistic for X: {adf_x[0]}, p-value: {adf_x[1]}\")\n", + "print(f\"ADF Statistic for Y: {adf_y[0]}, p-value: {adf_y[1]}\")\n", + "\n", + "# Step 2: Test for co-integration (Engle-Granger method)\n", + "# Run OLS regression\n", + "model = sm.OLS(Y, sm.add_constant(X)).fit()\n", + "residuals = model.resid\n", + "\n", + "# ADF test on residuals\n", + "adf_resid = ts.adfuller(residuals)\n", + "\n", + "print(f\"ADF Statistic for residuals: {adf_resid[0]}, p-value: {adf_resid[1]}\")\n", + "\n", + "# Interpret results\n", + "if adf_resid[1] < 0.05:\n", + " print(\"The residuals are stationary, indicating co-integration.\")\n", + "else:\n", + " print(\"The residuals are non-stationary, indicating no co-integration.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "9dd80261-da37-40a4-a62d-325020e96296", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ADF Statistic for XRP: -26.99201245942172, p-value: 0.0\n", + "ADF Statistic for ETH: -36.444076417359156, p-value: 0.0\n", + "ADF Statistic for LTC: -33.64907456780916, p-value: 0.0\n", + "ADF Statistic for BTC: -34.46653758454573, p-value: 0.0\n" + ] + } + ], + "source": [ + "# Step 1: Test for stationarity (ADF test)\n", + "adf_xrp = ts.adfuller(df_ts_rtn['dly_xrp_ln'])\n", + "print(f\"ADF Statistic for XRP: {adf_xrp[0]}, p-value: {adf_xrp[1]}\")\n", + "\n", + "adf_eth = ts.adfuller(df_ts_rtn['dly_eth_ln'])\n", + "print(f\"ADF Statistic for ETH: {adf_eth[0]}, p-value: {adf_eth[1]}\")\n", + "\n", + "adf_ltc = ts.adfuller(df_ts_rtn['dly_ltc_ln'])\n", + "print(f\"ADF Statistic for LTC: {adf_ltc[0]}, p-value: {adf_ltc[1]}\")\n", + "\n", + "adf_btc = ts.adfuller(df_ts_rtn['dly_btc_ln'])\n", + "print(f\"ADF Statistic for BTC: {adf_btc[0]}, p-value: {adf_btc[1]}\")\n", + "\n", + "# All Series are stationary\n", + "# ADF Statistic for XRP: -26.99201245942172, p-value: 0.0\n", + "# ADF Statistic for ETH: -36.444076417359156, p-value: 0.0\n", + "# ADF Statistic for LTC: -33.64907456780916, p-value: 0.0\n", + "# ADF Statistic for BTC: -34.46653758454573, p-value: 0.0" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "5cd54d28-0289-41a6-8572-b5ab267108f3", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(-34.46653758454573, 0.0, 36, 35611, {'1%': -3.4305336447006214, '5%': -2.86162116646338, '10%': -2.5668132023498393}, -7200.807380437385)\n" + ] + } + ], + "source": [ + "print(adf_btc) # 36 lags" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "29a529c7-8ea9-4cd3-9139-66de4ea45008", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "-7200.807380437385\n" + ] + } + ], + "source": [ + "print(adf_btc[5]) # IC Best -7200.807380437385" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "52456bd3-3862-496a-84c2-6f178c263781", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "f879f203-f55b-4ef2-8bc1-62037b67cea6", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.11/dist-packages/statsmodels/base/model.py:607: ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals\n", + " warnings.warn(\"Maximum Likelihood optimization failed to \"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + " SARIMAX Results \n", + "==============================================================================\n", + "Dep. Variable: dly_xrp_ln No. Observations: 35648\n", + "Model: ARIMA(16, 0, 16) Log Likelihood -13256.206\n", + "Date: Tue, 13 Aug 2024 AIC 26580.412\n", + "Time: 20:48:49 BIC 26868.781\n", + "Sample: 0 HQIC 26672.185\n", + " - 35648 \n", + "Covariance Type: opg \n", + "==============================================================================\n", + " coef std err z P>|z| [0.025 0.975]\n", + "------------------------------------------------------------------------------\n", + "const 0.0002 0.001 0.158 0.875 -0.002 0.003\n", + "ar.L1 -0.5294 0.025 -21.456 0.000 -0.578 -0.481\n", + "ar.L2 0.2148 0.034 6.236 0.000 0.147 0.282\n", + "ar.L3 0.2039 0.033 6.198 0.000 0.139 0.268\n", + "ar.L4 0.2425 0.033 7.323 0.000 0.178 0.307\n", + "ar.L5 0.3274 0.017 19.066 0.000 0.294 0.361\n", + "ar.L6 -0.1316 0.012 -10.733 0.000 -0.156 -0.108\n", + "ar.L7 -0.0543 0.012 -4.355 0.000 -0.079 -0.030\n", + "ar.L8 -0.0715 0.010 -6.892 0.000 -0.092 -0.051\n", + "ar.L9 -0.0580 0.010 -5.936 0.000 -0.077 -0.039\n", + "ar.L10 -0.1152 0.009 -12.399 0.000 -0.133 -0.097\n", + "ar.L11 0.5626 0.011 52.964 0.000 0.542 0.583\n", + "ar.L12 0.3547 0.016 21.598 0.000 0.323 0.387\n", + "ar.L13 -0.0748 0.023 -3.201 0.001 -0.121 -0.029\n", + "ar.L14 -0.0663 0.022 -3.004 0.003 -0.110 -0.023\n", + "ar.L15 -0.2544 0.023 -10.882 0.000 -0.300 -0.209\n", + "ar.L16 -0.3496 0.015 -22.740 0.000 -0.380 -0.320\n", + "ma.L1 0.3764 0.025 15.258 0.000 0.328 0.425\n", + "ma.L2 -0.3137 0.032 -9.884 0.000 -0.376 -0.252\n", + "ma.L3 -0.2413 0.030 -8.023 0.000 -0.300 -0.182\n", + "ma.L4 -0.2917 0.032 -9.180 0.000 -0.354 -0.229\n", + "ma.L5 -0.3013 0.016 -18.401 0.000 -0.333 -0.269\n", + "ma.L6 0.1836 0.014 13.110 0.000 0.156 0.211\n", + "ma.L7 0.0679 0.012 5.603 0.000 0.044 0.092\n", + "ma.L8 0.0993 0.010 9.758 0.000 0.079 0.119\n", + "ma.L9 0.0361 0.010 3.572 0.000 0.016 0.056\n", + "ma.L10 -0.0428 0.009 -4.789 0.000 -0.060 -0.025\n", + "ma.L11 -0.3016 0.008 -39.009 0.000 -0.317 -0.286\n", + "ma.L12 -0.2198 0.012 -18.740 0.000 -0.243 -0.197\n", + "ma.L13 0.0182 0.016 1.113 0.266 -0.014 0.050\n", + "ma.L14 0.1099 0.016 6.793 0.000 0.078 0.142\n", + "ma.L15 0.2271 0.016 14.470 0.000 0.196 0.258\n", + "ma.L16 0.1065 0.011 9.439 0.000 0.084 0.129\n", + "sigma2 0.1232 8.25e-05 1493.985 0.000 0.123 0.123\n", + "===================================================================================\n", + "Ljung-Box (L1) (Q): 0.04 Jarque-Bera (JB): 310123090.42\n", + "Prob(Q): 0.83 Prob(JB): 0.00\n", + "Heteroskedasticity (H): 2.39 Skew: -2.64\n", + "Prob(H) (two-sided): 0.00 Kurtosis: 459.91\n", + "===================================================================================\n", + "\n", + "Warnings:\n", + "[1] Covariance matrix calculated using the outer product of gradients (complex-step).\n" + ] + } + ], + "source": [ + "from statsmodels.tsa.arima.model import ARIMA\n", + "\n", + "# Assuming `xrp_series` is your stationary time series data\n", + "p = 16\n", + "q = 16\n", + "model = ARIMA(df_ts_rtn['dly_xrp_ln'], order=(p, 0, q))\n", + "\n", + "# start = time()\n", + "fit_model = model.fit()\n", + "# end = time()\n", + "\n", + "# print (\"model Fitting Tim : \", end - start )\n", + "\n", + "# Summary of the fitted model\n", + "print(fit_model.summary())\n", + "\n", + "# Forecasting\n", + "# forecast = fit_model.forecast(steps=10) # Forecast the next 10 periods\n", + "# print(forecast)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2f4217d8-ef1e-4af1-a2b0-2eed7880b68c", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "562e7f8f-67bf-4b16-999c-d2d4fc74ce28", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "712d24b8-013b-4f7d-8957-875e712a26b0", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6d555573-1d68-4e70-9218-c70bf7d2f967", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb3960f9-5984-4255-81fe-fb0cc58f88ca", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7da5045d-1c09-4ded-a26d-c8f4f563899d", + "metadata": {}, "outputs": [], "source": [] },