diff --git a/.gitignore b/.gitignore index b6e4761..00d8c1a 100644 --- a/.gitignore +++ b/.gitignore @@ -127,3 +127,16 @@ dmypy.json # Pyre type checker .pyre/ + +# Config file +config/config.json + +# Live pair list +database/pair_list.json + +# Databases files +**.p + +# Ide files +.vscode +.idea diff --git a/README.md b/README.md index e326f73..b025a51 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,55 @@ -# cBot-Project -Mise en place du projet: ->git clone https://github.com/CryptoRobotFr/cBot-Project.git +# cBot-Project -Installation des dépendances: ->pip install -r requirements.txt +## Installation -Utilisation d'un environnement virtuel (recommandé): ->python -m venv .venv -.venv\Scripts\activate -pip install -r .\requirements.txt +Mise en place du projet: +`git clone https://github.com/CryptoRobotFr/cBot-Project.git` -Si vous souhaitez nous soutenir financièrement pour le développement des projets CryptoRobot voici une adresse de donnation: +Installation des dépendances: +`pip install -r requirements.txt` + +Utilisation d'un environnement virtuel (recommandé): +`python -m venv .venv` +`.venv\Scripts\activate` +`pip install -r .\requirements.txt` + +## Configuration + +### Backtesting + +Commencez par configurer la liste des paires sur lesquelles vous souhaitez travailler en copiant et renommant le fichier pair_list.json.dist en pair_list.json puis en le modifiant si besoin. + +Depuis Vs code ou un autre IDE, téléchargez les données historiques avec les paramètres de votre choix en jouant le notebook Jupyter data_manager.ipynb + +Vous pouvez désormais jouer les différents notebook de backtest présents dans le dossier backtest avec vos paramètres. + +### Live + +Commencez par configurer la liste des paires comme pour le backtest. + +Faites de même avec le fichier config.json.dist à renommer en config.json et à renseigner avec vos clés API à destination de FTX. + +Concerant la configuration des logs, il est possible d'utiliser 2 webhook discord. + +Le premier webhook va afficher les logs à l'achat et à la vente au format : + +>Sending BUY 0.3 of FTT/USD order at 46.489 price + +Le 2eme permet de s'assurer que le bot à bien été lancé : + +>Starting bot CBOT at 21-01 01:00:03 + +Pour de l'aide concernant la mise en place d'un webhook : + +> + +Pour lancer concrètement le projet en live, je vous invite à regarder les différentes vidéos de [CryptoRobot](https://www.youtube.com/channel/UCGjfXO9kR34es5IsHLyP5eA) à ce sujet + +## Crédits + +Si vous souhaitez nous soutenir financièrement pour le développement des projets CryptoRobot voici une adresse de donation: L'adresse ci dessous accepte les tokens type ERC20 sur les différentes blockchain Ethereum compatible (Ethereum - Binance Smart Chain(BSC) - Avax cChain - Polygon - Fantom - Cronos) + >0x6c1d1B9AaF0D6f7d5f4652f96024E1A42B316526 diff --git a/backtest/alligator_multi.ipynb b/backtest/alligator_multi.ipynb new file mode 100644 index 0000000..d0b5cfa --- /dev/null +++ b/backtest/alligator_multi.ipynb @@ -0,0 +1,1307 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "sys.path.append( '../utilities' )\n", + "from data_engine import DataEngine\n", + "from backtesting import Backtesting\n", + "import pandas as pd\n", + "import ta\n", + "import ccxt\n", + "import json\n", + "f = open('../database/pair_list.json',)\n", + "pairJson = json.load(f)\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Successfully load 9982 candles for BTCUSD\n", + "Successfully load 9982 candles for ETHUSD\n", + "Successfully load 9982 candles for BNBUSD\n", + "Successfully load 9982 candles for LTCUSD\n", + "Successfully load 8946 candles for DOGEUSD\n", + "Successfully load 9982 candles for XRPUSD\n", + "Successfully load 9982 candles for SOLUSD\n", + "Successfully load 6129 candles for SHIBUSD\n", + "Successfully load 9982 candles for LINKUSD\n", + "Successfully load 9982 candles for UNIUSD\n", + "Successfully load 9982 candles for MATICUSD\n", + "Successfully load 6948 candles for AXSUSD\n", + "Successfully load 7260 candles for CROUSD\n", + "Successfully load 9982 candles for FTTUSD\n", + "Successfully load 9982 candles for TRXUSD\n", + "Successfully load 9982 candles for BCHUSD\n", + "Successfully load 7962 candles for FTMUSD\n", + "Successfully load 9546 candles for GRTUSD\n", + "Successfully load 9982 candles for AAVEUSD\n", + "Successfully load 9982 candles for OMGUSD\n", + "Successfully load 7573 candles for LRCUSD\n", + "Successfully load 9982 candles for SUSHIUSD\n", + "Successfully load 3108 candles for MANAUSD\n", + "Successfully load 9982 candles for SRMUSD\n", + "Successfully load 9982 candles for RUNEUSD\n", + "Successfully load 7282 candles for SANDUSD\n", + "Successfully load 9982 candles for CHZUSD\n", + "Successfully load 9064 candles for CRVUSD\n", + "Successfully load 7999 candles for RAYUSD\n", + "Data load 100%\n" + ] + }, + { + "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", + " \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", + "
openhighlowclosevolume
timestamp
2020-12-01 00:00:0019703.019722.019491.519573.51.515860e+06
2020-12-01 01:00:0019573.519638.019442.519611.51.207382e+06
2020-12-01 02:00:0019611.519707.019557.519685.02.424738e+06
2020-12-01 03:00:0019685.019686.019350.019410.01.876003e+06
2020-12-01 04:00:0019410.019530.519365.019369.56.910967e+05
..................
2022-01-20 17:00:0043284.043315.042998.043033.01.340536e+07
2022-01-20 18:00:0043033.043089.042826.042843.01.769752e+07
2022-01-20 19:00:0042843.043272.042827.042931.02.576442e+07
2022-01-20 20:00:0042931.042991.042573.042724.02.173733e+07
2022-01-20 21:00:0042724.042732.041451.041626.05.342518e+07
\n", + "

9982 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " open high low close volume\n", + "timestamp \n", + "2020-12-01 00:00:00 19703.0 19722.0 19491.5 19573.5 1.515860e+06\n", + "2020-12-01 01:00:00 19573.5 19638.0 19442.5 19611.5 1.207382e+06\n", + "2020-12-01 02:00:00 19611.5 19707.0 19557.5 19685.0 2.424738e+06\n", + "2020-12-01 03:00:00 19685.0 19686.0 19350.0 19410.0 1.876003e+06\n", + "2020-12-01 04:00:00 19410.0 19530.5 19365.0 19369.5 6.910967e+05\n", + "... ... ... ... ... ...\n", + "2022-01-20 17:00:00 43284.0 43315.0 42998.0 43033.0 1.340536e+07\n", + "2022-01-20 18:00:00 43033.0 43089.0 42826.0 42843.0 1.769752e+07\n", + "2022-01-20 19:00:00 42843.0 43272.0 42827.0 42931.0 2.576442e+07\n", + "2022-01-20 20:00:00 42931.0 42991.0 42573.0 42724.0 2.173733e+07\n", + "2022-01-20 21:00:00 42724.0 42732.0 41451.0 41626.0 5.342518e+07\n", + "\n", + "[9982 rows x 5 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#pairList = pairJson['ftxBnbPair']\n", + "pairList = pairJson['ftxClassicPair']\n", + "# pairList = pairJson['ftxClassicPair']\n", + "timeframe = '1h'\n", + "startDate = '2017-01-01T00:00:00'\n", + "\n", + "#dataEngine = DataEngine(session=ccxt.hitbtc())\n", + "dataEngine = DataEngine(session=ccxt.ftx())\n", + "\n", + "dfList = []\n", + "for pair in pairList:\n", + " df = dataEngine.get_historical_from_db(pair, timeframe, startDate)\n", + " dfList.append(df)\n", + "\n", + "print(\"Data load 100%\")\n", + "dfList[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Indicators loaded 100%\n" + ] + }, + { + "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", + " \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", + " \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", + "
openhighlowclosevolumeEMA1EMA2EMA3EMA4EMA5EMA6STOCH_RSIWillR
timestamp
2020-12-01 00:00:0019703.019722.019491.519573.51.515860e+06NaNNaNNaNNaNNaNNaNNaNNaN
2020-12-01 01:00:0019573.519638.019442.519611.51.207382e+06NaNNaNNaNNaNNaNNaNNaNNaN
2020-12-01 02:00:0019611.519707.019557.519685.02.424738e+06NaNNaNNaNNaNNaNNaNNaNNaN
2020-12-01 03:00:0019685.019686.019350.019410.01.876003e+06NaNNaNNaNNaNNaNNaNNaNNaN
2020-12-01 04:00:0019410.019530.519365.019369.56.910967e+05NaNNaNNaNNaNNaNNaNNaNNaN
..........................................
2022-01-20 17:00:0043284.043315.042998.043033.01.340536e+0742833.49057442273.32752042198.15994842281.16002642331.47731142546.0653850.658776-27.630058
2022-01-20 18:00:0043033.043089.042826.042843.01.769752e+0742835.86793042310.08058342223.44779342292.28557042339.86292842549.0199580.454789-38.612717
2022-01-20 19:00:0042843.043272.042827.042931.02.576442e+0742859.65094842350.13990042251.19493942304.93338042349.55370042552.8207540.483701-34.339846
2022-01-20 20:00:0042931.042991.042573.042724.02.173733e+0742825.73821142374.25990742269.73631442313.23172942355.69216442554.5240310.254616-46.595619
2022-01-20 21:00:0042724.042732.041451.041626.05.342518e+0742525.80365842325.98507442244.49175242299.62318042343.72999742545.2849850.000000-91.504854
\n", + "

9982 rows × 13 columns

\n", + "
" + ], + "text/plain": [ + " open high low close volume \\\n", + "timestamp \n", + "2020-12-01 00:00:00 19703.0 19722.0 19491.5 19573.5 1.515860e+06 \n", + "2020-12-01 01:00:00 19573.5 19638.0 19442.5 19611.5 1.207382e+06 \n", + "2020-12-01 02:00:00 19611.5 19707.0 19557.5 19685.0 2.424738e+06 \n", + "2020-12-01 03:00:00 19685.0 19686.0 19350.0 19410.0 1.876003e+06 \n", + "2020-12-01 04:00:00 19410.0 19530.5 19365.0 19369.5 6.910967e+05 \n", + "... ... ... ... ... ... \n", + "2022-01-20 17:00:00 43284.0 43315.0 42998.0 43033.0 1.340536e+07 \n", + "2022-01-20 18:00:00 43033.0 43089.0 42826.0 42843.0 1.769752e+07 \n", + "2022-01-20 19:00:00 42843.0 43272.0 42827.0 42931.0 2.576442e+07 \n", + "2022-01-20 20:00:00 42931.0 42991.0 42573.0 42724.0 2.173733e+07 \n", + "2022-01-20 21:00:00 42724.0 42732.0 41451.0 41626.0 5.342518e+07 \n", + "\n", + " EMA1 EMA2 EMA3 EMA4 \\\n", + "timestamp \n", + "2020-12-01 00:00:00 NaN NaN NaN NaN \n", + "2020-12-01 01:00:00 NaN NaN NaN NaN \n", + "2020-12-01 02:00:00 NaN NaN NaN NaN \n", + "2020-12-01 03:00:00 NaN NaN NaN NaN \n", + "2020-12-01 04:00:00 NaN NaN NaN NaN \n", + "... ... ... ... ... \n", + "2022-01-20 17:00:00 42833.490574 42273.327520 42198.159948 42281.160026 \n", + "2022-01-20 18:00:00 42835.867930 42310.080583 42223.447793 42292.285570 \n", + "2022-01-20 19:00:00 42859.650948 42350.139900 42251.194939 42304.933380 \n", + "2022-01-20 20:00:00 42825.738211 42374.259907 42269.736314 42313.231729 \n", + "2022-01-20 21:00:00 42525.803658 42325.985074 42244.491752 42299.623180 \n", + "\n", + " EMA5 EMA6 STOCH_RSI WillR \n", + "timestamp \n", + "2020-12-01 00:00:00 NaN NaN NaN NaN \n", + "2020-12-01 01:00:00 NaN NaN NaN NaN \n", + "2020-12-01 02:00:00 NaN NaN NaN NaN \n", + "2020-12-01 03:00:00 NaN NaN NaN NaN \n", + "2020-12-01 04:00:00 NaN NaN NaN NaN \n", + "... ... ... ... ... \n", + "2022-01-20 17:00:00 42331.477311 42546.065385 0.658776 -27.630058 \n", + "2022-01-20 18:00:00 42339.862928 42549.019958 0.454789 -38.612717 \n", + "2022-01-20 19:00:00 42349.553700 42552.820754 0.483701 -34.339846 \n", + "2022-01-20 20:00:00 42355.692164 42554.524031 0.254616 -46.595619 \n", + "2022-01-20 21:00:00 42343.729997 42545.284985 0.000000 -91.504854 \n", + "\n", + "[9982 rows x 13 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# -- Indicator variable --\n", + "stochWindow = 14\n", + "willWindow = 14\n", + "\n", + "# -- Drop all columns we do not need --\n", + "for df in dfList:\n", + " # -- Drop all columns we do not need --\n", + " df.drop(columns=df.columns.difference(['open','high','low','close','volume']), inplace=True)\n", + "\n", + " # -- Indicators, you can edit every value -- \n", + " df['EMA1']=ta.trend.ema_indicator(close=df['close'], window=7)\n", + " df['EMA2']=ta.trend.ema_indicator(close=df['close'], window=30)\n", + " df['EMA3']=ta.trend.ema_indicator(close=df['close'], window=50)\n", + " df['EMA4']=ta.trend.ema_indicator(close=df['close'], window=100)\n", + " df['EMA5']=ta.trend.ema_indicator(close=df['close'], window=121)\n", + " df['EMA6']=ta.trend.ema_indicator(close=df['close'], window=200)\n", + "\n", + " df['STOCH_RSI'] = ta.momentum.stochrsi(close=df['close'], window=stochWindow, smooth1=3, smooth2=3)\n", + " df['WillR'] = ta.momentum.williams_r(high=df['high'], low=df['low'], close=df['close'], lbp=willWindow)\n", + "\n", + "print(\"Indicators loaded 100%\")\n", + "dfList[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Final wallet 260300.9763937393\n" + ] + } + ], + "source": [ + "dfTestList = []\n", + "for df in dfList:\n", + " dfTestList.append(df.loc['2021-01-01':])\n", + "\n", + "# -- Starting value --\n", + "startingBalance = 1000\n", + "makerFee = 0\n", + "takerFee = 0.0007\n", + "\n", + "# -- Rules --\n", + "StopLossActivation = False\n", + "takeProfitActivation = False\n", + "showLog = False\n", + "\n", + "# -- Hyper parameters --\n", + "stochOverBought = 0.8\n", + "stochOverSold = 0.2\n", + "SlPct = 0.015\n", + "TpPct = 0.15\n", + "willOverSold = -85\n", + "willOverBought = -10\n", + "maxPositions = 5\n", + "\n", + "# -- Trade Functions --\n", + "\n", + "# -- Condition to BUY market --\n", + "def buyCondition(row, previousRow=None):\n", + " if (\n", + " row['EMA1'] > row['EMA2']\n", + " and row['EMA2'] > row['EMA3']\n", + " and row['EMA3'] > row['EMA4']\n", + " and row['EMA4'] > row['EMA5']\n", + " and row['EMA5'] > row['EMA6']\n", + " #and (row['STOCH_RSI']<0.82 or row['WillR'] < willOverSold)\n", + " ):\n", + " return True\n", + " else:\n", + " return False\n", + "\n", + "# -- Condition to SELL market --\n", + "def sellCondition(row, previousRow=None):\n", + " if row['EMA2'] > row['EMA1'] and (row['STOCH_RSI']>0.2 or row['WillR'] > willOverBought):\n", + " return True\n", + " else:\n", + " return False\n", + " \n", + "\n", + "# -- Value initialisation --\n", + "usd = startingBalance\n", + "wallet = startingBalance\n", + "stopLoss = [0] * len(pairList)\n", + "takeProfit = [5000000] * len(pairList)\n", + "walletCoinArray = [0] * len(pairList)\n", + "walletUsdArray = [0] * len(pairList)\n", + "activePositions = 0\n", + "lastIndex = dfTestList[0].index.values[1]\n", + "\n", + "# -- Definition of dfTrades, that will be the dataset to do your trades analyses --\n", + "dfTrades = None\n", + "dfTrades = pd.DataFrame(columns=['date', 'symbol','position', 'reason',\n", + " 'price', 'frais', 'fiat', 'coins', 'wallet'])\n", + "\n", + "# # -- Iteration on all your price dataset (df) --\n", + "for index, row in dfTestList[0].iterrows():\n", + " # -- Check if you have one coin in your wallet --\n", + " if (walletCoinArray.count(0) == len(walletCoinArray)) == False:\n", + " # -- Iteration on all coin (upgrade possible: only check coin in your wallet) --\n", + " for i in range(0,len(dfTestList)):\n", + " # -- Check if you have more than 0 coin --\n", + " if walletCoinArray[i] != 0:\n", + " try:\n", + " actualRow = dfTestList[i].loc[index]\n", + " previousRow = dfTestList[i].loc[lastIndex]\n", + " # -- Stop Loss --\n", + " if sellCondition(actualRow,previousRow):\n", + " sellPrice = actualRow['close']\n", + " usd = usd + walletCoinArray[i] * sellPrice\n", + " fee = takerFee * walletCoinArray[i] * sellPrice\n", + " usd = usd - fee\n", + " # -- Set coin and equivalent usd to 0 after sold position --\n", + " walletCoinArray[i] = 0\n", + " walletUsdArray[i] = 0\n", + " activePositions -= 1\n", + "\n", + " # -- LOG --\n", + " if showLog:\n", + " print(\"Sell\", pairList[i],\"at\", sellPrice, '$ the', index)\n", + "\n", + " # -- Add the trade to DfTrades to analyse it later --\n", + " myrow = {\n", + " 'date': index,\n", + " 'symbol': pairList[i],\n", + " 'position': \"Sell\",\n", + " 'reason': 'Sell Market Order',\n", + " 'price': sellPrice,\n", + " 'frais': fee,\n", + " 'fiat': usd,\n", + " 'coins': 0,\n", + " 'wallet': sum(walletUsdArray) + usd\n", + " }\n", + " dfTrades = dfTrades.append(myrow, ignore_index=True)\n", + " except:\n", + " pass\n", + " # -- Buy market order --\n", + " # -- Check if you can open a new position --\n", + " if activePositions < maxPositions:\n", + " # -- Check buy condition for each coin of list --\n", + " for i in range(0,len(dfTestList)):\n", + " try:\n", + " actualRow = dfTestList[i].loc[index]\n", + " previousRow = dfTestList[i].loc[lastIndex]\n", + " # -- Buy condition --\n", + " if buyCondition(actualRow, previousRow) and activePositions < maxPositions and walletCoinArray[i]==0 :\n", + " buyPrice = actualRow['close']\n", + " # -- Define size of the position --\n", + " usdMultiplier = 1/(maxPositions-activePositions)\n", + " fee = takerFee * usd * usdMultiplier\n", + " usd = usd - fee\n", + " coin = (usd * usdMultiplier) / buyPrice\n", + " usd = usd - (usd * usdMultiplier)\n", + " # -- Set coin and equivalent usd to size of position after open position --\n", + " walletCoinArray[i] = coin\n", + " walletUsdArray[i] = coin * actualRow['close']\n", + " activePositions += 1\n", + " # -- Create a Stop Loss --\n", + " if StopLossActivation:\n", + " stopLoss[i] = buyPrice - SlPct * buyPrice\n", + " # -- Create a Take Profit --\n", + " if takeProfitActivation:\n", + " takeProfit[i] = buyPrice + TpPct * buyPrice\n", + "\n", + " # -- LOG --\n", + " if showLog:\n", + " print(\"Buy\", pairList[i],\"at\", buyPrice, '$ the', index)\n", + "\n", + " # -- Add the trade to dfTrades to analyse it later --\n", + " myrow = {\n", + " 'date': index,\n", + " 'symbol': pairList[i],\n", + " 'position': \"Buy\",\n", + " 'reason': 'Buy Market Order',\n", + " 'price': buyPrice,\n", + " 'frais': fee,\n", + " 'fiat': usd,\n", + " 'coins': coin,\n", + " 'wallet': sum(walletUsdArray) + usd\n", + " }\n", + " dfTrades = dfTrades.append(myrow, ignore_index=True)\n", + " except:\n", + " pass\n", + "\n", + " # -- Keep last index to define last row -- \n", + " lastIndex = index\n", + "\n", + "print(\"Final wallet\", sum(walletUsdArray) + usd)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Trading Bot on : 29 coins | Timeframe : 1h\n", + "Period : [2021-01-01 00:00:00] -> [2022-01-20 21:00:00]\n", + "Starting balance : 999.86 $\n", + "\n", + "----- General Informations -----\n", + "Final balance : 260300.98 $\n", + "Performance vs US Dollar : 25933.74 %\n", + "Bitcoin Buy and Hold Performence : 43.26 %\n", + "Performance vs Buy and Hold : 18072.84 %\n", + "Best trade : +98.52 %, the 2021-03-14 03:00:00\n", + "Worst trade : -5.49 %, the 2021-04-18 05:00:00\n", + "Worst drawDown : - 33.21 %\n", + "Total fees : 23418.54 $\n", + "\n", + "----- Trades Informations -----\n", + "Total trades on period : 957\n", + "Number of positive trades : 377\n", + "Number of negative trades : 580\n", + "Trades win rate ratio : 39.39 %\n", + "Average trades performance : 0.69 %\n", + "Average positive trades : 3.05 %\n", + "Average negative trades : -0.84 %\n", + "\n", + "----- Trades Reasons -----\n", + "Buy Market Order 959\n", + "Sell Market Order 957\n", + "Name: reason, dtype: int64\n", + "\n", + "----- Pair Result -----\n", + "-----------------------------------------------------------------------------------------------\n", + "Trades Pair Sum-result Mean-trade Worst-trade Best-trade Win-rate\n", + "-----------------------------------------------------------------------------------------------\n", + "57 BTC/USD 3.53 % 0.06 % -2.04 % 1.88 % 42.11 %\n", + "70 ETH/USD 6.82 % 0.1 % -3.27 % 8.84 % 37.14 %\n", + "62 BNB/USD 29.95 % 0.48 % -2.96 % 18.93 % 40.32 %\n", + "47 LTC/USD -1.9 % -0.04 % -2.2 % 4.8 % 34.04 %\n", + "29 DOGE/USD 77.51 % 2.67 % -3.39 % 38.72 % 41.38 %\n", + "33 XRP/USD 32.54 % 0.99 % -1.47 % 13.65 % 42.42 %\n", + "64 SOL/USD 44.64 % 0.7 % -3.55 % 9.86 % 46.88 %\n", + "17 SHIB/USD 49.28 % 2.9 % -1.99 % 32.68 % 23.53 %\n", + "42 LINK/USD -3.5 % -0.08 % -1.81 % 3.27 % 33.33 %\n", + "47 UNI/USD 6.77 % 0.14 % -5.37 % 11.92 % 34.04 %\n", + "48 MATIC/USD 57.76 % 1.2 % -1.74 % 17.75 % 50.0 %\n", + "36 AXS/USD 19.5 % 0.54 % -5.17 % 16.37 % 25.0 %\n", + "33 CRO/USD 13.11 % 0.4 % -2.26 % 12.12 % 36.36 %\n", + "36 FTT/USD 15.64 % 0.43 % -2.26 % 9.99 % 41.67 %\n", + "30 TRX/USD 13.65 % 0.46 % -2.46 % 14.82 % 36.67 %\n", + "16 BCH/USD -4.46 % -0.28 % -4.06 % 2.48 % 37.5 %\n", + "29 FTM/USD -1.92 % -0.07 % -5.49 % 5.06 % 41.38 %\n", + "20 GRT/USD 54.3 % 2.72 % -1.83 % 54.5 % 35.0 %\n", + "29 AAVE/USD 1.25 % 0.04 % -2.72 % 10.02 % 31.03 %\n", + "25 OMG/USD 7.58 % 0.3 % -4.76 % 13.5 % 36.0 %\n", + "15 LRC/USD 33.44 % 2.23 % -4.48 % 30.5 % 40.0 %\n", + "24 SUSHI/USD 13.08 % 0.55 % -5.47 % 10.32 % 50.0 %\n", + "11 MANA/USD 2.56 % 0.23 % -1.73 % 3.5 % 27.27 %\n", + "18 SRM/USD 9.26 % 0.51 % -1.59 % 2.74 % 55.56 %\n", + "29 RUNE/USD -1.49 % -0.05 % -4.29 % 6.12 % 34.48 %\n", + "20 SAND/USD 46.85 % 2.34 % -2.09 % 12.02 % 65.0 %\n", + "29 CHZ/USD 110.0 % 3.79 % -1.96 % 98.52 % 27.59 %\n", + "27 CRV/USD 18.45 % 0.68 % -4.27 % 8.1 % 51.85 %\n", + "14 RAY/USD 8.49 % 0.61 % -2.42 % 6.82 % 42.86 %\n" + ] + } + ], + "source": [ + "BTobject = Backtesting()\n", + "newDf = BTobject.multi_spot_backtest_analys(dfTrades=dfTrades, dfTest=dfTestList[0], pairList=pairList, timeframe=timeframe)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "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", + " \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", + "
datesymbolpositionreasonpricefraisfiatcoinswalletresultatresultat%tradeIswalletAthdrawDowndrawDownPct
date
2022-01-18 21:00:002022-01-18 21:00:00UNI/USDSellSell Market Order16.11000035.025218264233.4606720.000000264233.460672-3557.114199-1.328319Bad361181.74745296948.2867800.268420
2022-01-18 22:00:002022-01-18 22:00:00AAVE/USDBuyBuy Market Order234.19000036.992684211357.174390225.625747264196.467987NaNNaN361181.74745296985.2794650.268522
2022-01-19 11:00:002022-01-19 11:00:00AAVE/USDSellSell Market Order217.40000034.335726260373.8759760.000000260373.875976-3822.592012-1.446875Bad361181.747452100807.8714760.279106
2022-01-19 15:00:002022-01-19 15:00:00FTT/USDBuyBuy Market Order46.10100036.452343208269.9389061129.422024260337.423633NaNNaN361181.747452100844.3238190.279207
2022-01-20 11:00:002022-01-20 11:00:00TRX/USDBuyBuy Market Order0.06973536.447239156175.118750746517.142278260300.976394NaNNaN361181.747452100880.7710580.279308
\n", + "
" + ], + "text/plain": [ + " date symbol position reason \\\n", + "date \n", + "2022-01-18 21:00:00 2022-01-18 21:00:00 UNI/USD Sell Sell Market Order \n", + "2022-01-18 22:00:00 2022-01-18 22:00:00 AAVE/USD Buy Buy Market Order \n", + "2022-01-19 11:00:00 2022-01-19 11:00:00 AAVE/USD Sell Sell Market Order \n", + "2022-01-19 15:00:00 2022-01-19 15:00:00 FTT/USD Buy Buy Market Order \n", + "2022-01-20 11:00:00 2022-01-20 11:00:00 TRX/USD Buy Buy Market Order \n", + "\n", + " price frais fiat coins \\\n", + "date \n", + "2022-01-18 21:00:00 16.110000 35.025218 264233.460672 0.000000 \n", + "2022-01-18 22:00:00 234.190000 36.992684 211357.174390 225.625747 \n", + "2022-01-19 11:00:00 217.400000 34.335726 260373.875976 0.000000 \n", + "2022-01-19 15:00:00 46.101000 36.452343 208269.938906 1129.422024 \n", + "2022-01-20 11:00:00 0.069735 36.447239 156175.118750 746517.142278 \n", + "\n", + " wallet resultat resultat% tradeIs \\\n", + "date \n", + "2022-01-18 21:00:00 264233.460672 -3557.114199 -1.328319 Bad \n", + "2022-01-18 22:00:00 264196.467987 NaN NaN \n", + "2022-01-19 11:00:00 260373.875976 -3822.592012 -1.446875 Bad \n", + "2022-01-19 15:00:00 260337.423633 NaN NaN \n", + "2022-01-20 11:00:00 260300.976394 NaN NaN \n", + "\n", + " walletAth drawDown drawDownPct \n", + "date \n", + "2022-01-18 21:00:00 361181.747452 96948.286780 0.268420 \n", + "2022-01-18 22:00:00 361181.747452 96985.279465 0.268522 \n", + "2022-01-19 11:00:00 361181.747452 100807.871476 0.279106 \n", + "2022-01-19 15:00:00 361181.747452 100844.323819 0.279207 \n", + "2022-01-20 11:00:00 361181.747452 100880.771058 0.279308 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "newDf.iloc[-5:]" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "----- 2021 Performances: 30521.71% -----\n" + ] + }, + { + "data": { + "image/png": "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lStXTocPH1a1atUkSfv377eOc8WKFdqwYYPi4uJkMpk0a9YslSpVSh4eHnr11Vd18uRJffnllwoJCdHKlStlb28vd3d3DRs2TJK0e/duffnll4qOjlafPn3Uvn37x1b7w0hOTlZwcLC++OILdejQQRcvXlSJEiXk4eEhDw8Pff/995KkKVOmqEKFCvLx8VHevHn166+/atasWWrZsqVOnz6dJbVn5FEew6ioKM2ePVurVq2SJK1bt04//vijxo8fn2XjuB8fHx/1799fVatWVXh4uLp27aqdO3eme36JiYnRhAkT9OuvvyolJUXvvPOOmjVrltXDSFd647tt1qxZSk1N1fvvvy9JGjFihGrXri1PT88sqfd+v0/Lli1TsWLF9N1332nevHlavny5zpw5I19fX6WkpKhy5crau3evtm3bJl9fX1WpUkWtW7eWdGsG8vTp0zp48KACAgIkSXnz5tXMmTO1YMECSVLbtm21evXqB671r7/+UlJSkuLj4yXd+n3x9/eXk5OTjh8/rqlTpyo+Pl758+fX+PHjVbx4cfn4+OjFF1/U8ePHlZCQoJEjR6pQoULW35ciRYqocePG93yOBQUFaffu3YqKitIff/yhbt26KSIiQt9++63y5ctnnaVOSEjQoEGDdO7cOZUoUUKTJ09W3rx571vTneek8uXL33fchw4dUkREhJYtWyaTySRJqlChgt59910tWLBAefLk0ZgxYxQfH6+8efNqxowZmjRpkqKiotSvXz/Nnz9fa9eu1WeffSaTyaSKFSvKz89PzzzzjCTJz89Px48fV/78+TVlyhQVKVJEFy5c0Lhx43Tt2jXlyJFDfn5+qlChgnx9fXXt2jVduHBBw4YNe6hZcldXV9WoUUPTpk3TxIkT09y2aNEiBQcHy97eXjVr1tSwYcM0ffp0ubq6qmfPnpKkgQMHqlmzZnrjjTfu+Xo+d+5cRURE6PTp04qOjtZ7772nb7/9VseOHVO5cuUUGBhofR717NlTUVFRevXVVzV27FiZzWbt3btXc+bMUXJysooVK6aJEycqf/78d71GFihQIN0xmkwmDRgwQDVr1tSpU6e0d+9ebdq0SSkpKapVq5aGDRsmk8mkpUuX3vU6m15OeRLGJRmwfeK2FStWaNKkSVq3bp0mT55sPYFJ0h9//KEvv/xSCxcu1PTp0+97nN27d6t8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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "ename": "ValueError", + "evalue": "Could not interpret input 'date'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/p8/9tmcbqn10_l75b9_nsdx04lm0000gn/T/ipykernel_8780/510066866.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mBTobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mplot_bar_by_month\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdfTrades\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdfTrades\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m~/PycharmProjects/cBot-Project/backtest/../utilities/backtesting.py\u001b[0m in \u001b[0;36mplot_bar_by_month\u001b[0;34m(self, dfTrades)\u001b[0m\n\u001b[1;32m 352\u001b[0m \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 353\u001b[0m \u001b[0mmyResult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 354\u001b[0;31m \u001b[0mg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbarplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mdfTemp\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'date'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'result'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcustom_palette\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 355\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrow\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mdfTemp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 356\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresult\u001b[0m \u001b[0;34m>=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.pyenv/versions/3.10.0/envs/cbot/lib/python3.10/site-packages/seaborn/_decorators.py\u001b[0m in \u001b[0;36minner_f\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 44\u001b[0m )\n\u001b[1;32m 45\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mupdate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m{\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0marg\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msig\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m}\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 46\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 47\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0minner_f\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 48\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.pyenv/versions/3.10.0/envs/cbot/lib/python3.10/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mbarplot\u001b[0;34m(x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge, ax, **kwargs)\u001b[0m\n\u001b[1;32m 3180\u001b[0m ):\n\u001b[1;32m 3181\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3182\u001b[0;31m plotter = _BarPlotter(x, y, hue, data, order, hue_order,\n\u001b[0m\u001b[1;32m 3183\u001b[0m \u001b[0mestimator\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mci\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mn_boot\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0munits\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mseed\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3184\u001b[0m \u001b[0morient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaturation\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.pyenv/versions/3.10.0/envs/cbot/lib/python3.10/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge)\u001b[0m\n\u001b[1;32m 1582\u001b[0m errwidth, capsize, dodge):\n\u001b[1;32m 1583\u001b[0m \u001b[0;34m\"\"\"Initialize the plotter.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1584\u001b[0;31m self.establish_variables(x, y, hue, data, orient,\n\u001b[0m\u001b[1;32m 1585\u001b[0m order, hue_order, units)\n\u001b[1;32m 1586\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mestablish_colors\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcolor\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpalette\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msaturation\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.pyenv/versions/3.10.0/envs/cbot/lib/python3.10/site-packages/seaborn/categorical.py\u001b[0m in \u001b[0;36mestablish_variables\u001b[0;34m(self, x, y, hue, data, orient, order, hue_order, units)\u001b[0m\n\u001b[1;32m 151\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[0merr\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"Could not interpret input '{}'\"\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvar\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 153\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0merr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 154\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[0;31m# Figure out the plotting orientation\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: Could not interpret input 'date'" + ] + } + ], + "source": [ + "BTobject.plot_bar_by_month(dfTrades=dfTrades)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/p8/9tmcbqn10_l75b9_nsdx04lm0000gn/T/ipykernel_8780/3056460112.py:1: FutureWarning: Indexing a DataFrame with a datetimelike index using a single string to slice the rows, like `frame[string]`, is deprecated and will be removed in a future version. Use `frame.loc[string]` instead.\n", + " BTobject.plot_wallet_evolution(dfTrades=newDf['2021'])\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "----- Plot -----\n" + ] + }, + { + "data": { + "image/png": "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7NgxJSUl6WMf+5gkKRQKyWLh3/QQndatW6fa2lpNmDBBgwYNinQ5QFj77/e33npLy5cv16OPPiq73R7psoDT4rN9G/7aiQDTNLVz5069/fbbOnr0qN54441Il4R+7MCBA3I6nfr973+v//iP/5Db7VZycnKkywI62LJli9LS0vTwww9r7969WrJkidasWSOJ7hBEh9bWVj388MMaPny4fvOb3+jGG2/U/v37JYlwCVHJ4/HoP/7jP/T0009rz549+u53v6tXXnlFUv/+13dEj/bf7y+//LK2bt2q1157TRLjE9GFz/Yd8RdPH1m9erV27typQCAgwzBUUVGhm266SZdddpm2b9+uQ4cOSeIHJvpG+3iUpLq6OqWnp0uSVqxYoddff13Lli1TWVmZpLZ/eQciYfXq1dqxY4ckaciQIWptbdUPfvADbdmyRVarVc8++6yeeeYZSYxTRE77OE1MTNTPf/5z3XnnnZKkDz/8UMXFxZIYn4hO5eXlMk1TL774or71rW/p1ltv1YMPPqi6ujqCe0TUzp07VVVVJUk6fPiwWlpaNGfOHK1evVqVlZUyDIPPTIgoPtufGVPkelllZaXuvvtuJSYmKj09XcXFxfrKV76iwYMHa/LkyaqoqNBLL72kf/7zn5o3bx6/0NGrThyPaWlpGjJkiL7yla/oqquuUjAYlGEYevrpp1VfX6/77rtPl19+ubKysiJdNvqZ043Tb3zjGyouLlZdXZ0eeughSdJ1112nz33uc7rtttvCISnQV9rHaUJCgjIyMlRcXKwvfOELysnJkSQVFhbq7bff1pw5c+hgQtRYvXq18vPzNWbMGFVXV2vjxo3hfcOGDZPT6dSvf/1r3XvvvUztRERUVFTogQce0Je//GVNnz5dLS0tuu666zRmzBgdPXpUy5cv1x133MFnJkQEn+3Pjd8avWzfvn2aPHmyfv3rX+uee+6Rx+PRj370I40YMUKpqakaPXq0Ro0apb1792rLli2S+mfSib5x4nj81re+JZ/Pp4cffliSZLVaNW/ePF133XW6+eab9bGPfUx///vfI1wx+qOTx2lra6sWL16sb3/72/rSl74kSfL5fBo+fLiuvPLKDh+QgL7SPk6ff/553XPPPfL5fHr88cfD+8eOHauMjAw1NDRErkjguMrKSn32s5/VL37xCz377LP6r//6L40aNUrD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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "BTobject.plot_wallet_evolution(dfTrades=newDf['2021'])" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "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", + " \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", + "
datesymbolpositionreasonpricefraisfiatcoinswallet
19062022-01-17 18:00:00UNI/USDSellSell Market Order16.64700033.88686698373.3826170.000000273925.576721
19072022-01-17 22:00:00MATIC/USDSellSell Market Order2.21808937.638832152105.5038920.000000269566.724390
19082022-01-18 06:00:00LTC/USDSellSell Market Order147.74000040.623425210098.3442220.000000269427.898949
19092022-01-18 06:00:00TRX/USDSellSell Market Order0.06946240.439116267828.0708000.000000267828.070800
19102022-01-18 07:00:00UNI/USDBuyBuy Market Order17.24400037.495930214232.4598963105.898572267790.574871
19112022-01-18 21:00:00UNI/USDSellSell Market Order16.11000035.025218264233.4606720.000000264233.460672
19122022-01-18 22:00:00AAVE/USDBuyBuy Market Order234.19000036.992684211357.174390225.625747264196.467987
19132022-01-19 11:00:00AAVE/USDSellSell Market Order217.40000034.335726260373.8759760.000000260373.875976
19142022-01-19 15:00:00FTT/USDBuyBuy Market Order46.10100036.452343208269.9389061129.422024260337.423633
19152022-01-20 11:00:00TRX/USDBuyBuy Market Order0.06973536.447239156175.118750746517.142278260300.976394
\n", + "
" + ], + "text/plain": [ + " date symbol position reason price \\\n", + "1906 2022-01-17 18:00:00 UNI/USD Sell Sell Market Order 16.647000 \n", + "1907 2022-01-17 22:00:00 MATIC/USD Sell Sell Market Order 2.218089 \n", + "1908 2022-01-18 06:00:00 LTC/USD Sell Sell Market Order 147.740000 \n", + "1909 2022-01-18 06:00:00 TRX/USD Sell Sell Market Order 0.069462 \n", + "1910 2022-01-18 07:00:00 UNI/USD Buy Buy Market Order 17.244000 \n", + "1911 2022-01-18 21:00:00 UNI/USD Sell Sell Market Order 16.110000 \n", + "1912 2022-01-18 22:00:00 AAVE/USD Buy Buy Market Order 234.190000 \n", + "1913 2022-01-19 11:00:00 AAVE/USD Sell Sell Market Order 217.400000 \n", + "1914 2022-01-19 15:00:00 FTT/USD Buy Buy Market Order 46.101000 \n", + "1915 2022-01-20 11:00:00 TRX/USD Buy Buy Market Order 0.069735 \n", + "\n", + " frais fiat coins wallet \n", + "1906 33.886866 98373.382617 0.000000 273925.576721 \n", + "1907 37.638832 152105.503892 0.000000 269566.724390 \n", + "1908 40.623425 210098.344222 0.000000 269427.898949 \n", + "1909 40.439116 267828.070800 0.000000 267828.070800 \n", + "1910 37.495930 214232.459896 3105.898572 267790.574871 \n", + "1911 35.025218 264233.460672 0.000000 264233.460672 \n", + "1912 36.992684 211357.174390 225.625747 264196.467987 \n", + "1913 34.335726 260373.875976 0.000000 260373.875976 \n", + "1914 36.452343 208269.938906 1129.422024 260337.423633 \n", + "1915 36.447239 156175.118750 746517.142278 260300.976394 " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dfTrades.iloc[-10:]" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "b99de858d01b8bcc47614726909171e040cc7bf90a13719c5d6ce860f919fb18" + }, + "kernelspec": { + "display_name": "Python 3.9.0 64-bit ('.venv': venv)", + "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.0" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/config/config.json.dist b/config/config.json.dist new file mode 100644 index 0000000..6235e4b --- /dev/null +++ b/config/config.json.dist @@ -0,0 +1,30 @@ +{ + "strategies": { + "alligator": { + "apiKey": "", + "secret": "", + "subAccountName": "", + "messaging":{ + "username": "", + "webhook":"", + "webhookDebug":"" + }, + "options":{ + "tpEnabled": false + } + }, + "will": { + "apiKey": "", + "secret": "", + "subAccountName": "", + "messaging":{ + "username": "", + "webhook":"", + "webhookDebug":"" + }, + "options":{ + "tpEnabled": false + } + } + } +} \ No newline at end of file diff --git a/database/Binance/12h/AAVEUSDT.p b/database/Binance/12h/AAVEUSDT.p deleted file mode 100644 index b4a118e..0000000 Binary files a/database/Binance/12h/AAVEUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ADAUSDT.p b/database/Binance/12h/ADAUSDT.p deleted file mode 100644 index fce9017..0000000 Binary files a/database/Binance/12h/ADAUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ALGOUSDT.p b/database/Binance/12h/ALGOUSDT.p deleted file mode 100644 index 5af4030..0000000 Binary files a/database/Binance/12h/ALGOUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ATOMUSDT.p b/database/Binance/12h/ATOMUSDT.p deleted file mode 100644 index c9b7017..0000000 Binary files a/database/Binance/12h/ATOMUSDT.p and /dev/null differ diff --git a/database/Binance/12h/AVAXUSDT.p b/database/Binance/12h/AVAXUSDT.p deleted file mode 100644 index 5c87693..0000000 Binary files a/database/Binance/12h/AVAXUSDT.p and /dev/null differ diff --git a/database/Binance/12h/BATUSDT.p b/database/Binance/12h/BATUSDT.p deleted file mode 100644 index ab219a1..0000000 Binary files a/database/Binance/12h/BATUSDT.p and /dev/null differ diff --git a/database/Binance/12h/BCHUSDT.p b/database/Binance/12h/BCHUSDT.p deleted file mode 100644 index 3bb7942..0000000 Binary files a/database/Binance/12h/BCHUSDT.p and /dev/null differ diff --git a/database/Binance/12h/BNBUSDT.p b/database/Binance/12h/BNBUSDT.p deleted file mode 100644 index 61abe3c..0000000 Binary files a/database/Binance/12h/BNBUSDT.p and /dev/null differ diff --git a/database/Binance/12h/BTCUSDT.p b/database/Binance/12h/BTCUSDT.p deleted file mode 100644 index f70d3fe..0000000 Binary files a/database/Binance/12h/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/12h/DASHUSDT.p b/database/Binance/12h/DASHUSDT.p deleted file mode 100644 index 5886767..0000000 Binary files a/database/Binance/12h/DASHUSDT.p and /dev/null differ diff --git a/database/Binance/12h/DOGEUSDT.p b/database/Binance/12h/DOGEUSDT.p deleted file mode 100644 index c30f607..0000000 Binary files a/database/Binance/12h/DOGEUSDT.p and /dev/null differ diff --git a/database/Binance/12h/DOTUSDT.p b/database/Binance/12h/DOTUSDT.p deleted file mode 100644 index bc499e3..0000000 Binary files a/database/Binance/12h/DOTUSDT.p and /dev/null differ diff --git a/database/Binance/12h/EGLDUSDT.p b/database/Binance/12h/EGLDUSDT.p deleted file mode 100644 index add3ee5..0000000 Binary files a/database/Binance/12h/EGLDUSDT.p and /dev/null differ diff --git a/database/Binance/12h/EOSUSDT.p b/database/Binance/12h/EOSUSDT.p deleted file mode 100644 index 09544ca..0000000 Binary files a/database/Binance/12h/EOSUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ETCUSDT.p b/database/Binance/12h/ETCUSDT.p deleted file mode 100644 index 2e90c2d..0000000 Binary files a/database/Binance/12h/ETCUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ETHUSDT.p b/database/Binance/12h/ETHUSDT.p deleted file mode 100644 index a975695..0000000 Binary files a/database/Binance/12h/ETHUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ICXUSDT.p b/database/Binance/12h/ICXUSDT.p deleted file mode 100644 index b1b6741..0000000 Binary files a/database/Binance/12h/ICXUSDT.p and /dev/null differ diff --git a/database/Binance/12h/IOTAUSDT.p b/database/Binance/12h/IOTAUSDT.p deleted file mode 100644 index ab30eef..0000000 Binary files a/database/Binance/12h/IOTAUSDT.p and /dev/null differ diff --git a/database/Binance/12h/LINKUSDT.p b/database/Binance/12h/LINKUSDT.p deleted file mode 100644 index 4e47d2f..0000000 Binary files a/database/Binance/12h/LINKUSDT.p and /dev/null differ diff --git a/database/Binance/12h/LTCUSDT.p b/database/Binance/12h/LTCUSDT.p deleted file mode 100644 index 1e90742..0000000 Binary files a/database/Binance/12h/LTCUSDT.p and /dev/null differ diff --git a/database/Binance/12h/LUNAUSDT.p b/database/Binance/12h/LUNAUSDT.p deleted file mode 100644 index 4b58c56..0000000 Binary files a/database/Binance/12h/LUNAUSDT.p and /dev/null differ diff --git a/database/Binance/12h/NEOUSDT.p b/database/Binance/12h/NEOUSDT.p deleted file mode 100644 index 766f74d..0000000 Binary files a/database/Binance/12h/NEOUSDT.p and /dev/null differ diff --git a/database/Binance/12h/OMGUSDT.p b/database/Binance/12h/OMGUSDT.p deleted file mode 100644 index fd50241..0000000 Binary files a/database/Binance/12h/OMGUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ONTUSDT.p b/database/Binance/12h/ONTUSDT.p deleted file mode 100644 index e993e49..0000000 Binary files a/database/Binance/12h/ONTUSDT.p and /dev/null differ diff --git a/database/Binance/12h/QTUMUSDT.p b/database/Binance/12h/QTUMUSDT.p deleted file mode 100644 index 5ea5922..0000000 Binary files a/database/Binance/12h/QTUMUSDT.p and /dev/null differ diff --git a/database/Binance/12h/SOLUSDT.p b/database/Binance/12h/SOLUSDT.p deleted file mode 100644 index 0b6e699..0000000 Binary files a/database/Binance/12h/SOLUSDT.p and /dev/null differ diff --git a/database/Binance/12h/TRXUSDT.p b/database/Binance/12h/TRXUSDT.p deleted file mode 100644 index e4758f8..0000000 Binary files a/database/Binance/12h/TRXUSDT.p and /dev/null differ diff --git a/database/Binance/12h/UNIUSDT.p b/database/Binance/12h/UNIUSDT.p deleted file mode 100644 index 6b59199..0000000 Binary files a/database/Binance/12h/UNIUSDT.p and /dev/null differ diff --git a/database/Binance/12h/VETUSDT.p b/database/Binance/12h/VETUSDT.p deleted file mode 100644 index 039be75..0000000 Binary files a/database/Binance/12h/VETUSDT.p and /dev/null differ diff --git a/database/Binance/12h/XLMUSDT.p b/database/Binance/12h/XLMUSDT.p deleted file mode 100644 index b5b5ae6..0000000 Binary files a/database/Binance/12h/XLMUSDT.p and /dev/null differ diff --git a/database/Binance/12h/XMRUSDT.p b/database/Binance/12h/XMRUSDT.p deleted file mode 100644 index 49bfa2c..0000000 Binary files a/database/Binance/12h/XMRUSDT.p and /dev/null differ diff --git a/database/Binance/12h/XRPUSDT.p b/database/Binance/12h/XRPUSDT.p deleted file mode 100644 index 2edcef9..0000000 Binary files a/database/Binance/12h/XRPUSDT.p and /dev/null differ diff --git a/database/Binance/12h/XTZUSDT.p b/database/Binance/12h/XTZUSDT.p deleted file mode 100644 index d29b932..0000000 Binary files a/database/Binance/12h/XTZUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ZECUSDT.p b/database/Binance/12h/ZECUSDT.p deleted file mode 100644 index f671c34..0000000 Binary files a/database/Binance/12h/ZECUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ZILUSDT.p b/database/Binance/12h/ZILUSDT.p deleted file mode 100644 index 699133c..0000000 Binary files a/database/Binance/12h/ZILUSDT.p and /dev/null differ diff --git a/database/Binance/12h/ZRXUSDT.p b/database/Binance/12h/ZRXUSDT.p deleted file mode 100644 index 1cb0e8c..0000000 Binary files a/database/Binance/12h/ZRXUSDT.p and /dev/null differ diff --git a/database/Binance/15m/BTCUSDT.p b/database/Binance/15m/BTCUSDT.p deleted file mode 100644 index 643e63d..0000000 Binary files a/database/Binance/15m/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/1d/AAVEUSDT.p b/database/Binance/1d/AAVEUSDT.p deleted file mode 100644 index 572ccae..0000000 Binary files a/database/Binance/1d/AAVEUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ADAUSDT.p b/database/Binance/1d/ADAUSDT.p deleted file mode 100644 index 3ed83d3..0000000 Binary files a/database/Binance/1d/ADAUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ALGOUSDT.p b/database/Binance/1d/ALGOUSDT.p deleted file mode 100644 index 5070bf9..0000000 Binary files a/database/Binance/1d/ALGOUSDT.p and /dev/null differ diff --git a/database/Binance/1d/AMPUSDT.p b/database/Binance/1d/AMPUSDT.p deleted file mode 100644 index a393af3..0000000 Binary files a/database/Binance/1d/AMPUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ATOMUSDT.p b/database/Binance/1d/ATOMUSDT.p deleted file mode 100644 index b6409d7..0000000 Binary files a/database/Binance/1d/ATOMUSDT.p and /dev/null differ diff --git a/database/Binance/1d/AVAXUSDT.p b/database/Binance/1d/AVAXUSDT.p deleted file mode 100644 index b41a0ed..0000000 Binary files a/database/Binance/1d/AVAXUSDT.p and /dev/null differ diff --git a/database/Binance/1d/BATUSDT.p b/database/Binance/1d/BATUSDT.p deleted file mode 100644 index c943dc4..0000000 Binary files a/database/Binance/1d/BATUSDT.p and /dev/null differ diff --git a/database/Binance/1d/BCHUSDT.p b/database/Binance/1d/BCHUSDT.p deleted file mode 100644 index 10cba66..0000000 Binary files a/database/Binance/1d/BCHUSDT.p and /dev/null differ diff --git a/database/Binance/1d/BNBUSDT.p b/database/Binance/1d/BNBUSDT.p deleted file mode 100644 index 38a0818..0000000 Binary files a/database/Binance/1d/BNBUSDT.p and /dev/null differ diff --git a/database/Binance/1d/BTCUSDT.p b/database/Binance/1d/BTCUSDT.p deleted file mode 100644 index ce994a8..0000000 Binary files a/database/Binance/1d/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/1d/BTTUSDT.p b/database/Binance/1d/BTTUSDT.p deleted file mode 100644 index e351cd2..0000000 Binary files a/database/Binance/1d/BTTUSDT.p and /dev/null differ diff --git a/database/Binance/1d/CAKEUSDT.p b/database/Binance/1d/CAKEUSDT.p deleted file mode 100644 index 5fc7b9c..0000000 Binary files a/database/Binance/1d/CAKEUSDT.p and /dev/null differ diff --git a/database/Binance/1d/CHZUSDT.p b/database/Binance/1d/CHZUSDT.p deleted file mode 100644 index fcfdf8f..0000000 Binary files a/database/Binance/1d/CHZUSDT.p and /dev/null differ diff --git a/database/Binance/1d/COMPUSDT.p b/database/Binance/1d/COMPUSDT.p deleted file mode 100644 index 99a646e..0000000 Binary files a/database/Binance/1d/COMPUSDT.p and /dev/null differ diff --git a/database/Binance/1d/DASHUSDT.p b/database/Binance/1d/DASHUSDT.p deleted file mode 100644 index 68d4d6d..0000000 Binary files a/database/Binance/1d/DASHUSDT.p and /dev/null differ diff --git a/database/Binance/1d/DCRUSDT.p b/database/Binance/1d/DCRUSDT.p deleted file mode 100644 index e22f428..0000000 Binary files a/database/Binance/1d/DCRUSDT.p and /dev/null differ diff --git a/database/Binance/1d/DGBUSDT.p b/database/Binance/1d/DGBUSDT.p deleted file mode 100644 index a3e5bfb..0000000 Binary files a/database/Binance/1d/DGBUSDT.p and /dev/null differ diff --git a/database/Binance/1d/DOGEUSDT.p b/database/Binance/1d/DOGEUSDT.p deleted file mode 100644 index db3f275..0000000 Binary files a/database/Binance/1d/DOGEUSDT.p and /dev/null differ diff --git a/database/Binance/1d/DOTUSDT.p b/database/Binance/1d/DOTUSDT.p deleted file mode 100644 index 42775c3..0000000 Binary files a/database/Binance/1d/DOTUSDT.p and /dev/null differ diff --git a/database/Binance/1d/EGLDUSDT.p b/database/Binance/1d/EGLDUSDT.p deleted file mode 100644 index aa1db34..0000000 Binary files a/database/Binance/1d/EGLDUSDT.p and /dev/null differ diff --git a/database/Binance/1d/EOSUSDT.p b/database/Binance/1d/EOSUSDT.p deleted file mode 100644 index 5769198..0000000 Binary files a/database/Binance/1d/EOSUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ETCUSDT.p b/database/Binance/1d/ETCUSDT.p deleted file mode 100644 index 2e302cf..0000000 Binary files a/database/Binance/1d/ETCUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ETHUSDT.p b/database/Binance/1d/ETHUSDT.p deleted file mode 100644 index c8f1fad..0000000 Binary files a/database/Binance/1d/ETHUSDT.p and /dev/null differ diff --git a/database/Binance/1d/FILUSDT.p b/database/Binance/1d/FILUSDT.p deleted file mode 100644 index 450ccfe..0000000 Binary files a/database/Binance/1d/FILUSDT.p and /dev/null differ diff --git a/database/Binance/1d/FTTUSDT.p b/database/Binance/1d/FTTUSDT.p deleted file mode 100644 index fd87bf1..0000000 Binary files a/database/Binance/1d/FTTUSDT.p and /dev/null differ diff --git a/database/Binance/1d/GRTUSDT.p b/database/Binance/1d/GRTUSDT.p deleted file mode 100644 index 2c0da6e..0000000 Binary files a/database/Binance/1d/GRTUSDT.p and /dev/null differ diff --git a/database/Binance/1d/HBARUSDT.p b/database/Binance/1d/HBARUSDT.p deleted file mode 100644 index a21041e..0000000 Binary files a/database/Binance/1d/HBARUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ICPUSDT.p b/database/Binance/1d/ICPUSDT.p deleted file mode 100644 index 59649a3..0000000 Binary files a/database/Binance/1d/ICPUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ICXUSDT.p b/database/Binance/1d/ICXUSDT.p deleted file mode 100644 index aaeb692..0000000 Binary files a/database/Binance/1d/ICXUSDT.p and /dev/null differ diff --git a/database/Binance/1d/IOTAUSDT.p b/database/Binance/1d/IOTAUSDT.p deleted file mode 100644 index fda35ba..0000000 Binary files a/database/Binance/1d/IOTAUSDT.p and /dev/null differ diff --git a/database/Binance/1d/KLAYUSDT.p b/database/Binance/1d/KLAYUSDT.p deleted file mode 100644 index 0bba89c..0000000 Binary files a/database/Binance/1d/KLAYUSDT.p and /dev/null differ diff --git a/database/Binance/1d/KSMUSDT.p b/database/Binance/1d/KSMUSDT.p deleted file mode 100644 index 4c500a6..0000000 Binary files a/database/Binance/1d/KSMUSDT.p and /dev/null differ diff --git a/database/Binance/1d/LINKUSDT.p b/database/Binance/1d/LINKUSDT.p deleted file mode 100644 index a320151..0000000 Binary files a/database/Binance/1d/LINKUSDT.p and /dev/null differ diff --git a/database/Binance/1d/LRCUSDT.p b/database/Binance/1d/LRCUSDT.p deleted file mode 100644 index 39cf1a6..0000000 Binary files a/database/Binance/1d/LRCUSDT.p and /dev/null differ diff --git a/database/Binance/1d/LTCUSDT.p b/database/Binance/1d/LTCUSDT.p deleted file mode 100644 index 040390e..0000000 Binary files a/database/Binance/1d/LTCUSDT.p and /dev/null differ diff --git a/database/Binance/1d/LUNAUSDT.p b/database/Binance/1d/LUNAUSDT.p deleted file mode 100644 index da1182c..0000000 Binary files a/database/Binance/1d/LUNAUSDT.p and /dev/null differ diff --git a/database/Binance/1d/MATICUSDT.p b/database/Binance/1d/MATICUSDT.p deleted file mode 100644 index 3fef1d0..0000000 Binary files a/database/Binance/1d/MATICUSDT.p and /dev/null differ diff --git a/database/Binance/1d/MKRUSDT.p b/database/Binance/1d/MKRUSDT.p deleted file mode 100644 index 8c1883b..0000000 Binary files a/database/Binance/1d/MKRUSDT.p and /dev/null differ diff --git a/database/Binance/1d/NEARUSDT.p b/database/Binance/1d/NEARUSDT.p deleted file mode 100644 index f686dd1..0000000 Binary files a/database/Binance/1d/NEARUSDT.p and /dev/null differ diff --git a/database/Binance/1d/NEOUSDT.p b/database/Binance/1d/NEOUSDT.p deleted file mode 100644 index 86e3627..0000000 Binary files a/database/Binance/1d/NEOUSDT.p and /dev/null differ diff --git a/database/Binance/1d/OMGUSDT.p b/database/Binance/1d/OMGUSDT.p deleted file mode 100644 index add4540..0000000 Binary files a/database/Binance/1d/OMGUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ONTUSDT.p b/database/Binance/1d/ONTUSDT.p deleted file mode 100644 index 86f6837..0000000 Binary files a/database/Binance/1d/ONTUSDT.p and /dev/null differ diff --git a/database/Binance/1d/QTUMUSDT.p b/database/Binance/1d/QTUMUSDT.p deleted file mode 100644 index 2f87781..0000000 Binary files a/database/Binance/1d/QTUMUSDT.p and /dev/null differ diff --git a/database/Binance/1d/RENUSDT.p b/database/Binance/1d/RENUSDT.p deleted file mode 100644 index 8bcd4dc..0000000 Binary files a/database/Binance/1d/RENUSDT.p and /dev/null differ diff --git a/database/Binance/1d/RSRUSDT.p b/database/Binance/1d/RSRUSDT.p deleted file mode 100644 index f5f6ffc..0000000 Binary files a/database/Binance/1d/RSRUSDT.p and /dev/null differ diff --git a/database/Binance/1d/RUNEUSDT.p b/database/Binance/1d/RUNEUSDT.p deleted file mode 100644 index 24d915f..0000000 Binary files a/database/Binance/1d/RUNEUSDT.p and /dev/null differ diff --git a/database/Binance/1d/SHIBUSDT.p b/database/Binance/1d/SHIBUSDT.p deleted file mode 100644 index 2e7477b..0000000 Binary files a/database/Binance/1d/SHIBUSDT.p and /dev/null differ diff --git a/database/Binance/1d/SNXUSDT.p b/database/Binance/1d/SNXUSDT.p deleted file mode 100644 index acd823e..0000000 Binary files a/database/Binance/1d/SNXUSDT.p and /dev/null differ diff --git a/database/Binance/1d/SOLUSDT.p b/database/Binance/1d/SOLUSDT.p deleted file mode 100644 index 07543ca..0000000 Binary files a/database/Binance/1d/SOLUSDT.p and /dev/null differ diff --git a/database/Binance/1d/STXUSDT.p b/database/Binance/1d/STXUSDT.p deleted file mode 100644 index 637df55..0000000 Binary files a/database/Binance/1d/STXUSDT.p and /dev/null differ diff --git a/database/Binance/1d/SUSHIUSDT.p b/database/Binance/1d/SUSHIUSDT.p deleted file mode 100644 index f33b954..0000000 Binary files a/database/Binance/1d/SUSHIUSDT.p and /dev/null differ diff --git a/database/Binance/1d/THETAUSDT.p b/database/Binance/1d/THETAUSDT.p deleted file mode 100644 index e404778..0000000 Binary files a/database/Binance/1d/THETAUSDT.p and /dev/null differ diff --git a/database/Binance/1d/TRXUSDT.p b/database/Binance/1d/TRXUSDT.p deleted file mode 100644 index c4382f0..0000000 Binary files a/database/Binance/1d/TRXUSDT.p and /dev/null differ diff --git a/database/Binance/1d/UMAUSDT.p b/database/Binance/1d/UMAUSDT.p deleted file mode 100644 index e40eebd..0000000 Binary files a/database/Binance/1d/UMAUSDT.p and /dev/null differ diff --git a/database/Binance/1d/UNIUSDT.p b/database/Binance/1d/UNIUSDT.p deleted file mode 100644 index dfef7a2..0000000 Binary files a/database/Binance/1d/UNIUSDT.p and /dev/null differ diff --git a/database/Binance/1d/VETUSDT.p b/database/Binance/1d/VETUSDT.p deleted file mode 100644 index 419b10d..0000000 Binary files a/database/Binance/1d/VETUSDT.p and /dev/null differ diff --git a/database/Binance/1d/WAVESUSDT.p b/database/Binance/1d/WAVESUSDT.p deleted file mode 100644 index a8d513f..0000000 Binary files a/database/Binance/1d/WAVESUSDT.p and /dev/null differ diff --git a/database/Binance/1d/XEMUSDT.p b/database/Binance/1d/XEMUSDT.p deleted file mode 100644 index 7dd57fc..0000000 Binary files a/database/Binance/1d/XEMUSDT.p and /dev/null differ diff --git a/database/Binance/1d/XLMUSDT.p b/database/Binance/1d/XLMUSDT.p deleted file mode 100644 index 36b401c..0000000 Binary files a/database/Binance/1d/XLMUSDT.p and /dev/null differ diff --git a/database/Binance/1d/XMRUSDT.p b/database/Binance/1d/XMRUSDT.p deleted file mode 100644 index 089d5a5..0000000 Binary files a/database/Binance/1d/XMRUSDT.p and /dev/null differ diff --git a/database/Binance/1d/XRPUSDT.p b/database/Binance/1d/XRPUSDT.p deleted file mode 100644 index 22d26e4..0000000 Binary files a/database/Binance/1d/XRPUSDT.p and /dev/null differ diff --git a/database/Binance/1d/XTZUSDT.p b/database/Binance/1d/XTZUSDT.p deleted file mode 100644 index cfd578c..0000000 Binary files a/database/Binance/1d/XTZUSDT.p and /dev/null differ diff --git a/database/Binance/1d/YFIUSDT.p b/database/Binance/1d/YFIUSDT.p deleted file mode 100644 index 4a6cee4..0000000 Binary files a/database/Binance/1d/YFIUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ZECUSDT.p b/database/Binance/1d/ZECUSDT.p deleted file mode 100644 index 106fcb7..0000000 Binary files a/database/Binance/1d/ZECUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ZILUSDT.p b/database/Binance/1d/ZILUSDT.p deleted file mode 100644 index 110284b..0000000 Binary files a/database/Binance/1d/ZILUSDT.p and /dev/null differ diff --git a/database/Binance/1d/ZRXUSDT.p b/database/Binance/1d/ZRXUSDT.p deleted file mode 100644 index 39dfabd..0000000 Binary files a/database/Binance/1d/ZRXUSDT.p and /dev/null differ diff --git a/database/Binance/1h/AAVEUSDT.p b/database/Binance/1h/AAVEUSDT.p deleted file mode 100644 index 35c1567..0000000 Binary files a/database/Binance/1h/AAVEUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ADAUSDT.p b/database/Binance/1h/ADAUSDT.p deleted file mode 100644 index 7b42b10..0000000 Binary files a/database/Binance/1h/ADAUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ALGOUSDT.p b/database/Binance/1h/ALGOUSDT.p deleted file mode 100644 index c73754e..0000000 Binary files a/database/Binance/1h/ALGOUSDT.p and /dev/null differ diff --git a/database/Binance/1h/AMPUSDT.p b/database/Binance/1h/AMPUSDT.p deleted file mode 100644 index dc5dbee..0000000 Binary files a/database/Binance/1h/AMPUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ATOMUSDT.p b/database/Binance/1h/ATOMUSDT.p deleted file mode 100644 index 5849926..0000000 Binary files a/database/Binance/1h/ATOMUSDT.p and /dev/null differ diff --git a/database/Binance/1h/AVAXUSDT.p b/database/Binance/1h/AVAXUSDT.p deleted file mode 100644 index 328fee1..0000000 Binary files a/database/Binance/1h/AVAXUSDT.p and /dev/null differ diff --git a/database/Binance/1h/BATUSDT.p b/database/Binance/1h/BATUSDT.p deleted file mode 100644 index 283d4c8..0000000 Binary files a/database/Binance/1h/BATUSDT.p and /dev/null differ diff --git a/database/Binance/1h/BCHUSDT.p b/database/Binance/1h/BCHUSDT.p deleted file mode 100644 index 64cc8f1..0000000 Binary files a/database/Binance/1h/BCHUSDT.p and /dev/null differ diff --git a/database/Binance/1h/BNBUSDT.p b/database/Binance/1h/BNBUSDT.p deleted file mode 100644 index b9c44d4..0000000 Binary files a/database/Binance/1h/BNBUSDT.p and /dev/null differ diff --git a/database/Binance/1h/BTCUSDT.p b/database/Binance/1h/BTCUSDT.p deleted file mode 100644 index b1d4cd8..0000000 Binary files a/database/Binance/1h/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/1h/BTGUSDT.p b/database/Binance/1h/BTGUSDT.p deleted file mode 100644 index 692c9ce..0000000 Binary files a/database/Binance/1h/BTGUSDT.p and /dev/null differ diff --git a/database/Binance/1h/BTTUSDT.p b/database/Binance/1h/BTTUSDT.p deleted file mode 100644 index 51e3fa6..0000000 Binary files a/database/Binance/1h/BTTUSDT.p and /dev/null differ diff --git a/database/Binance/1h/CAKEUSDT.p b/database/Binance/1h/CAKEUSDT.p deleted file mode 100644 index b535414..0000000 Binary files a/database/Binance/1h/CAKEUSDT.p and /dev/null differ diff --git a/database/Binance/1h/CHZUSDT.p b/database/Binance/1h/CHZUSDT.p deleted file mode 100644 index b1144d8..0000000 Binary files a/database/Binance/1h/CHZUSDT.p and /dev/null differ diff --git a/database/Binance/1h/COMPUSDT.p b/database/Binance/1h/COMPUSDT.p deleted file mode 100644 index 34cc537..0000000 Binary files a/database/Binance/1h/COMPUSDT.p and /dev/null differ diff --git a/database/Binance/1h/DASHUSDT.p b/database/Binance/1h/DASHUSDT.p deleted file mode 100644 index 3ae5840..0000000 Binary files a/database/Binance/1h/DASHUSDT.p and /dev/null differ diff --git a/database/Binance/1h/DCRUSDT.p b/database/Binance/1h/DCRUSDT.p deleted file mode 100644 index c075f6f..0000000 Binary files a/database/Binance/1h/DCRUSDT.p and /dev/null differ diff --git a/database/Binance/1h/DGBUSDT.p b/database/Binance/1h/DGBUSDT.p deleted file mode 100644 index 723abec..0000000 Binary files a/database/Binance/1h/DGBUSDT.p and /dev/null differ diff --git a/database/Binance/1h/DOGEUSDT.p b/database/Binance/1h/DOGEUSDT.p deleted file mode 100644 index 77419cd..0000000 Binary files a/database/Binance/1h/DOGEUSDT.p and /dev/null differ diff --git a/database/Binance/1h/DOTUSDT.p b/database/Binance/1h/DOTUSDT.p deleted file mode 100644 index baecf84..0000000 Binary files a/database/Binance/1h/DOTUSDT.p and /dev/null differ diff --git a/database/Binance/1h/EGLDUSDT.p b/database/Binance/1h/EGLDUSDT.p deleted file mode 100644 index febf421..0000000 Binary files a/database/Binance/1h/EGLDUSDT.p and /dev/null differ diff --git a/database/Binance/1h/EOSUSDT.p b/database/Binance/1h/EOSUSDT.p deleted file mode 100644 index eacef61..0000000 Binary files a/database/Binance/1h/EOSUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ETCUSDT.p b/database/Binance/1h/ETCUSDT.p deleted file mode 100644 index 2af13a3..0000000 Binary files a/database/Binance/1h/ETCUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ETHUSDT.p b/database/Binance/1h/ETHUSDT.p deleted file mode 100644 index 5ee2c8d..0000000 Binary files a/database/Binance/1h/ETHUSDT.p and /dev/null differ diff --git a/database/Binance/1h/FILUSDT.p b/database/Binance/1h/FILUSDT.p deleted file mode 100644 index 819c89d..0000000 Binary files a/database/Binance/1h/FILUSDT.p and /dev/null differ diff --git a/database/Binance/1h/FTTUSDT.p b/database/Binance/1h/FTTUSDT.p deleted file mode 100644 index e257128..0000000 Binary files a/database/Binance/1h/FTTUSDT.p and /dev/null differ diff --git a/database/Binance/1h/GRTUSDT.p b/database/Binance/1h/GRTUSDT.p deleted file mode 100644 index 4d68304..0000000 Binary files a/database/Binance/1h/GRTUSDT.p and /dev/null differ diff --git a/database/Binance/1h/HBARUSDT.p b/database/Binance/1h/HBARUSDT.p deleted file mode 100644 index a4687de..0000000 Binary files a/database/Binance/1h/HBARUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ICPUSDT.p b/database/Binance/1h/ICPUSDT.p deleted file mode 100644 index 8cfb232..0000000 Binary files a/database/Binance/1h/ICPUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ICXUSDT.p b/database/Binance/1h/ICXUSDT.p deleted file mode 100644 index fcb7a79..0000000 Binary files a/database/Binance/1h/ICXUSDT.p and /dev/null differ diff --git a/database/Binance/1h/IOTAUSDT.p b/database/Binance/1h/IOTAUSDT.p deleted file mode 100644 index 96a5d52..0000000 Binary files a/database/Binance/1h/IOTAUSDT.p and /dev/null differ diff --git a/database/Binance/1h/KLAYUSDT.p b/database/Binance/1h/KLAYUSDT.p deleted file mode 100644 index 7632829..0000000 Binary files a/database/Binance/1h/KLAYUSDT.p and /dev/null differ diff --git a/database/Binance/1h/KSMUSDT.p b/database/Binance/1h/KSMUSDT.p deleted file mode 100644 index 39c89ed..0000000 Binary files a/database/Binance/1h/KSMUSDT.p and /dev/null differ diff --git a/database/Binance/1h/LINKUSDT.p b/database/Binance/1h/LINKUSDT.p deleted file mode 100644 index 4ed0e51..0000000 Binary files a/database/Binance/1h/LINKUSDT.p and /dev/null differ diff --git a/database/Binance/1h/LRCUSDT.p b/database/Binance/1h/LRCUSDT.p deleted file mode 100644 index 302a5a7..0000000 Binary files a/database/Binance/1h/LRCUSDT.p and /dev/null differ diff --git a/database/Binance/1h/LSKUSDT.p b/database/Binance/1h/LSKUSDT.p deleted file mode 100644 index 25db0f6..0000000 Binary files a/database/Binance/1h/LSKUSDT.p and /dev/null differ diff --git a/database/Binance/1h/LTCUSDT.p b/database/Binance/1h/LTCUSDT.p deleted file mode 100644 index 8a595f2..0000000 Binary files a/database/Binance/1h/LTCUSDT.p and /dev/null differ diff --git a/database/Binance/1h/LUNAUSDT.p b/database/Binance/1h/LUNAUSDT.p deleted file mode 100644 index 47d2685..0000000 Binary files a/database/Binance/1h/LUNAUSDT.p and /dev/null differ diff --git a/database/Binance/1h/MATICUSDT.p b/database/Binance/1h/MATICUSDT.p deleted file mode 100644 index 3cd31eb..0000000 Binary files a/database/Binance/1h/MATICUSDT.p and /dev/null differ diff --git a/database/Binance/1h/MKRUSDT.p b/database/Binance/1h/MKRUSDT.p deleted file mode 100644 index 4622453..0000000 Binary files a/database/Binance/1h/MKRUSDT.p and /dev/null differ diff --git a/database/Binance/1h/NANOUSDT.p b/database/Binance/1h/NANOUSDT.p deleted file mode 100644 index 7dcf37a..0000000 Binary files a/database/Binance/1h/NANOUSDT.p and /dev/null differ diff --git a/database/Binance/1h/NEARUSDT.p b/database/Binance/1h/NEARUSDT.p deleted file mode 100644 index d06e2f2..0000000 Binary files a/database/Binance/1h/NEARUSDT.p and /dev/null differ diff --git a/database/Binance/1h/NEOUSDT.p b/database/Binance/1h/NEOUSDT.p deleted file mode 100644 index a915b6f..0000000 Binary files a/database/Binance/1h/NEOUSDT.p and /dev/null differ diff --git a/database/Binance/1h/OMGUSDT.p b/database/Binance/1h/OMGUSDT.p deleted file mode 100644 index 2c65b3e..0000000 Binary files a/database/Binance/1h/OMGUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ONTUSDT.p b/database/Binance/1h/ONTUSDT.p deleted file mode 100644 index 07cd589..0000000 Binary files a/database/Binance/1h/ONTUSDT.p and /dev/null differ diff --git a/database/Binance/1h/QTUMUSDT.p b/database/Binance/1h/QTUMUSDT.p deleted file mode 100644 index 2e38acf..0000000 Binary files a/database/Binance/1h/QTUMUSDT.p and /dev/null differ diff --git a/database/Binance/1h/RENUSDT.p b/database/Binance/1h/RENUSDT.p deleted file mode 100644 index 5ac4d8d..0000000 Binary files a/database/Binance/1h/RENUSDT.p and /dev/null differ diff --git a/database/Binance/1h/REPUSDT.p b/database/Binance/1h/REPUSDT.p deleted file mode 100644 index 47ed271..0000000 Binary files a/database/Binance/1h/REPUSDT.p and /dev/null differ diff --git a/database/Binance/1h/RSRUSDT.p b/database/Binance/1h/RSRUSDT.p deleted file mode 100644 index a542592..0000000 Binary files a/database/Binance/1h/RSRUSDT.p and /dev/null differ diff --git a/database/Binance/1h/RUNEUSDT.p b/database/Binance/1h/RUNEUSDT.p deleted file mode 100644 index 5cd9eb8..0000000 Binary files a/database/Binance/1h/RUNEUSDT.p and /dev/null differ diff --git a/database/Binance/1h/RVNUSDT.p b/database/Binance/1h/RVNUSDT.p deleted file mode 100644 index 10342e2..0000000 Binary files a/database/Binance/1h/RVNUSDT.p and /dev/null differ diff --git a/database/Binance/1h/SNXUSDT.p b/database/Binance/1h/SNXUSDT.p deleted file mode 100644 index a950bfe..0000000 Binary files a/database/Binance/1h/SNXUSDT.p and /dev/null differ diff --git a/database/Binance/1h/SOLUSDT.p b/database/Binance/1h/SOLUSDT.p deleted file mode 100644 index c0d4910..0000000 Binary files a/database/Binance/1h/SOLUSDT.p and /dev/null differ diff --git a/database/Binance/1h/STXUSDT.p b/database/Binance/1h/STXUSDT.p deleted file mode 100644 index 3ae940f..0000000 Binary files a/database/Binance/1h/STXUSDT.p and /dev/null differ diff --git a/database/Binance/1h/SUSHIUSDT.p b/database/Binance/1h/SUSHIUSDT.p deleted file mode 100644 index 9e368df..0000000 Binary files a/database/Binance/1h/SUSHIUSDT.p and /dev/null differ diff --git a/database/Binance/1h/SXPUSDT.p b/database/Binance/1h/SXPUSDT.p deleted file mode 100644 index b72a48b..0000000 Binary files a/database/Binance/1h/SXPUSDT.p and /dev/null differ diff --git a/database/Binance/1h/THETAUSDT.p b/database/Binance/1h/THETAUSDT.p deleted file mode 100644 index 64406ca..0000000 Binary files a/database/Binance/1h/THETAUSDT.p and /dev/null differ diff --git a/database/Binance/1h/TRXUSDT.p b/database/Binance/1h/TRXUSDT.p deleted file mode 100644 index 10e80dc..0000000 Binary files a/database/Binance/1h/TRXUSDT.p and /dev/null differ diff --git a/database/Binance/1h/UMAUSDT.p b/database/Binance/1h/UMAUSDT.p deleted file mode 100644 index 7843482..0000000 Binary files a/database/Binance/1h/UMAUSDT.p and /dev/null differ diff --git a/database/Binance/1h/UNIUSDT.p b/database/Binance/1h/UNIUSDT.p deleted file mode 100644 index e71baaa..0000000 Binary files a/database/Binance/1h/UNIUSDT.p and /dev/null differ diff --git a/database/Binance/1h/VETUSDT.p b/database/Binance/1h/VETUSDT.p deleted file mode 100644 index 53cbba9..0000000 Binary files a/database/Binance/1h/VETUSDT.p and /dev/null differ diff --git a/database/Binance/1h/WAVESUSDT.p b/database/Binance/1h/WAVESUSDT.p deleted file mode 100644 index 6fbe914..0000000 Binary files a/database/Binance/1h/WAVESUSDT.p and /dev/null differ diff --git a/database/Binance/1h/XEMUSDT.p b/database/Binance/1h/XEMUSDT.p deleted file mode 100644 index 7280339..0000000 Binary files a/database/Binance/1h/XEMUSDT.p and /dev/null differ diff --git a/database/Binance/1h/XLMUSDT.p b/database/Binance/1h/XLMUSDT.p deleted file mode 100644 index b458be5..0000000 Binary files a/database/Binance/1h/XLMUSDT.p and /dev/null differ diff --git a/database/Binance/1h/XMRUSDT.p b/database/Binance/1h/XMRUSDT.p deleted file mode 100644 index 57ee7ba..0000000 Binary files a/database/Binance/1h/XMRUSDT.p and /dev/null differ diff --git a/database/Binance/1h/XRPUSDT.p b/database/Binance/1h/XRPUSDT.p deleted file mode 100644 index 75e625e..0000000 Binary files a/database/Binance/1h/XRPUSDT.p and /dev/null differ diff --git a/database/Binance/1h/XTZUSDT.p b/database/Binance/1h/XTZUSDT.p deleted file mode 100644 index 30d3845..0000000 Binary files a/database/Binance/1h/XTZUSDT.p and /dev/null differ diff --git a/database/Binance/1h/YFIUSDT.p b/database/Binance/1h/YFIUSDT.p deleted file mode 100644 index f92d018..0000000 Binary files a/database/Binance/1h/YFIUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ZECUSDT.p b/database/Binance/1h/ZECUSDT.p deleted file mode 100644 index 79c3bb0..0000000 Binary files a/database/Binance/1h/ZECUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ZILUSDT.p b/database/Binance/1h/ZILUSDT.p deleted file mode 100644 index 13a9835..0000000 Binary files a/database/Binance/1h/ZILUSDT.p and /dev/null differ diff --git a/database/Binance/1h/ZRXUSDT.p b/database/Binance/1h/ZRXUSDT.p deleted file mode 100644 index 016da92..0000000 Binary files a/database/Binance/1h/ZRXUSDT.p and /dev/null differ diff --git a/database/Binance/1m/ADAUSDT.p b/database/Binance/1m/ADAUSDT.p deleted file mode 100644 index 0926461..0000000 Binary files a/database/Binance/1m/ADAUSDT.p and /dev/null differ diff --git a/database/Binance/1m/BTCUSDT.p b/database/Binance/1m/BTCUSDT.p deleted file mode 100644 index cadb3c1..0000000 Binary files a/database/Binance/1m/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/1m/ETHUSDT.p b/database/Binance/1m/ETHUSDT.p deleted file mode 100644 index 4ad4038..0000000 Binary files a/database/Binance/1m/ETHUSDT.p and /dev/null differ diff --git a/database/Binance/1w/AAVEUSDT.p b/database/Binance/1w/AAVEUSDT.p deleted file mode 100644 index 9ebb917..0000000 Binary files a/database/Binance/1w/AAVEUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ADAUSDT.p b/database/Binance/1w/ADAUSDT.p deleted file mode 100644 index a0437e3..0000000 Binary files a/database/Binance/1w/ADAUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ALGOUSDT.p b/database/Binance/1w/ALGOUSDT.p deleted file mode 100644 index 6f37d08..0000000 Binary files a/database/Binance/1w/ALGOUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ATOMUSDT.p b/database/Binance/1w/ATOMUSDT.p deleted file mode 100644 index 91ed37d..0000000 Binary files a/database/Binance/1w/ATOMUSDT.p and /dev/null differ diff --git a/database/Binance/1w/AVAXUSDT.p b/database/Binance/1w/AVAXUSDT.p deleted file mode 100644 index 6fe7d95..0000000 Binary files a/database/Binance/1w/AVAXUSDT.p and /dev/null differ diff --git a/database/Binance/1w/BATUSDT.p b/database/Binance/1w/BATUSDT.p deleted file mode 100644 index aba95ce..0000000 Binary files a/database/Binance/1w/BATUSDT.p and /dev/null differ diff --git a/database/Binance/1w/BCHUSDT.p b/database/Binance/1w/BCHUSDT.p deleted file mode 100644 index bd2933c..0000000 Binary files a/database/Binance/1w/BCHUSDT.p and /dev/null differ diff --git a/database/Binance/1w/BNBUSDT.p b/database/Binance/1w/BNBUSDT.p deleted file mode 100644 index e97fc6a..0000000 Binary files a/database/Binance/1w/BNBUSDT.p and /dev/null differ diff --git a/database/Binance/1w/BTCUSDT.p b/database/Binance/1w/BTCUSDT.p deleted file mode 100644 index 7b30743..0000000 Binary files a/database/Binance/1w/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/1w/DASHUSDT.p b/database/Binance/1w/DASHUSDT.p deleted file mode 100644 index 6480c67..0000000 Binary files a/database/Binance/1w/DASHUSDT.p and /dev/null differ diff --git a/database/Binance/1w/DOGEUSDT.p b/database/Binance/1w/DOGEUSDT.p deleted file mode 100644 index cfe5d64..0000000 Binary files a/database/Binance/1w/DOGEUSDT.p and /dev/null differ diff --git a/database/Binance/1w/DOTUSDT.p b/database/Binance/1w/DOTUSDT.p deleted file mode 100644 index 5d606e3..0000000 Binary files a/database/Binance/1w/DOTUSDT.p and /dev/null differ diff --git a/database/Binance/1w/EGLDUSDT.p b/database/Binance/1w/EGLDUSDT.p deleted file mode 100644 index eccf01a..0000000 Binary files a/database/Binance/1w/EGLDUSDT.p and /dev/null differ diff --git a/database/Binance/1w/EOSUSDT.p b/database/Binance/1w/EOSUSDT.p deleted file mode 100644 index c8376b2..0000000 Binary files a/database/Binance/1w/EOSUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ETCUSDT.p b/database/Binance/1w/ETCUSDT.p deleted file mode 100644 index d5ab17a..0000000 Binary files a/database/Binance/1w/ETCUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ETHUSDT.p b/database/Binance/1w/ETHUSDT.p deleted file mode 100644 index 52a21e0..0000000 Binary files a/database/Binance/1w/ETHUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ICXUSDT.p b/database/Binance/1w/ICXUSDT.p deleted file mode 100644 index cedaef3..0000000 Binary files a/database/Binance/1w/ICXUSDT.p and /dev/null differ diff --git a/database/Binance/1w/IOTAUSDT.p b/database/Binance/1w/IOTAUSDT.p deleted file mode 100644 index fbf86f0..0000000 Binary files a/database/Binance/1w/IOTAUSDT.p and /dev/null differ diff --git a/database/Binance/1w/LINKUSDT.p b/database/Binance/1w/LINKUSDT.p deleted file mode 100644 index e28f0b4..0000000 Binary files a/database/Binance/1w/LINKUSDT.p and /dev/null differ diff --git a/database/Binance/1w/LTCUSDT.p b/database/Binance/1w/LTCUSDT.p deleted file mode 100644 index 3d44af4..0000000 Binary files a/database/Binance/1w/LTCUSDT.p and /dev/null differ diff --git a/database/Binance/1w/LUNAUSDT.p b/database/Binance/1w/LUNAUSDT.p deleted file mode 100644 index be5f5ac..0000000 Binary files a/database/Binance/1w/LUNAUSDT.p and /dev/null differ diff --git a/database/Binance/1w/NEOUSDT.p b/database/Binance/1w/NEOUSDT.p deleted file mode 100644 index eae9dd1..0000000 Binary files a/database/Binance/1w/NEOUSDT.p and /dev/null differ diff --git a/database/Binance/1w/OMGUSDT.p b/database/Binance/1w/OMGUSDT.p deleted file mode 100644 index 0ddaa8c..0000000 Binary files a/database/Binance/1w/OMGUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ONTUSDT.p b/database/Binance/1w/ONTUSDT.p deleted file mode 100644 index 8aa3dca..0000000 Binary files a/database/Binance/1w/ONTUSDT.p and /dev/null differ diff --git a/database/Binance/1w/QTUMUSDT.p b/database/Binance/1w/QTUMUSDT.p deleted file mode 100644 index c3468ec..0000000 Binary files a/database/Binance/1w/QTUMUSDT.p and /dev/null differ diff --git a/database/Binance/1w/SHIBUSDT.p b/database/Binance/1w/SHIBUSDT.p deleted file mode 100644 index d86b9d6..0000000 Binary files a/database/Binance/1w/SHIBUSDT.p and /dev/null differ diff --git a/database/Binance/1w/SOLUSDT.p b/database/Binance/1w/SOLUSDT.p deleted file mode 100644 index 8833460..0000000 Binary files a/database/Binance/1w/SOLUSDT.p and /dev/null differ diff --git a/database/Binance/1w/TRXUSDT.p b/database/Binance/1w/TRXUSDT.p deleted file mode 100644 index e5091a6..0000000 Binary files a/database/Binance/1w/TRXUSDT.p and /dev/null differ diff --git a/database/Binance/1w/UNIUSDT.p b/database/Binance/1w/UNIUSDT.p deleted file mode 100644 index 75a3605..0000000 Binary files a/database/Binance/1w/UNIUSDT.p and /dev/null differ diff --git a/database/Binance/1w/VETUSDT.p b/database/Binance/1w/VETUSDT.p deleted file mode 100644 index 0398e04..0000000 Binary files a/database/Binance/1w/VETUSDT.p and /dev/null differ diff --git a/database/Binance/1w/XLMUSDT.p b/database/Binance/1w/XLMUSDT.p deleted file mode 100644 index 27e9ccc..0000000 Binary files a/database/Binance/1w/XLMUSDT.p and /dev/null differ diff --git a/database/Binance/1w/XMRUSDT.p b/database/Binance/1w/XMRUSDT.p deleted file mode 100644 index e70ff1a..0000000 Binary files a/database/Binance/1w/XMRUSDT.p and /dev/null differ diff --git a/database/Binance/1w/XRPUSDT.p b/database/Binance/1w/XRPUSDT.p deleted file mode 100644 index 87b5f3e..0000000 Binary files a/database/Binance/1w/XRPUSDT.p and /dev/null differ diff --git a/database/Binance/1w/XTZUSDT.p b/database/Binance/1w/XTZUSDT.p deleted file mode 100644 index ba33b77..0000000 Binary files a/database/Binance/1w/XTZUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ZECUSDT.p b/database/Binance/1w/ZECUSDT.p deleted file mode 100644 index 5af3b4b..0000000 Binary files a/database/Binance/1w/ZECUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ZILUSDT.p b/database/Binance/1w/ZILUSDT.p deleted file mode 100644 index 7b496b9..0000000 Binary files a/database/Binance/1w/ZILUSDT.p and /dev/null differ diff --git a/database/Binance/1w/ZRXUSDT.p b/database/Binance/1w/ZRXUSDT.p deleted file mode 100644 index 3a9b6eb..0000000 Binary files a/database/Binance/1w/ZRXUSDT.p and /dev/null differ diff --git a/database/Binance/4h/AAVEUSDT.p b/database/Binance/4h/AAVEUSDT.p deleted file mode 100644 index 9766e2a..0000000 Binary files a/database/Binance/4h/AAVEUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ADAUSDT.p b/database/Binance/4h/ADAUSDT.p deleted file mode 100644 index 16b0429..0000000 Binary files a/database/Binance/4h/ADAUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ALGOUSDT.p b/database/Binance/4h/ALGOUSDT.p deleted file mode 100644 index 640dee0..0000000 Binary files a/database/Binance/4h/ALGOUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ATOMUSDT.p b/database/Binance/4h/ATOMUSDT.p deleted file mode 100644 index caba8c4..0000000 Binary files a/database/Binance/4h/ATOMUSDT.p and /dev/null differ diff --git a/database/Binance/4h/AVAXUSDT.p b/database/Binance/4h/AVAXUSDT.p deleted file mode 100644 index 271ecbd..0000000 Binary files a/database/Binance/4h/AVAXUSDT.p and /dev/null differ diff --git a/database/Binance/4h/BATUSDT.p b/database/Binance/4h/BATUSDT.p deleted file mode 100644 index f41c339..0000000 Binary files a/database/Binance/4h/BATUSDT.p and /dev/null differ diff --git a/database/Binance/4h/BCHUSDT.p b/database/Binance/4h/BCHUSDT.p deleted file mode 100644 index 9340c34..0000000 Binary files a/database/Binance/4h/BCHUSDT.p and /dev/null differ diff --git a/database/Binance/4h/BNBUSDT.p b/database/Binance/4h/BNBUSDT.p deleted file mode 100644 index 4248bd4..0000000 Binary files a/database/Binance/4h/BNBUSDT.p and /dev/null differ diff --git a/database/Binance/4h/BTCUSDT.p b/database/Binance/4h/BTCUSDT.p deleted file mode 100644 index 765b639..0000000 Binary files a/database/Binance/4h/BTCUSDT.p and /dev/null differ diff --git a/database/Binance/4h/DASHUSDT.p b/database/Binance/4h/DASHUSDT.p deleted file mode 100644 index 9791bb2..0000000 Binary files a/database/Binance/4h/DASHUSDT.p and /dev/null differ diff --git a/database/Binance/4h/DOGEUSDT.p b/database/Binance/4h/DOGEUSDT.p deleted file mode 100644 index 84b012f..0000000 Binary files a/database/Binance/4h/DOGEUSDT.p and /dev/null differ diff --git a/database/Binance/4h/DOTUSDT.p b/database/Binance/4h/DOTUSDT.p deleted file mode 100644 index f8a5358..0000000 Binary files a/database/Binance/4h/DOTUSDT.p and /dev/null differ diff --git a/database/Binance/4h/EGLDUSDT.p b/database/Binance/4h/EGLDUSDT.p deleted file mode 100644 index 2b38673..0000000 Binary files a/database/Binance/4h/EGLDUSDT.p and /dev/null differ diff --git a/database/Binance/4h/EOSUSDT.p b/database/Binance/4h/EOSUSDT.p deleted file mode 100644 index fa24972..0000000 Binary files a/database/Binance/4h/EOSUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ETCUSDT.p b/database/Binance/4h/ETCUSDT.p deleted file mode 100644 index 7e67647..0000000 Binary files a/database/Binance/4h/ETCUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ETHUSDT.p b/database/Binance/4h/ETHUSDT.p deleted file mode 100644 index 0c503a2..0000000 Binary files a/database/Binance/4h/ETHUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ICXUSDT.p b/database/Binance/4h/ICXUSDT.p deleted file mode 100644 index c859806..0000000 Binary files a/database/Binance/4h/ICXUSDT.p and /dev/null differ diff --git a/database/Binance/4h/IOTAUSDT.p b/database/Binance/4h/IOTAUSDT.p deleted file mode 100644 index 971c67a..0000000 Binary files a/database/Binance/4h/IOTAUSDT.p and /dev/null differ diff --git a/database/Binance/4h/LINKUSDT.p b/database/Binance/4h/LINKUSDT.p deleted file mode 100644 index ca1636d..0000000 Binary files a/database/Binance/4h/LINKUSDT.p and /dev/null differ diff --git a/database/Binance/4h/LTCUSDT.p b/database/Binance/4h/LTCUSDT.p deleted file mode 100644 index 621a4d6..0000000 Binary files a/database/Binance/4h/LTCUSDT.p and /dev/null differ diff --git a/database/Binance/4h/LUNAUSDT.p b/database/Binance/4h/LUNAUSDT.p deleted file mode 100644 index a114b90..0000000 Binary files a/database/Binance/4h/LUNAUSDT.p and /dev/null differ diff --git a/database/Binance/4h/NEOUSDT.p b/database/Binance/4h/NEOUSDT.p deleted file mode 100644 index 34eee4c..0000000 Binary files a/database/Binance/4h/NEOUSDT.p and /dev/null differ diff --git a/database/Binance/4h/OMGUSDT.p b/database/Binance/4h/OMGUSDT.p deleted file mode 100644 index 86eda9a..0000000 Binary files a/database/Binance/4h/OMGUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ONTUSDT.p b/database/Binance/4h/ONTUSDT.p deleted file mode 100644 index 04e652b..0000000 Binary files a/database/Binance/4h/ONTUSDT.p and /dev/null differ diff --git a/database/Binance/4h/QTUMUSDT.p b/database/Binance/4h/QTUMUSDT.p deleted file mode 100644 index 18e7f61..0000000 Binary files a/database/Binance/4h/QTUMUSDT.p and /dev/null differ diff --git a/database/Binance/4h/SOLUSDT.p b/database/Binance/4h/SOLUSDT.p deleted file mode 100644 index e4966bf..0000000 Binary files a/database/Binance/4h/SOLUSDT.p and /dev/null differ diff --git a/database/Binance/4h/TRXUSDT.p b/database/Binance/4h/TRXUSDT.p deleted file mode 100644 index 7c1d6a5..0000000 Binary files a/database/Binance/4h/TRXUSDT.p and /dev/null differ diff --git a/database/Binance/4h/UNIUSDT.p b/database/Binance/4h/UNIUSDT.p deleted file mode 100644 index d74e424..0000000 Binary files a/database/Binance/4h/UNIUSDT.p and /dev/null differ diff --git a/database/Binance/4h/VETUSDT.p b/database/Binance/4h/VETUSDT.p deleted file mode 100644 index c29a126..0000000 Binary files a/database/Binance/4h/VETUSDT.p and /dev/null differ diff --git a/database/Binance/4h/XLMUSDT.p b/database/Binance/4h/XLMUSDT.p deleted file mode 100644 index 0290e8c..0000000 Binary files a/database/Binance/4h/XLMUSDT.p and /dev/null differ diff --git a/database/Binance/4h/XMRUSDT.p b/database/Binance/4h/XMRUSDT.p deleted file mode 100644 index 3685fc3..0000000 Binary files a/database/Binance/4h/XMRUSDT.p and /dev/null differ diff --git a/database/Binance/4h/XRPUSDT.p b/database/Binance/4h/XRPUSDT.p deleted file mode 100644 index 3e3ea5d..0000000 Binary files a/database/Binance/4h/XRPUSDT.p and /dev/null differ diff --git a/database/Binance/4h/XTZUSDT.p b/database/Binance/4h/XTZUSDT.p deleted file mode 100644 index ad9cb01..0000000 Binary files a/database/Binance/4h/XTZUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ZECUSDT.p b/database/Binance/4h/ZECUSDT.p deleted file mode 100644 index 90a8261..0000000 Binary files a/database/Binance/4h/ZECUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ZILUSDT.p b/database/Binance/4h/ZILUSDT.p deleted file mode 100644 index 343d6db..0000000 Binary files a/database/Binance/4h/ZILUSDT.p and /dev/null differ diff --git a/database/Binance/4h/ZRXUSDT.p b/database/Binance/4h/ZRXUSDT.p deleted file mode 100644 index 14667c0..0000000 Binary files a/database/Binance/4h/ZRXUSDT.p and /dev/null differ diff --git a/database/Binance/5m/BTCUSDT.p b/database/Binance/5m/BTCUSDT.p deleted file mode 100644 index f6eaf82..0000000 Binary files a/database/Binance/5m/BTCUSDT.p and /dev/null differ diff --git a/database/FTX/15m/ADABULLUSD.p b/database/FTX/15m/ADABULLUSD.p deleted file mode 100644 index d299da4..0000000 Binary files a/database/FTX/15m/ADABULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/ALGOBULLUSD.p b/database/FTX/15m/ALGOBULLUSD.p deleted file mode 100644 index a7dbc0c..0000000 Binary files a/database/FTX/15m/ALGOBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/BTCUSD.p b/database/FTX/15m/BTCUSD.p deleted file mode 100644 index f0ccd01..0000000 Binary files a/database/FTX/15m/BTCUSD.p and /dev/null differ diff --git a/database/FTX/15m/BULLUSD.p b/database/FTX/15m/BULLUSD.p deleted file mode 100644 index d3fdfb3..0000000 Binary files a/database/FTX/15m/BULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/DOGEBULLUSD.p b/database/FTX/15m/DOGEBULLUSD.p deleted file mode 100644 index e03b9e5..0000000 Binary files a/database/FTX/15m/DOGEBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/ETHBULLUSD.p b/database/FTX/15m/ETHBULLUSD.p deleted file mode 100644 index 4031476..0000000 Binary files a/database/FTX/15m/ETHBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/ETHUSDT.p b/database/FTX/15m/ETHUSDT.p deleted file mode 100644 index 4a53db4..0000000 Binary files a/database/FTX/15m/ETHUSDT.p and /dev/null differ diff --git a/database/FTX/15m/GRTBULLUSD.p b/database/FTX/15m/GRTBULLUSD.p deleted file mode 100644 index 8171583..0000000 Binary files a/database/FTX/15m/GRTBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/LTCBULLUSD.p b/database/FTX/15m/LTCBULLUSD.p deleted file mode 100644 index 8d3d767..0000000 Binary files a/database/FTX/15m/LTCBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/MATICBULLUSD.p b/database/FTX/15m/MATICBULLUSD.p deleted file mode 100644 index d03157c..0000000 Binary files a/database/FTX/15m/MATICBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/SUSHIBULLUSD.p b/database/FTX/15m/SUSHIBULLUSD.p deleted file mode 100644 index 8eeb139..0000000 Binary files a/database/FTX/15m/SUSHIBULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/THETABULLUSD.p b/database/FTX/15m/THETABULLUSD.p deleted file mode 100644 index 2158b76..0000000 Binary files a/database/FTX/15m/THETABULLUSD.p and /dev/null differ diff --git a/database/FTX/15m/XRPBULLUSD.p b/database/FTX/15m/XRPBULLUSD.p deleted file mode 100644 index 191af66..0000000 Binary files a/database/FTX/15m/XRPBULLUSD.p and /dev/null differ diff --git a/database/FTX/1d/AAVEUSD.p b/database/FTX/1d/AAVEUSD.p deleted file mode 100644 index 12e47dc..0000000 Binary files a/database/FTX/1d/AAVEUSD.p and /dev/null differ diff --git a/database/FTX/1d/AXSUSD.p b/database/FTX/1d/AXSUSD.p deleted file mode 100644 index 8c3e752..0000000 Binary files a/database/FTX/1d/AXSUSD.p and /dev/null differ diff --git a/database/FTX/1d/BALUSD.p b/database/FTX/1d/BALUSD.p deleted file mode 100644 index df2c5dd..0000000 Binary files a/database/FTX/1d/BALUSD.p and /dev/null differ diff --git a/database/FTX/1d/BANDUSD.p b/database/FTX/1d/BANDUSD.p deleted file mode 100644 index 4c8547c..0000000 Binary files a/database/FTX/1d/BANDUSD.p and /dev/null differ diff --git a/database/FTX/1d/BCHUSD.p b/database/FTX/1d/BCHUSD.p deleted file mode 100644 index 38327e9..0000000 Binary files a/database/FTX/1d/BCHUSD.p and /dev/null differ diff --git a/database/FTX/1d/BNBUSD.p b/database/FTX/1d/BNBUSD.p deleted file mode 100644 index 59f66b5..0000000 Binary files a/database/FTX/1d/BNBUSD.p and /dev/null differ diff --git a/database/FTX/1d/BTCUSD.p b/database/FTX/1d/BTCUSD.p deleted file mode 100644 index 471878d..0000000 Binary files a/database/FTX/1d/BTCUSD.p and /dev/null differ diff --git a/database/FTX/1d/CHZUSD.p b/database/FTX/1d/CHZUSD.p deleted file mode 100644 index 774f79a..0000000 Binary files a/database/FTX/1d/CHZUSD.p and /dev/null differ diff --git a/database/FTX/1d/CROUSD.p b/database/FTX/1d/CROUSD.p deleted file mode 100644 index 5ab85b9..0000000 Binary files a/database/FTX/1d/CROUSD.p and /dev/null differ diff --git a/database/FTX/1d/CRVUSD.p b/database/FTX/1d/CRVUSD.p deleted file mode 100644 index 139d7e2..0000000 Binary files a/database/FTX/1d/CRVUSD.p and /dev/null differ diff --git a/database/FTX/1d/DOGEUSD.p b/database/FTX/1d/DOGEUSD.p deleted file mode 100644 index 4b00374..0000000 Binary files a/database/FTX/1d/DOGEUSD.p and /dev/null differ diff --git a/database/FTX/1d/ETHUSD.p b/database/FTX/1d/ETHUSD.p deleted file mode 100644 index 20c4efc..0000000 Binary files a/database/FTX/1d/ETHUSD.p and /dev/null differ diff --git a/database/FTX/1d/FTMUSD.p b/database/FTX/1d/FTMUSD.p deleted file mode 100644 index 0810813..0000000 Binary files a/database/FTX/1d/FTMUSD.p and /dev/null differ diff --git a/database/FTX/1d/FTTUSD.p b/database/FTX/1d/FTTUSD.p deleted file mode 100644 index 2f02efc..0000000 Binary files a/database/FTX/1d/FTTUSD.p and /dev/null differ diff --git a/database/FTX/1d/GRTUSD.p b/database/FTX/1d/GRTUSD.p deleted file mode 100644 index ecebed6..0000000 Binary files a/database/FTX/1d/GRTUSD.p and /dev/null differ diff --git a/database/FTX/1d/LINKUSD.p b/database/FTX/1d/LINKUSD.p deleted file mode 100644 index 2fbe889..0000000 Binary files a/database/FTX/1d/LINKUSD.p and /dev/null differ diff --git a/database/FTX/1d/LRCUSD.p b/database/FTX/1d/LRCUSD.p deleted file mode 100644 index 3a1b5bf..0000000 Binary files a/database/FTX/1d/LRCUSD.p and /dev/null differ diff --git a/database/FTX/1d/LTCUSD.p b/database/FTX/1d/LTCUSD.p deleted file mode 100644 index ece02b7..0000000 Binary files a/database/FTX/1d/LTCUSD.p and /dev/null differ diff --git a/database/FTX/1d/MANAUSD.p b/database/FTX/1d/MANAUSD.p deleted file mode 100644 index 62bf025..0000000 Binary files a/database/FTX/1d/MANAUSD.p and /dev/null differ diff --git a/database/FTX/1d/MATICUSD.p b/database/FTX/1d/MATICUSD.p deleted file mode 100644 index abcdf9c..0000000 Binary files a/database/FTX/1d/MATICUSD.p and /dev/null differ diff --git a/database/FTX/1d/OMGUSD.p b/database/FTX/1d/OMGUSD.p deleted file mode 100644 index 0d0634b..0000000 Binary files a/database/FTX/1d/OMGUSD.p and /dev/null differ diff --git a/database/FTX/1d/RUNEUSD.p b/database/FTX/1d/RUNEUSD.p deleted file mode 100644 index db86f74..0000000 Binary files a/database/FTX/1d/RUNEUSD.p and /dev/null differ diff --git a/database/FTX/1d/SANDUSD.p b/database/FTX/1d/SANDUSD.p deleted file mode 100644 index 88237ad..0000000 Binary files a/database/FTX/1d/SANDUSD.p and /dev/null differ diff --git a/database/FTX/1d/SHIBUSD.p b/database/FTX/1d/SHIBUSD.p deleted file mode 100644 index 80e7a57..0000000 Binary files a/database/FTX/1d/SHIBUSD.p and /dev/null differ diff --git a/database/FTX/1d/SNXUSD.p b/database/FTX/1d/SNXUSD.p deleted file mode 100644 index 79fe158..0000000 Binary files a/database/FTX/1d/SNXUSD.p and /dev/null differ diff --git a/database/FTX/1d/SOLUSD.p b/database/FTX/1d/SOLUSD.p deleted file mode 100644 index ac88432..0000000 Binary files a/database/FTX/1d/SOLUSD.p and /dev/null differ diff --git a/database/FTX/1d/SRMUSD.p b/database/FTX/1d/SRMUSD.p deleted file mode 100644 index 7e40d27..0000000 Binary files a/database/FTX/1d/SRMUSD.p and /dev/null differ diff --git a/database/FTX/1d/SUSHIUSD.p b/database/FTX/1d/SUSHIUSD.p deleted file mode 100644 index 10e9adc..0000000 Binary files a/database/FTX/1d/SUSHIUSD.p and /dev/null differ diff --git a/database/FTX/1d/TRXUSD.p b/database/FTX/1d/TRXUSD.p deleted file mode 100644 index eb5407b..0000000 Binary files a/database/FTX/1d/TRXUSD.p and /dev/null differ diff --git a/database/FTX/1d/UNIUSD.p b/database/FTX/1d/UNIUSD.p deleted file mode 100644 index b078cf8..0000000 Binary files a/database/FTX/1d/UNIUSD.p and /dev/null differ diff --git a/database/FTX/1d/XRPUSD.p b/database/FTX/1d/XRPUSD.p deleted file mode 100644 index 5a06039..0000000 Binary files a/database/FTX/1d/XRPUSD.p and /dev/null differ diff --git a/database/FTX/1h/AAVEUSD copy.p b/database/FTX/1h/AAVEUSD copy.p deleted file mode 100644 index 9d41e7d..0000000 Binary files a/database/FTX/1h/AAVEUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/AAVEUSD.p b/database/FTX/1h/AAVEUSD.p deleted file mode 100644 index cfdbe40..0000000 Binary files a/database/FTX/1h/AAVEUSD.p and /dev/null differ diff --git a/database/FTX/1h/ADABULLUSD.p b/database/FTX/1h/ADABULLUSD.p deleted file mode 100644 index a34376b..0000000 Binary files a/database/FTX/1h/ADABULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/ALGOBULLUSD.p b/database/FTX/1h/ALGOBULLUSD.p deleted file mode 100644 index 572f379..0000000 Binary files a/database/FTX/1h/ALGOBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/ASDBULLUSD.p b/database/FTX/1h/ASDBULLUSD.p deleted file mode 100644 index 0d4319f..0000000 Binary files a/database/FTX/1h/ASDBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/ATOMBULLUSD.p b/database/FTX/1h/ATOMBULLUSD.p deleted file mode 100644 index 4ff3edc..0000000 Binary files a/database/FTX/1h/ATOMBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/AXSUSD.p b/database/FTX/1h/AXSUSD.p deleted file mode 100644 index 7a0b305..0000000 Binary files a/database/FTX/1h/AXSUSD.p and /dev/null differ diff --git a/database/FTX/1h/BALUSD.p b/database/FTX/1h/BALUSD.p deleted file mode 100644 index 2d662dd..0000000 Binary files a/database/FTX/1h/BALUSD.p and /dev/null differ diff --git a/database/FTX/1h/BANDUSD.p b/database/FTX/1h/BANDUSD.p deleted file mode 100644 index c2fe860..0000000 Binary files a/database/FTX/1h/BANDUSD.p and /dev/null differ diff --git a/database/FTX/1h/BATUSD.p b/database/FTX/1h/BATUSD.p deleted file mode 100644 index c4abdf2..0000000 Binary files a/database/FTX/1h/BATUSD.p and /dev/null differ diff --git a/database/FTX/1h/BCHBULLUSD.p b/database/FTX/1h/BCHBULLUSD.p deleted file mode 100644 index f3b6550..0000000 Binary files a/database/FTX/1h/BCHBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/BCHUSD copy.p b/database/FTX/1h/BCHUSD copy.p deleted file mode 100644 index 76cf804..0000000 Binary files a/database/FTX/1h/BCHUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/BCHUSD.p b/database/FTX/1h/BCHUSD.p deleted file mode 100644 index eaf98bf..0000000 Binary files a/database/FTX/1h/BCHUSD.p and /dev/null differ diff --git a/database/FTX/1h/BNBBULLUSD.p b/database/FTX/1h/BNBBULLUSD.p deleted file mode 100644 index fdd2f3b..0000000 Binary files a/database/FTX/1h/BNBBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/BNBUSD copy.p b/database/FTX/1h/BNBUSD copy.p deleted file mode 100644 index c3e4ac2..0000000 Binary files a/database/FTX/1h/BNBUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/BNBUSD.p b/database/FTX/1h/BNBUSD.p deleted file mode 100644 index d971761..0000000 Binary files a/database/FTX/1h/BNBUSD.p and /dev/null differ diff --git a/database/FTX/1h/BSVBULLUSD.p b/database/FTX/1h/BSVBULLUSD.p deleted file mode 100644 index dd7151d..0000000 Binary files a/database/FTX/1h/BSVBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/BTCUSD copy.p b/database/FTX/1h/BTCUSD copy.p deleted file mode 100644 index 05c8c79..0000000 Binary files a/database/FTX/1h/BTCUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/BTCUSD.p b/database/FTX/1h/BTCUSD.p deleted file mode 100644 index 50fcd11..0000000 Binary files a/database/FTX/1h/BTCUSD.p and /dev/null differ diff --git a/database/FTX/1h/BULLUSD.p b/database/FTX/1h/BULLUSD.p deleted file mode 100644 index 651248d..0000000 Binary files a/database/FTX/1h/BULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/CHZUSD.p b/database/FTX/1h/CHZUSD.p deleted file mode 100644 index 29e05cf..0000000 Binary files a/database/FTX/1h/CHZUSD.p and /dev/null differ diff --git a/database/FTX/1h/COMPBULLUSD.p b/database/FTX/1h/COMPBULLUSD.p deleted file mode 100644 index a990a63..0000000 Binary files a/database/FTX/1h/COMPBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/CROUSD.p b/database/FTX/1h/CROUSD.p deleted file mode 100644 index 649e07f..0000000 Binary files a/database/FTX/1h/CROUSD.p and /dev/null differ diff --git a/database/FTX/1h/CRVUSD.p b/database/FTX/1h/CRVUSD.p deleted file mode 100644 index a2d3ac5..0000000 Binary files a/database/FTX/1h/CRVUSD.p and /dev/null differ diff --git a/database/FTX/1h/DOGEBULLUSD.p b/database/FTX/1h/DOGEBULLUSD.p deleted file mode 100644 index 0928a79..0000000 Binary files a/database/FTX/1h/DOGEBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/DOGEUSD copy.p b/database/FTX/1h/DOGEUSD copy.p deleted file mode 100644 index 3be84ec..0000000 Binary files a/database/FTX/1h/DOGEUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/DOGEUSD.p b/database/FTX/1h/DOGEUSD.p deleted file mode 100644 index 00c878d..0000000 Binary files a/database/FTX/1h/DOGEUSD.p and /dev/null differ diff --git a/database/FTX/1h/DOTUSD.p b/database/FTX/1h/DOTUSD.p deleted file mode 100644 index bf3c285..0000000 Binary files a/database/FTX/1h/DOTUSD.p and /dev/null differ diff --git a/database/FTX/1h/DRGNBULLUSD.p b/database/FTX/1h/DRGNBULLUSD.p deleted file mode 100644 index 0670ea3..0000000 Binary files a/database/FTX/1h/DRGNBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/EOSBULLUSD.p b/database/FTX/1h/EOSBULLUSD.p deleted file mode 100644 index 96e23eb..0000000 Binary files a/database/FTX/1h/EOSBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/ETHBULLUSD.p b/database/FTX/1h/ETHBULLUSD.p deleted file mode 100644 index e1acd60..0000000 Binary files a/database/FTX/1h/ETHBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/ETHUSD copy.p b/database/FTX/1h/ETHUSD copy.p deleted file mode 100644 index e5b2c7f..0000000 Binary files a/database/FTX/1h/ETHUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/ETHUSD.p b/database/FTX/1h/ETHUSD.p deleted file mode 100644 index 82b58fb..0000000 Binary files a/database/FTX/1h/ETHUSD.p and /dev/null differ diff --git a/database/FTX/1h/ETHUSDT.p b/database/FTX/1h/ETHUSDT.p deleted file mode 100644 index 927a3be..0000000 Binary files a/database/FTX/1h/ETHUSDT.p and /dev/null differ diff --git a/database/FTX/1h/FTMUSD.p b/database/FTX/1h/FTMUSD.p deleted file mode 100644 index e8683b5..0000000 Binary files a/database/FTX/1h/FTMUSD.p and /dev/null differ diff --git a/database/FTX/1h/FTTUSD.p b/database/FTX/1h/FTTUSD.p deleted file mode 100644 index 51c17d7..0000000 Binary files a/database/FTX/1h/FTTUSD.p and /dev/null differ diff --git a/database/FTX/1h/GRTBULLUSD.p b/database/FTX/1h/GRTBULLUSD.p deleted file mode 100644 index 6da7697..0000000 Binary files a/database/FTX/1h/GRTBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/GRTUSD.p b/database/FTX/1h/GRTUSD.p deleted file mode 100644 index 8e3360e..0000000 Binary files a/database/FTX/1h/GRTUSD.p and /dev/null differ diff --git a/database/FTX/1h/KNCBULLUSD.p b/database/FTX/1h/KNCBULLUSD.p deleted file mode 100644 index 57fab19..0000000 Binary files a/database/FTX/1h/KNCBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/LINKBULLUSD.p b/database/FTX/1h/LINKBULLUSD.p deleted file mode 100644 index a4ed0c6..0000000 Binary files a/database/FTX/1h/LINKBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/LINKUSD copy.p b/database/FTX/1h/LINKUSD copy.p deleted file mode 100644 index a36cf94..0000000 Binary files a/database/FTX/1h/LINKUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/LINKUSD.p b/database/FTX/1h/LINKUSD.p deleted file mode 100644 index 3915321..0000000 Binary files a/database/FTX/1h/LINKUSD.p and /dev/null differ diff --git a/database/FTX/1h/LRCUSD.p b/database/FTX/1h/LRCUSD.p deleted file mode 100644 index 7535fbc..0000000 Binary files a/database/FTX/1h/LRCUSD.p and /dev/null differ diff --git a/database/FTX/1h/LTCBULLUSD.p b/database/FTX/1h/LTCBULLUSD.p deleted file mode 100644 index 868ed08..0000000 Binary files a/database/FTX/1h/LTCBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/LTCUSD copy.p b/database/FTX/1h/LTCUSD copy.p deleted file mode 100644 index ae8f291..0000000 Binary files a/database/FTX/1h/LTCUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/LTCUSD.p b/database/FTX/1h/LTCUSD.p deleted file mode 100644 index 1c5b2af..0000000 Binary files a/database/FTX/1h/LTCUSD.p and /dev/null differ diff --git a/database/FTX/1h/MANAUSD.p b/database/FTX/1h/MANAUSD.p deleted file mode 100644 index 2daa310..0000000 Binary files a/database/FTX/1h/MANAUSD.p and /dev/null differ diff --git a/database/FTX/1h/MATICBULLUSD.p b/database/FTX/1h/MATICBULLUSD.p deleted file mode 100644 index 90c3e82..0000000 Binary files a/database/FTX/1h/MATICBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/MATICUSD copy.p b/database/FTX/1h/MATICUSD copy.p deleted file mode 100644 index 3008382..0000000 Binary files a/database/FTX/1h/MATICUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/MATICUSD.p b/database/FTX/1h/MATICUSD.p deleted file mode 100644 index 9c6a93f..0000000 Binary files a/database/FTX/1h/MATICUSD.p and /dev/null differ diff --git a/database/FTX/1h/MKRBULLUSD.p b/database/FTX/1h/MKRBULLUSD.p deleted file mode 100644 index 23c0033..0000000 Binary files a/database/FTX/1h/MKRBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/OMGUSD copy.p b/database/FTX/1h/OMGUSD copy.p deleted file mode 100644 index c989299..0000000 Binary files a/database/FTX/1h/OMGUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/OMGUSD.p b/database/FTX/1h/OMGUSD.p deleted file mode 100644 index dd0bb1b..0000000 Binary files a/database/FTX/1h/OMGUSD.p and /dev/null differ diff --git a/database/FTX/1h/RAYUSD.p b/database/FTX/1h/RAYUSD.p deleted file mode 100644 index 2b255f0..0000000 Binary files a/database/FTX/1h/RAYUSD.p and /dev/null differ diff --git a/database/FTX/1h/RUNEUSD.p b/database/FTX/1h/RUNEUSD.p deleted file mode 100644 index fcd4455..0000000 Binary files a/database/FTX/1h/RUNEUSD.p and /dev/null differ diff --git a/database/FTX/1h/SANDUSD.p b/database/FTX/1h/SANDUSD.p deleted file mode 100644 index 793abf2..0000000 Binary files a/database/FTX/1h/SANDUSD.p and /dev/null differ diff --git a/database/FTX/1h/SHIBUSD.p b/database/FTX/1h/SHIBUSD.p deleted file mode 100644 index 015f176..0000000 Binary files a/database/FTX/1h/SHIBUSD.p and /dev/null differ diff --git a/database/FTX/1h/SNXUSD.p b/database/FTX/1h/SNXUSD.p deleted file mode 100644 index 57c1968..0000000 Binary files a/database/FTX/1h/SNXUSD.p and /dev/null differ diff --git a/database/FTX/1h/SOLUSD copy.p b/database/FTX/1h/SOLUSD copy.p deleted file mode 100644 index 75b4026..0000000 Binary files a/database/FTX/1h/SOLUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/SOLUSD.p b/database/FTX/1h/SOLUSD.p deleted file mode 100644 index 392456c..0000000 Binary files a/database/FTX/1h/SOLUSD.p and /dev/null differ diff --git a/database/FTX/1h/SRMUSD.p b/database/FTX/1h/SRMUSD.p deleted file mode 100644 index 42858f6..0000000 Binary files a/database/FTX/1h/SRMUSD.p and /dev/null differ diff --git a/database/FTX/1h/SUSHIBULLUSD.p b/database/FTX/1h/SUSHIBULLUSD.p deleted file mode 100644 index 6db45e2..0000000 Binary files a/database/FTX/1h/SUSHIBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/SUSHIUSD.p b/database/FTX/1h/SUSHIUSD.p deleted file mode 100644 index 930b691..0000000 Binary files a/database/FTX/1h/SUSHIUSD.p and /dev/null differ diff --git a/database/FTX/1h/SXPBULLUSD.p b/database/FTX/1h/SXPBULLUSD.p deleted file mode 100644 index c268487..0000000 Binary files a/database/FTX/1h/SXPBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/THETABULLUSD.p b/database/FTX/1h/THETABULLUSD.p deleted file mode 100644 index 6b76682..0000000 Binary files a/database/FTX/1h/THETABULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/TOMOBULLUSD.p b/database/FTX/1h/TOMOBULLUSD.p deleted file mode 100644 index 577c977..0000000 Binary files a/database/FTX/1h/TOMOBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/TRXBULLUSD.p b/database/FTX/1h/TRXBULLUSD.p deleted file mode 100644 index 341cbf8..0000000 Binary files a/database/FTX/1h/TRXBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/TRXUSD copy.p b/database/FTX/1h/TRXUSD copy.p deleted file mode 100644 index a49bd60..0000000 Binary files a/database/FTX/1h/TRXUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/TRXUSD.p b/database/FTX/1h/TRXUSD.p deleted file mode 100644 index 3182cc4..0000000 Binary files a/database/FTX/1h/TRXUSD.p and /dev/null differ diff --git a/database/FTX/1h/UNISWAPBULLUSD.p b/database/FTX/1h/UNISWAPBULLUSD.p deleted file mode 100644 index 737c948..0000000 Binary files a/database/FTX/1h/UNISWAPBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/UNIUSD copy.p b/database/FTX/1h/UNIUSD copy.p deleted file mode 100644 index 5693194..0000000 Binary files a/database/FTX/1h/UNIUSD copy.p and /dev/null differ diff --git a/database/FTX/1h/UNIUSD.p b/database/FTX/1h/UNIUSD.p deleted file mode 100644 index 7893b19..0000000 Binary files a/database/FTX/1h/UNIUSD.p and /dev/null differ diff --git a/database/FTX/1h/VETBULLUSD.p b/database/FTX/1h/VETBULLUSD.p deleted file mode 100644 index 2055c96..0000000 Binary files a/database/FTX/1h/VETBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/XLMBULLUSD.p b/database/FTX/1h/XLMBULLUSD.p deleted file mode 100644 index aec5a16..0000000 Binary files a/database/FTX/1h/XLMBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/XRPBULLUSD.p b/database/FTX/1h/XRPBULLUSD.p deleted file mode 100644 index e0a364b..0000000 Binary files a/database/FTX/1h/XRPBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/XRPUSD.p b/database/FTX/1h/XRPUSD.p deleted file mode 100644 index 9a4cda5..0000000 Binary files a/database/FTX/1h/XRPUSD.p and /dev/null differ diff --git a/database/FTX/1h/XTZBULLUSD.p b/database/FTX/1h/XTZBULLUSD.p deleted file mode 100644 index 14104d9..0000000 Binary files a/database/FTX/1h/XTZBULLUSD.p and /dev/null differ diff --git a/database/FTX/1h/ZECBULLUSD.p b/database/FTX/1h/ZECBULLUSD.p deleted file mode 100644 index 6f5d00a..0000000 Binary files a/database/FTX/1h/ZECBULLUSD.p and /dev/null differ diff --git a/database/FTX/1m/BTCUSD.p b/database/FTX/1m/BTCUSD.p deleted file mode 100644 index 4ce784b..0000000 Binary files a/database/FTX/1m/BTCUSD.p and /dev/null differ diff --git a/database/FTX/4h/ADABULLUSD.p b/database/FTX/4h/ADABULLUSD.p deleted file mode 100644 index c5f381f..0000000 Binary files a/database/FTX/4h/ADABULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/ALGOBULLUSD.p b/database/FTX/4h/ALGOBULLUSD.p deleted file mode 100644 index 3c77654..0000000 Binary files a/database/FTX/4h/ALGOBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/BTCUSD.p b/database/FTX/4h/BTCUSD.p deleted file mode 100644 index 9b24311..0000000 Binary files a/database/FTX/4h/BTCUSD.p and /dev/null differ diff --git a/database/FTX/4h/BULLUSD.p b/database/FTX/4h/BULLUSD.p deleted file mode 100644 index 23abc80..0000000 Binary files a/database/FTX/4h/BULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/DOGEBULLUSD.p b/database/FTX/4h/DOGEBULLUSD.p deleted file mode 100644 index 6893ad6..0000000 Binary files a/database/FTX/4h/DOGEBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/ETHBULLUSD.p b/database/FTX/4h/ETHBULLUSD.p deleted file mode 100644 index f62c46d..0000000 Binary files a/database/FTX/4h/ETHBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/ETHUSD.p b/database/FTX/4h/ETHUSD.p deleted file mode 100644 index f7f242e..0000000 Binary files a/database/FTX/4h/ETHUSD.p and /dev/null differ diff --git a/database/FTX/4h/GRTBULLUSD.p b/database/FTX/4h/GRTBULLUSD.p deleted file mode 100644 index 5ed0337..0000000 Binary files a/database/FTX/4h/GRTBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/LTCBULLUSD.p b/database/FTX/4h/LTCBULLUSD.p deleted file mode 100644 index 6e3628e..0000000 Binary files a/database/FTX/4h/LTCBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/MATICBULLUSD.p b/database/FTX/4h/MATICBULLUSD.p deleted file mode 100644 index 90253fd..0000000 Binary files a/database/FTX/4h/MATICBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/SUSHIBULLUSD.p b/database/FTX/4h/SUSHIBULLUSD.p deleted file mode 100644 index baa9880..0000000 Binary files a/database/FTX/4h/SUSHIBULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/THETABULLUSD.p b/database/FTX/4h/THETABULLUSD.p deleted file mode 100644 index e39a0cc..0000000 Binary files a/database/FTX/4h/THETABULLUSD.p and /dev/null differ diff --git a/database/FTX/4h/XRPBULLUSD.p b/database/FTX/4h/XRPBULLUSD.p deleted file mode 100644 index 3fc4cf5..0000000 Binary files a/database/FTX/4h/XRPBULLUSD.p and /dev/null differ diff --git a/database/FTX/5m/BTCUSD.p b/database/FTX/5m/BTCUSD.p deleted file mode 100644 index 436feec..0000000 Binary files a/database/FTX/5m/BTCUSD.p and /dev/null differ diff --git a/database/HitBTC/1h/ADAUSDT.p b/database/HitBTC/1h/ADAUSDT.p deleted file mode 100644 index 4bb4a7d..0000000 Binary files a/database/HitBTC/1h/ADAUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/BNTUSDT.p b/database/HitBTC/1h/BNTUSDT.p deleted file mode 100644 index 7207330..0000000 Binary files a/database/HitBTC/1h/BNTUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/BTCUSDT.p b/database/HitBTC/1h/BTCUSDT.p deleted file mode 100644 index 092ca4f..0000000 Binary files a/database/HitBTC/1h/BTCUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/BTGUSDT.p b/database/HitBTC/1h/BTGUSDT.p deleted file mode 100644 index 785e101..0000000 Binary files a/database/HitBTC/1h/BTGUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/DASHUSDT.p b/database/HitBTC/1h/DASHUSDT.p deleted file mode 100644 index c5a4255..0000000 Binary files a/database/HitBTC/1h/DASHUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/DOGEUSDT.p b/database/HitBTC/1h/DOGEUSDT.p deleted file mode 100644 index b95f523..0000000 Binary files a/database/HitBTC/1h/DOGEUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/ENJUSDT.p b/database/HitBTC/1h/ENJUSDT.p deleted file mode 100644 index 928f643..0000000 Binary files a/database/HitBTC/1h/ENJUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/EOSUSDT.p b/database/HitBTC/1h/EOSUSDT.p deleted file mode 100644 index 9ec1257..0000000 Binary files a/database/HitBTC/1h/EOSUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/ETCUSDT.p b/database/HitBTC/1h/ETCUSDT.p deleted file mode 100644 index 07ba2b2..0000000 Binary files a/database/HitBTC/1h/ETCUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/ETHUSDT.p b/database/HitBTC/1h/ETHUSDT.p deleted file mode 100644 index a695eab..0000000 Binary files a/database/HitBTC/1h/ETHUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/IOTAUSDT.p b/database/HitBTC/1h/IOTAUSDT.p deleted file mode 100644 index 40ad34a..0000000 Binary files a/database/HitBTC/1h/IOTAUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/LTCUSDT.p b/database/HitBTC/1h/LTCUSDT.p deleted file mode 100644 index 1a8ca73..0000000 Binary files a/database/HitBTC/1h/LTCUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/NEOUSDT.p b/database/HitBTC/1h/NEOUSDT.p deleted file mode 100644 index 68e117d..0000000 Binary files a/database/HitBTC/1h/NEOUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/OMGUSDT.p b/database/HitBTC/1h/OMGUSDT.p deleted file mode 100644 index c710eb1..0000000 Binary files a/database/HitBTC/1h/OMGUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/QTUMUSDT.p b/database/HitBTC/1h/QTUMUSDT.p deleted file mode 100644 index 86dc247..0000000 Binary files a/database/HitBTC/1h/QTUMUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/TRXUSDT.p b/database/HitBTC/1h/TRXUSDT.p deleted file mode 100644 index b5e8a19..0000000 Binary files a/database/HitBTC/1h/TRXUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/XEMUSDT.p b/database/HitBTC/1h/XEMUSDT.p deleted file mode 100644 index 0e55a14..0000000 Binary files a/database/HitBTC/1h/XEMUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/XLMUSDT.p b/database/HitBTC/1h/XLMUSDT.p deleted file mode 100644 index 8fc815e..0000000 Binary files a/database/HitBTC/1h/XLMUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/XMRUSDT.p b/database/HitBTC/1h/XMRUSDT.p deleted file mode 100644 index b9e130f..0000000 Binary files a/database/HitBTC/1h/XMRUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/XRPUSDT.p b/database/HitBTC/1h/XRPUSDT.p deleted file mode 100644 index d691602..0000000 Binary files a/database/HitBTC/1h/XRPUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/XTZUSDT.p b/database/HitBTC/1h/XTZUSDT.p deleted file mode 100644 index abd53e6..0000000 Binary files a/database/HitBTC/1h/XTZUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/XVGUSDT.p b/database/HitBTC/1h/XVGUSDT.p deleted file mode 100644 index ade6245..0000000 Binary files a/database/HitBTC/1h/XVGUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/ZECUSDT.p b/database/HitBTC/1h/ZECUSDT.p deleted file mode 100644 index 4cc62eb..0000000 Binary files a/database/HitBTC/1h/ZECUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/ZILUSDT.p b/database/HitBTC/1h/ZILUSDT.p deleted file mode 100644 index ae91810..0000000 Binary files a/database/HitBTC/1h/ZILUSDT.p and /dev/null differ diff --git a/database/HitBTC/1h/ZRXUSDT.p b/database/HitBTC/1h/ZRXUSDT.p deleted file mode 100644 index 6a27d08..0000000 Binary files a/database/HitBTC/1h/ZRXUSDT.p and /dev/null differ diff --git a/database/pair_list.json b/database/pair_list.json.dist similarity index 100% rename from database/pair_list.json rename to database/pair_list.json.dist diff --git a/live_strategy/alligator_multi_live.py b/live_strategy/alligator_multi_live.py new file mode 100644 index 0000000..a1aba0d --- /dev/null +++ b/live_strategy/alligator_multi_live.py @@ -0,0 +1,171 @@ +import os +import sys +sys.path.append(os.path.dirname(sys.argv[0])+'/..') +from utilities.spot_ftx import SpotFtx +from utilities.bot_logging import BotLogging +from utilities.conf_loader import ConfLoader +import ta +import json +from datetime import datetime +import time + + +with open(os.path.dirname(sys.argv[0])+'/../config/config.json', 'r') as fconfig: + configJson = json.load(fconfig) + config = ConfLoader(configJson) + +with open(os.path.dirname(sys.argv[0])+'/../database/pair_list.json', 'r') as fpairJson: + pairJson = json.load(fpairJson) + fpairJson.close() + +pairList = pairJson['ftxBglacialPair'] + +ftx = SpotFtx( + apiKey=config.strategies.alligator.apiKey, + secret=config.strategies.alligator.secret, + subAccountName=config.strategies.alligator.subAccountName +) + +logger = BotLogging( + config.strategies.alligator.messaging.webhook, + config.strategies.alligator.messaging.username +) + +logger_debug = BotLogging( + config.strategies.alligator.messaging.webhookDebug, + config.strategies.alligator.messaging.username +) + +now = datetime.now() +print(now.strftime("%d-%m %H:%M:%S")) + +logger_debug.send_message("Starting bot {} at {}".format( + config.strategies.alligator.subAccountName, + now.strftime("%d-%m %H:%M:%S")) +) + +coinBalance = ftx.get_all_balance() +coinInUsd = ftx.get_all_balance_in('USD') +usdBalance = coinBalance['USD'] +del coinBalance['USD'] +del coinInUsd['USD'] +totalBalanceInUsd = usdBalance + sum(coinInUsd.values()) +coinPositionList = [] +for coin in coinInUsd: + if coinInUsd[coin] > 0.05 * totalBalanceInUsd: + coinPositionList.append(coin) +openPositions = len(coinPositionList) + +logger_debug.send_message("Total wallet value: {}$".format(totalBalanceInUsd)) + +timeframe = '1h' + +# -- Indicator variable -- +stochWindow = 14 +willWindow = 14 + +# -- Hyper parameters -- +maxOpenPosition = 5 +stochOverBought = 0.8 +stochOverSold = 0.2 +willOverSold = -85 +willOverBought = -10 +TpPct = 0.15 + +dfList = {} +for pair in pairList: + # print(pair) + df = ftx.get_last_historical(pair, timeframe, 1000) + dfList[pair.replace('/USD', '')] = df + +for coin in dfList: + # -- Drop all columns we do not need -- + dfList[coin].drop(columns=dfList[coin].columns.difference(['open', 'high', 'low', 'close', 'volume']), inplace=True) + + # -- Indicators, you can edit every value -- + + dfList[coin]['EMA7'] = ta.trend.ema_indicator(close=dfList[coin]['close'], window=7) + dfList[coin]['EMA30'] = ta.trend.ema_indicator(close=dfList[coin]['close'], window=30) + dfList[coin]['EMA50'] = ta.trend.ema_indicator(close=dfList[coin]['close'], window=50) + dfList[coin]['EMA100'] = ta.trend.ema_indicator(close=dfList[coin]['close'], window=100) + dfList[coin]['EMA121'] = ta.trend.ema_indicator(close=dfList[coin]['close'], window=121) + dfList[coin]['EMA200'] = ta.trend.ema_indicator(close=dfList[coin]['close'], window=200) + + dfList[coin]['STOCH_RSI'] = ta.momentum.stochrsi(close=dfList[coin]['close'], window=stochWindow, smooth1=3, + smooth2=3) + dfList[coin]['WillR'] = ta.momentum.williams_r(high=dfList[coin]['high'], low=dfList[coin]['low'], + close=dfList[coin]['close'], lbp=willWindow) + +print("Data and Indicators loaded 100%") + + +# -- Condition to BUY market -- +def buyCondition(row, previousRow=None): + if ( + row['EMA7'] > row['EMA30'] and row['EMA30'] > row['EMA50'] and row['EMA50'] > row['EMA100'] and row['EMA100'] > row[ + 'EMA121'] and row['EMA121'] > row['EMA200'] + ): + return True + else: + return False + + +# -- Condition to SELL market -- +def sellCondition(row, previousRow=None): + if row['EMA30'] > row['EMA7'] and (row['STOCH_RSI'] > 0.2 or row['WillR'] > willOverBought): + return True + else: + return False + +# Sell +for coin in coinPositionList: + if sellCondition(dfList[coin].iloc[-1]) == True: + openPositions -= 1 + symbol = coin + '/USD' + cancel = ftx.cancel_all_open_order(symbol) + time.sleep(1) + sell = ftx.place_market_order(symbol, 'sell', coinBalance[coin]) + sellPrice = float(ftx.convert_price_to_precision(symbol, ftx.get_bid_ask_price(symbol)['ask'])) + logger.send_message( + 'Sending SELL {} of {} order at {} price'.format(coinBalance[coin], symbol, sellPrice) + ) + print(cancel) + print("Sell", coinBalance[coin], coin, sell) + else: + print("Keep", coin) + +# Buy +if openPositions < maxOpenPosition: + for coin in dfList: + if coin not in coinPositionList: + if buyCondition(dfList[coin].iloc[-1]) == True and openPositions < maxOpenPosition: + time.sleep(1) + usdBalance = ftx.get_balance_of_one_coin('USD') + symbol = coin + '/USD' + + buyPrice = float(ftx.convert_price_to_precision(symbol, ftx.get_bid_ask_price(symbol)['ask'])) + tpPrice = float(ftx.convert_price_to_precision(symbol, buyPrice + TpPct * buyPrice)) + buyQuantityInUsd = usdBalance * 1 / (maxOpenPosition - openPositions) + + if openPositions == maxOpenPosition - 1: + buyQuantityInUsd = 0.95 * buyQuantityInUsd + + buyAmount = ftx.convert_amount_to_precision(symbol, buyQuantityInUsd / buyPrice) + + buy = ftx.place_market_order(symbol, 'buy', buyAmount) + logger.send_message( + 'Sending BUY {} of {} order at {} price'.format(buyAmount, symbol, buyPrice) + ) + print("Buy", buyAmount, coin, 'at', buyPrice, buy) + if config.strategies.alligator.options.tpEnabled: + time.sleep(2) + tp = ftx.place_limit_order(symbol, 'sell', buyAmount, tpPrice) + try: + tp["id"] + except: + time.sleep(2) + tp = ftx.place_limit_order(symbol, 'sell', buyAmount, tpPrice) + pass + print("Place", buyAmount, coin, "TP at", tpPrice, tp) + + openPositions += 1 diff --git a/live_strategy/big_will_v2_live.py b/live_strategy/big_will_v2_live.py index ffc3ab1..5502b2d 100644 --- a/live_strategy/big_will_v2_live.py +++ b/live_strategy/big_will_v2_live.py @@ -1,52 +1,62 @@ +import os import sys -sys.path.append('cBot-Project/utilities') -from custom_indicators import CustomIndocators as ci -from spot_ftx import SpotFtx -import pandas as pd +sys.path.append(os.path.dirname(sys.argv[0])+'/..') +from utilities.spot_ftx import SpotFtx +from utilities.bot_logging import BotLogging +from utilities.conf_loader import ConfLoader import ta -import ccxt +import json from datetime import datetime import time + +with open(os.path.dirname(sys.argv[0])+'/../config/config.json', 'r') as fconfig: + configJson = json.load(fconfig) + config = ConfLoader(configJson) + +with open(os.path.dirname(sys.argv[0])+'/../database/pair_list.json', 'r') as fpairJson: + pairJson = json.load(fpairJson) + fpairJson.close() + +pairList = pairJson['ftxBglacialPair'] + +ftx = SpotFtx( + apiKey=config.strategies.will.apiKey, + secret=config.strategies.will.secret, + subAccountName=config.strategies.will.subAccountName +) + +logger = BotLogging( + config.strategies.will.messaging.webhook, + config.strategies.will.messaging.username +) + +logger_debug = BotLogging( + config.strategies.will.messaging.webhookDebug, + config.strategies.will.messaging.username +) + now = datetime.now() print(now.strftime("%d-%m %H:%M:%S")) -ftx = SpotFtx( - apiKey='', - secret='', - subAccountName='' - ) - -pairList = [ - 'BTC/USD', - 'ETH/USD', - 'BNB/USD', - 'LTC/USD', - 'DOGE/USD', - 'XRP/USD', - 'SOL/USD', - 'AVAX/USD', - 'SHIB/USD', - 'LINK/USD', - 'UNI/USD', - 'MATIC/USD', - 'AXS/USD', - 'CRO/USD', - 'FTT/USD', - 'TRX/USD', - 'BCH/USD', - 'FTM/USD', - 'GRT/USD', - 'AAVE/USD', - 'OMG/USD', - 'SUSHI/USD', - 'MANA/USD', - 'SRM/USD', - 'RUNE/USD', - 'SAND/USD', - 'CHZ/USD', - 'CRV/USD' -] +logger_debug.send_message("Starting bot {} at {}".format( + config.strategies.will.subAccountName, + now.strftime("%d-%m %H:%M:%S")) +) + +coinBalance = ftx.get_all_balance() +coinInUsd = ftx.get_all_balance_in('USD') +usdBalance = coinBalance['USD'] +del coinBalance['USD'] +del coinInUsd['USD'] +totalBalanceInUsd = usdBalance + sum(coinInUsd.values()) +coinPositionList = [] +for coin in coinInUsd: + if coinInUsd[coin] > 0.05 * totalBalanceInUsd: + coinPositionList.append(coin) +openPositions = len(coinPositionList) + +logger_debug.send_message("Total wallet value: {}$".format(totalBalanceInUsd)) timeframe = '1h' @@ -57,7 +67,7 @@ willWindow = 14 # -- Hyper parameters -- -maxOpenPosition = 3 +maxOpenPosition = 4 stochOverBought = 0.8 stochOverSold = 0.2 willOverSold = -85 @@ -67,7 +77,7 @@ dfList = {} for pair in pairList: # print(pair) - df = ftx.get_last_historical(pair, timeframe, 210) + df = ftx.get_last_historical(pair, timeframe, 400) dfList[pair.replace('/USD','')] = df for coin in dfList: @@ -80,7 +90,7 @@ dfList[coin]['WillR'] = ta.momentum.williams_r(high=dfList[coin]['high'], low=dfList[coin]['low'], close=dfList[coin]['close'], lbp=willWindow) dfList[coin]['EMA100'] =ta.trend.ema_indicator(close=dfList[coin]['close'], window=100) dfList[coin]['EMA200'] =ta.trend.ema_indicator(close=dfList[coin]['close'], window=200) - + print("Data and Indicators loaded 100%") # -- Condition to BUY market -- @@ -105,27 +115,20 @@ def sellCondition(row, previousRow=None): return True else: return False - -coinBalance = ftx.get_all_balance() -coinInUsd = ftx.get_all_balance_in_usd() -usdBalance = coinBalance['USD'] -del coinBalance['USD'] -del coinInUsd['USD'] -totalBalanceInUsd = usdBalance + sum(coinInUsd.values()) -coinPositionList = [] -for coin in coinInUsd: - if coinInUsd[coin] > 0.05 * totalBalanceInUsd: - coinPositionList.append(coin) -openPositions = len(coinPositionList) #Sell for coin in coinPositionList: - if sellCondition(dfList[coin].iloc[-2], dfList[coin].iloc[-3]) == True: + if sellCondition(dfList[coin].iloc[-1], dfList[coin].iloc[-2]) == True: openPositions -= 1 symbol = coin+'/USD' + print(symbol) cancel = ftx.cancel_all_open_order(symbol) time.sleep(1) sell = ftx.place_market_order(symbol,'sell',coinBalance[coin]) + sellPrice = float(ftx.convert_price_to_precision(symbol, ftx.get_bid_ask_price(symbol)['ask'])) + logger.send_message( + 'Sending SELL {} of {} order at {} price'.format(coinBalance[coin], symbol, sellPrice) + ) print(cancel) print("Sell", coinBalance[coin], coin, sell) else: @@ -135,7 +138,7 @@ def sellCondition(row, previousRow=None): if openPositions < maxOpenPosition: for coin in dfList: if coin not in coinPositionList: - if buyCondition(dfList[coin].iloc[-2], dfList[coin].iloc[-3]) == True and openPositions < maxOpenPosition: + if buyCondition(dfList[coin].iloc[-1], dfList[coin].iloc[-2]) == True and openPositions < maxOpenPosition: time.sleep(1) usdBalance = ftx.get_balance_of_one_coin('USD') symbol = coin+'/USD' @@ -150,15 +153,19 @@ def sellCondition(row, previousRow=None): buyAmount = ftx.convert_amount_to_precision(symbol, buyQuantityInUsd/buyPrice) buy = ftx.place_market_order(symbol,'buy',buyAmount) - time.sleep(2) - tp = ftx.place_limit_order(symbol,'sell',buyAmount,tpPrice) - try: - tp["id"] - except: + logger.send_message( + 'Sending BUY {} of {} order at {} price'.format(buyAmount, symbol, buyPrice) + ) + print("Buy",buyAmount,coin,'at',buyPrice,buy) + if config.strategies.will.options.tpEnabled: time.sleep(2) tp = ftx.place_limit_order(symbol,'sell',buyAmount,tpPrice) - pass - print("Buy",buyAmount,coin,'at',buyPrice,buy) - print("Place",buyAmount,coin,"TP at",tpPrice, tp) + try: + tp["id"] + except: + time.sleep(2) + tp = ftx.place_limit_order(symbol,'sell',buyAmount,tpPrice) + pass + print("Place",buyAmount,coin,"TP at",tpPrice, tp) openPositions += 1 diff --git a/utilities/bot_logging.py b/utilities/bot_logging.py new file mode 100644 index 0000000..198f03a --- /dev/null +++ b/utilities/bot_logging.py @@ -0,0 +1,20 @@ +import requests + +class BotLogging(): + def __init__(self, webhook=None, username=None): + self.webhook = webhook + self.username = username + + def send_message(self, message): + # for all params, see https://discordapp.com/developers/docs/resources/webhook#execute-webhook + data = { + "content": message, + "username": self.username + } + + result = requests.post(self.webhook, json=data) + + try: + result.raise_for_status() + except requests.exceptions.HTTPError as err: + print(err) \ No newline at end of file diff --git a/utilities/conf_loader.py b/utilities/conf_loader.py new file mode 100644 index 0000000..7521ea3 --- /dev/null +++ b/utilities/conf_loader.py @@ -0,0 +1,9 @@ + +class ConfLoader: + def __init__(self, in_dict: dict): + assert isinstance(in_dict, dict) + for key, val in in_dict.items(): + if isinstance(val, (list, tuple)): + setattr(self, key, [ConfLoader(x) if isinstance(x, dict) else x for x in val]) + else: + setattr(self, key, ConfLoader(val) if isinstance(val, dict) else val) \ No newline at end of file diff --git a/utilities/data_engine.py b/utilities/data_engine.py index a41ca31..a19327f 100644 --- a/utilities/data_engine.py +++ b/utilities/data_engine.py @@ -118,6 +118,10 @@ def download_data(self, symbols, timeframes, start_date='2017-01-01T00:00:00'): df = self.get_historical_from_api(symbol=symbol, timeframe=tf, start_date=start_date) if df is not None and len(df) > 0: try: + if not os.path.isdir(self.path_to_data+self.exchange_name): + os.mkdir(self.path_to_data+self.exchange_name) + if not os.path.isdir(self.path_to_data+self.exchange_name+'/'+tf): + os.mkdir(self.path_to_data+self.exchange_name+'/'+tf) fileName = self.path_to_data+self.exchange_name+'/'+tf+'/'+symbol.replace('/','')+'.p' if os.path.exists(fileName): os.remove(fileName)