{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"<h1 style=\"text-align: center; font-family: Verdana; font-size: 32px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; font-variant: small-caps; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\">G-Research Crypto Forecasting</h1>\n<h2 style=\"text-align: center; font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: underline; text-transform: none; letter-spacing: 2px; color: black; background-color: #ffffff;\">Investigation of Different Financial Plotting Libraries</h2>\n<h5 style=\"text-align: center; font-family: Verdana; font-size: 12px; font-style: normal; font-weight: bold; text-decoration: None; text-transform: none; letter-spacing: 1px; color: black; background-color: #ffffff;\">CREATED BY: DARIEN SCHETTLER</h5>\n\n<br>\n\n---\n\n<br>","metadata":{}},{"cell_type":"markdown","source":"<p id=\"toc\"></p>\n\n<br><br>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\">TABLE OF CONTENTS</h1>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#imports\">0&nbsp;&nbsp;&nbsp;&nbsp;IMPORTS</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#background_information\">1&nbsp;&nbsp;&nbsp;&nbsp;BACKGROUND INFORMATION</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#setup\">2&nbsp;&nbsp;&nbsp;&nbsp;SETUP</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#helper_functions\">3&nbsp;&nbsp;&nbsp;&nbsp;HELPER FUNCTIONS</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#matplotlib_finance\">4&nbsp;&nbsp;&nbsp;&nbsp;MATPLOTLIB FINANCE</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#plotly\">5&nbsp;&nbsp;&nbsp;&nbsp;PLOTLY</a></h3>\n\n---\n\n<h3 style=\"text-indent: 10vw; font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: navy; background-color: #ffffff;\"><a href=\"#cufflinks\">6&nbsp;&nbsp;&nbsp;&nbsp;CUFFLINKS</a></h3>\n\n---\n\n","metadata":{}},{"cell_type":"markdown","source":"<br>\n\n<a id=\"imports\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; background-color: #ffffff; color: #fb806f;\" id=\"imports\">0&nbsp;&nbsp;IMPORTS&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>","metadata":{}},{"cell_type":"code","source":"print(\"\\n... IMPORTS STARTING ...\\n\")\nprint(\"\\n\\tVERSION INFORMATION\")\n# Machine Learning and Data Science Imports\nimport tensorflow as tf; print(f\"\\t\\t– TENSORFLOW VERSION: {tf.__version__}\");\nimport tensorflow_addons as tfa; print(f\"\\t\\t– TENSORFLOW ADDONS VERSION: {tfa.__version__}\");\nimport pandas as pd; pd.options.mode.chained_assignment = None;\nimport numpy as np; print(f\"\\t\\t– NUMPY VERSION: {np.__version__}\");\nimport sklearn; print(f\"\\t\\t– SKLEARN VERSION: {sklearn.__version__}\");\nfrom sklearn.preprocessing import RobustScaler, PolynomialFeatures\nfrom sklearn.model_selection import GroupKFold;\n\n# Competition Specific Imports\nimport gresearch_crypto\nimport cudf, cuml, cupy\n\n!pip -q install mplfinance\n!pip -q install chart_studio\nimport mplfinance as mpf\nimport cufflinks as cf; cf.set_config_file(offline=True)\n\n# Built In Imports\nfrom kaggle_datasets import KaggleDatasets\nfrom collections import Counter\nfrom datetime import datetime\nfrom glob import glob\nimport warnings\nimport requests\nimport imageio\nimport IPython\nimport sklearn\nimport urllib\nimport zipfile\nimport pickle\nimport random\nimport shutil\nimport string\nimport math\nimport time\nimport gzip\nimport ast\nimport sys\nimport io\nimport os\nimport gc\nimport re\n\n# Visualization Imports\nfrom matplotlib.colors import ListedColormap\nimport matplotlib.patches as patches\nimport plotly.graph_objects as go\nimport matplotlib.pyplot as plt\nfrom tqdm.notebook import tqdm; tqdm.pandas();\nimport plotly.express as px\nimport seaborn as sns\nfrom PIL import Image\nimport matplotlib; print(f\"\\t\\t– MATPLOTLIB VERSION: {matplotlib.__version__}\");\nimport plotly\nimport PIL\nimport cv2\n\n\ndef seed_it_all(seed=7):\n    \"\"\" Attempt to be Reproducible \"\"\"\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    random.seed(seed)\n    np.random.seed(seed)\n    tf.random.set_seed(seed)\n\n    \nprint(\"\\n\\n... IMPORTS COMPLETE ...\\n\")\n    \nprint(\"\\n... SEEDING FOR DETERMINISTIC BEHAVIOUR ...\\n\")\nseed_it_all()","metadata":{"execution":{"iopub.status.busy":"2021-11-03T10:52:06.111351Z","iopub.execute_input":"2021-11-03T10:52:06.112067Z","iopub.status.idle":"2021-11-03T10:52:23.260019Z","shell.execute_reply.started":"2021-11-03T10:52:06.112028Z","shell.execute_reply":"2021-11-03T10:52:23.259263Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n<a id=\"background_information\"></a>\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\" id=\"background_information\">1&nbsp;&nbsp;BACKGROUND INFORMATION&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a></h1>\n\n<br><b style=\"text-decoration: underline; font-family: Verdana; text-transform: uppercase;\">What is a Candlestick Chart?</b>\n\n<sub><b>[WIKIPEDIA REFERENCE](http://https://www.wikiwand.com/en/Candlestick_chart#:~:text=A%20candlestick%20chart%20(also%20called,trading%20days%20as%2020%20candlesticks.)</b></sub>\n\nA candlestick chart is a style of financial chart used to describe price movements of a security, derivative, or currency. \n* Each **\"candlestick\"** typically shows one day\n    * thus a one-month chart may show the 20 trading days as 20 candlesticks\n* Candlestick charts can also be built using intervals shorter or longer than one day.\n* It is similar to a bar chart in that each candlestick represents **all four important pieces of information for that day**: \n    * open (top of the thick body)\n    * close (bottom of the thick body)\n    * high (top of the 'candle wick')\n    * low (bottom of the 'candle wick')\n* Being densely packed with information, it tends to represent trading patterns over short periods of time, often a few days or a few trading sessions.\n    \n![example_candle](https://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Candlestick_chart_scheme_03-en.svg/1280px-Candlestick_chart_scheme_03-en.svg.png)\n\n<br>\n\n---\n\n<b><mark>Candlestick charts are a visual aid for decision making in stock, foreign exchange, commodity, and option trading. Candlestick charts serve as a cornerstone of technical analysis.</mark></b>\n\n---\n\n<br>\n\n**HERE IS AN EXAMPLE CANDLESTICK CHART**\n\n![example_chart](https://www.investopedia.com/thmb/eeor7FV9Naokcq8SI8Afm8gzRmc=/2142x1399/filters:fill(auto,1)/GettyImages-867941110-10f3a92a788c4e78abbec428a355618e.jpg)\n","metadata":{}},{"cell_type":"markdown","source":"<br>\n\n\n<a id=\"setup\"></a>\n\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\"  id=\"setup\">2&nbsp;&nbsp;SETUP&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a>\n</h1>","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">2.1 COMPETITION DATA ACCESS</h3>\n\n---","metadata":{}},{"cell_type":"code","source":"print(\"\\n... DATA ACCESS SETUP STARTED ...\\n\")\n\nDATA_DIR = \"/kaggle/input/g-research-crypto-forecasting\"\nprint(f\"\\n... DATA DIRECTORY PATH IS:\\n\\t--> {DATA_DIR}\")\n\nprint(f\"\\n... IMMEDIATE CONTENTS OF DATA DIRECTORY IS:\")\nfor file in tf.io.gfile.glob(os.path.join(DATA_DIR, \"*\")): print(f\"\\t--> {file}\")\n\n    \nprint(\"\\n\\n... DATA ACCESS SETUP COMPLETED ...\\n\")","metadata":{"execution":{"iopub.status.busy":"2021-11-03T10:52:42.404801Z","iopub.execute_input":"2021-11-03T10:52:42.405525Z","iopub.status.idle":"2021-11-03T10:52:42.418831Z","shell.execute_reply.started":"2021-11-03T10:52:42.405489Z","shell.execute_reply":"2021-11-03T10:52:42.418071Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">2.2 BASIC DATA DEFINITIONS & INITIALIZATIONS</h3>\n\n---","metadata":{}},{"cell_type":"code","source":"print(\"\\n... BASIC DATA SETUP STARTING ...\\n\\n\")\n\nprint(\"\\n... ASSET DETAILS DATAFRAME ..\\n\")\nASSET_CSV = os.path.join(DATA_DIR, \"asset_details.csv\")\nasset_df = pd.read_csv(ASSET_CSV)\nasset_df.columns = [_c.lower() for _c in asset_df.columns]\nasset_df[\"asset_name\"] = asset_df[\"asset_name\"].apply(lambda x: x.lower())\nasset_mapping = dict(asset_df[['asset_id', 'asset_name']].values)\nasset_reverse_mapping = {v:k for k,v in asset_mapping.items()}\ndisplay(asset_df.head())\n\nprint(\"\\n... TRAIN DATAFRAME ..\\n\")\nTRAIN_CSV = os.path.join(DATA_DIR, \"train.csv\")\ntrain_df = cudf.read_csv(TRAIN_CSV)\ntrain_df[\"Count\"] = train_df[\"Count\"].astype(\"int32\")\ntrain_df[\"asset_name\"] = train_df[\"Asset_ID\"].map(asset_mapping)\ntrain_df['timestamp'] = cudf.to_datetime(train_df['timestamp'], unit='s')\ntrain_df.columns = [_c.lower() for _c in train_df.columns]\ndisplay(train_df.head())\n\nprint(\"\\n... SUPPLEMENTAL TRAIN DATAFRAME ..\\n\")\nSUPP_TRAIN_CSV = os.path.join(DATA_DIR, \"supplemental_train.csv\")\nsupp_train_df = cudf.read_csv(SUPP_TRAIN_CSV)\nsupp_train_df[\"Count\"] = supp_train_df[\"Count\"].astype(\"int32\")\nsupp_train_df[\"asset_name\"] = supp_train_df[\"Asset_ID\"].map(asset_mapping)\nsupp_train_df['timestamp'] = cudf.to_datetime(supp_train_df['timestamp'], unit='s')\nsupp_train_df.columns = [_c.lower() for _c in supp_train_df.columns]\ndisplay(supp_train_df.head())\n\nprint(\"\\n... EXAMPLE TEST DATAFRAME ..\\n\")\nEX_TEST_CSV = os.path.join(DATA_DIR, \"example_test.csv\")\nex_test_df = cudf.read_csv(EX_TEST_CSV)\nex_test_df[\"Count\"] = ex_test_df[\"Count\"].astype(\"int32\")\nex_test_df[\"asset_name\"] = ex_test_df[\"Asset_ID\"].map(asset_mapping)\nex_test_df['timestamp'] = cudf.to_datetime(ex_test_df['timestamp'], unit='s')\nex_test_df.columns = [_c.lower() for _c in ex_test_df.columns]\ndisplay(ex_test_df.head())\n\nprint(\"\\n... EXAMPLE SAMPLE SUBMISSION DATAFRAME ..\\n\")\nEX_SS_CSV = os.path.join(DATA_DIR, \"example_sample_submission.csv\")\nex_ss_df = cudf.read_csv(EX_SS_CSV)\ndisplay(ex_ss_df.head())\n\n# Set Other Variables\nprint(\"\\n... SETTING OTHER VARIABLES ..\\n\")\n\nprint(\"\\n\\n... BASIC DATA SETUP FINISHING ...\\n\")","metadata":{"execution":{"iopub.status.busy":"2021-11-03T11:26:03.264481Z","iopub.execute_input":"2021-11-03T11:26:03.264751Z","iopub.status.idle":"2021-11-03T11:26:05.627744Z","shell.execute_reply.started":"2021-11-03T11:26:03.264724Z","shell.execute_reply":"2021-11-03T11:26:05.627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n\n<a id=\"helper_functions\"></a>\n\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\" id=\"helper_functions\">\n    3&nbsp;&nbsp;HELPER FUNCTION & CLASSES&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a>\n</h1>","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">3.1 GENERAL HELPER FUNCTIONS</h3>\n\n---","metadata":{}},{"cell_type":"code","source":"def flatten_l_o_l(nested_list):\n    \"\"\" Flatten a list of lists \"\"\"\n    return [item for sublist in nested_list for item in sublist]\n\ndef reduce_crypto_df(df, asset_id=None, asset_name=None, dt_start='2021-04-14 05:45:00', dt_end='2021-04-14 07:00:00', dt_interval=1):\n    \"\"\" Useful function to return the subset of a dataframe with desired information \n    \n    Args:\n        df (CuDF.DataFrame)\n        asset_id (int, optional): Integer mapping for respective Cryptocurrency\n            - 0 through 13 (14 total currencies as shown below)\n        asset_name (str, optional): Name of the asset (cryptocurrency)\n            - [Binance Coin|Bitcoin|Bitcoin Cash|Cardano]\n            - [Dogecoin|EOS.IO|Ethereum|Ethereum Classic]\n            - [IOTA|Litecoin|Maker|Monero|Stellar|TRON]\n        dt_start (str, optional): The datetime to start the plot from (inclusive of this)\n        dt_end (str, optional): The datetime to plot up until (non-inclusive of this) \n        dt_interval (int, optional): The number of minutes per displayed candlestick\n        \n    Returns:\n        a CuDF.DataFrame containing the relevant stock information for the desired time period\n    \"\"\"\n    \n    if asset_id is None:\n        if asset_name is None:\n            raise ValueError(\"asset_id or asset_name must be provided\")\n        else:\n            asset_id = asset_reverse_mapping[asset_name]\n    else:\n        asset_name = asset_mapping[asset_id]\n    \n    return df[df.asset_id==asset_id].set_index('timestamp').loc[dt_start:dt_end:dt_interval]","metadata":{"execution":{"iopub.status.busy":"2021-11-03T11:36:31.103994Z","iopub.execute_input":"2021-11-03T11:36:31.104427Z","iopub.status.idle":"2021-11-03T11:36:31.115413Z","shell.execute_reply.started":"2021-11-03T11:36:31.104388Z","shell.execute_reply":"2021-11-03T11:36:31.114428Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n\n<a id=\"matplotlib_finance\"></a>\n\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\" id=\"matplotlib_finance\">\n    4&nbsp;&nbsp;MATPLOTLIB FINANCE&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a>\n</h1>","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">4.1 BASIC CANDLESTICK PLOT</h3>\n\n---","metadata":{}},{"cell_type":"code","source":"ASSET_NAME = \"ethereum\"\nDT_START = \"2021-04-03 6:00:00\" # My Birthday\nDT_END = \"2021-04-04 18:00:00\"\nDT_INTERVAL = 10\nsub_crypto_df = reduce_crypto_df(train_df, asset_name=ASSET_NAME, dt_start=DT_START, dt_end=DT_END, dt_interval=DT_INTERVAL)\n\nmpf.plot(sub_crypto_df.to_pandas(), \n         title=f'{ASSET_NAME.title()} -- {DT_START} to {DT_END}', \n         type='candle',  # use candlesticks \n         volume=True,    # also show the volume\n         mav=(3,7),      # use three different moving averages\n         figsize=(20,10),\n         figratio=(2,1), # set the ratio of the figure\n         style='yahoo',  # choose the yahoo style\n        )","metadata":{"execution":{"iopub.status.busy":"2021-11-03T12:23:50.991782Z","iopub.execute_input":"2021-11-03T12:23:50.99238Z","iopub.status.idle":"2021-11-03T12:23:52.32255Z","shell.execute_reply.started":"2021-11-03T12:23:50.992339Z","shell.execute_reply":"2021-11-03T12:23:52.321811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n\n<a id=\"plotly\"></a>\n\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\" id=\"plotly\">\n    5&nbsp;&nbsp;PLOTLY&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a>\n</h1>","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">5.1 BASIC CANDLESTICK PLOT</h3>\n\n---","metadata":{}},{"cell_type":"code","source":"ASSET_NAME = \"ethereum\"\nDT_START = \"2021-04-03 6:00:00\" # My Birthday\nDT_END = \"2021-04-04 18:00:00\"\nDT_INTERVAL = 10\nsub_crypto_df = reduce_crypto_df(train_df, asset_name=ASSET_NAME, dt_start=DT_START, dt_end=DT_END, dt_interval=DT_INTERVAL)\n\nfig = go.Figure(data=[go.Candlestick(\n    x=sub_crypto_df.to_pandas().index,\n    open=sub_crypto_df[\"open\"].to_pandas(),\n    high=sub_crypto_df[\"high\"].to_pandas(),\n    low=sub_crypto_df[\"low\"].to_pandas(),\n    close=sub_crypto_df[\"close\"].to_pandas(),\n)])\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-03T12:25:03.077723Z","iopub.execute_input":"2021-11-03T12:25:03.078009Z","iopub.status.idle":"2021-11-03T12:25:03.169584Z","shell.execute_reply.started":"2021-11-03T12:25:03.077981Z","shell.execute_reply":"2021-11-03T12:25:03.168833Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<br>\n\n\n<a id=\"cufflinks\"></a>\n\n\n<h1 style=\"font-family: Verdana; font-size: 24px; font-style: normal; font-weight: bold; text-decoration: none; text-transform: none; letter-spacing: 3px; color: #fb806f; background-color: #ffffff;\" id=\"plotly\">\n    6&nbsp;&nbsp;CUFFLINKS&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"#toc\">&#10514;</a>\n</h1>","metadata":{}},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">6.1 BASIC CANDLESTICK PLOT</h3>\n\n---\n\nTry zooming in or dragging along one axis","metadata":{}},{"cell_type":"code","source":"ASSET_NAME = \"ethereum\"\nDT_START = \"2021-04-03 6:00:00\" # My Birthday\nDT_END = \"2021-04-04 18:00:00\"\nDT_INTERVAL = 10\nsub_crypto_df = reduce_crypto_df(train_df, asset_name=ASSET_NAME, dt_start=DT_START, dt_end=DT_END, dt_interval=DT_INTERVAL)\n\nqf = cf.QuantFig(sub_crypto_df.to_pandas(), columns={k.title():k for k in sub_crypto_df.columns}, name='ETHER')\nqf.iplot()","metadata":{"execution":{"iopub.status.busy":"2021-11-03T12:29:41.058058Z","iopub.execute_input":"2021-11-03T12:29:41.058635Z","iopub.status.idle":"2021-11-03T12:29:41.200645Z","shell.execute_reply.started":"2021-11-03T12:29:41.058598Z","shell.execute_reply":"2021-11-03T12:29:41.199999Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<h3 style=\"font-family: Verdana; font-size: 20px; font-style: normal; font-weight: normal; text-decoration: none; text-transform: none; letter-spacing: 2px; color: #fb806f; background-color: #ffffff;\">6.2 RANDOM EXTRA TECHNICAL DETAILS ON CANDLESTICK PLOT</h3>\n\n---","metadata":{}},{"cell_type":"code","source":"qf = cf.QuantFig(sub_crypto_df.to_pandas(), columns={k.title():k for k in sub_crypto_df.columns}, name='ETHER')\nqf.add_sma([4, 12], width=2, color=['blue', 'red'])\nqf.add_rsi(periods=5, color='green')\nqf.add_bollinger_bands(periods=10, boll_std=2 ,colors=['orange','grey'], fill=True)\nqf.add_volume()\nqf.add_macd()\nqf.iplot()","metadata":{"execution":{"iopub.status.busy":"2021-11-03T12:29:42.260802Z","iopub.execute_input":"2021-11-03T12:29:42.261085Z","iopub.status.idle":"2021-11-03T12:29:42.693639Z","shell.execute_reply.started":"2021-11-03T12:29:42.261055Z","shell.execute_reply":"2021-11-03T12:29:42.693004Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<b><center><font font-family=\"Verdana\" color=\"blue\" size=\"24px\">MORE TO COME - STAY TUNED</font></center></b>","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}