diff --git a/market_trade/notebooks/Make unified candlesticks data import.ipynb b/market_trade/notebooks/Make unified candlesticks data import.ipynb
new file mode 100644
index 0000000..1f05f61
--- /dev/null
+++ b/market_trade/notebooks/Make unified candlesticks data import.ipynb
@@ -0,0 +1,236 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "id": "72ef68e9",
+ "metadata": {},
+ "source": [
+ "Let's try to get filepath of any candlesticks file."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "a58c80ee",
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "PosixPath('/home/parf/projects/marketTrade/data/candlesticks/NZDUSD_5S_2020.09.01_2020.09.30.csv')"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import market_trade.constants\n",
+ "\n",
+ "candlesticks_filepaths = [filepath for filepath in market_trade.constants.CANDLESTICK_DATASETS_PATH.iterdir()]\n",
+ "candlesticks_filepath = candlesticks_filepaths[0]\n",
+ "candlesticks_filepath"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "a2d71d52",
+ "metadata": {},
+ "source": [
+ "Let's import that file to pandas"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 18,
+ "id": "1be511b6",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "
\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " | \n",
+ " open | \n",
+ " high | \n",
+ " low | \n",
+ " close | \n",
+ " vol | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 0.67331 | \n",
+ " 0.67362 | \n",
+ " 0.67331 | \n",
+ " 0.67361 | \n",
+ " 26.24 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 0.67361 | \n",
+ " 0.67362 | \n",
+ " 0.67361 | \n",
+ " 0.67362 | \n",
+ " 4.25 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 0.67362 | \n",
+ " 0.67362 | \n",
+ " 0.67362 | \n",
+ " 0.67362 | \n",
+ " 0.00 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 0.67365 | \n",
+ " 0.67365 | \n",
+ " 0.67363 | \n",
+ " 0.67363 | \n",
+ " 5.50 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 0.67364 | \n",
+ " 0.67364 | \n",
+ " 0.67363 | \n",
+ " 0.67364 | \n",
+ " 10.44 | \n",
+ "
\n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " open high low close vol\n",
+ "0 0.67331 0.67362 0.67331 0.67361 26.24\n",
+ "1 0.67361 0.67362 0.67361 0.67362 4.25\n",
+ "2 0.67362 0.67362 0.67362 0.67362 0.00\n",
+ "3 0.67365 0.67365 0.67363 0.67363 5.50\n",
+ "4 0.67364 0.67364 0.67363 0.67364 10.44"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "\n",
+ "# we set two rows as multiheader, and parse dates in index\n",
+ "candlesticks_df = pd.read_csv(candlesticks_filepath,index_col=0, header=[0,1], parse_dates=True)\n",
+ "candlesticks_df['date'] = candlesticks_df.index \n",
+ "candlesticks_df.reset_index(inplace=True, drop=True)\n",
+ "ask_candlesticks_df = candlesticks_df['ask']\n",
+ "ask_candlesticks_df.head()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "146c9548",
+ "metadata": {},
+ "source": [
+ "Everything imported beatifully."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "id": "d7b086be",
+ "metadata": {},
+ "outputs": [
+ {
+ "ename": "KeyError",
+ "evalue": "'low'",
+ "output_type": "error",
+ "traceback": [
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
+ "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/indexes/base.py:3621\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3620\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3622\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/_libs/index.pyx:136\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/_libs/index.pyx:163\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n",
+ "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5198\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:5206\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n",
+ "\u001b[0;31mKeyError\u001b[0m: 'low'",
+ "\nThe above exception was the direct cause of the following exception:\n",
+ "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
+ "Input \u001b[0;32mIn [17]\u001b[0m, in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[38;5;66;03m# df_candle[:3000],ind_params,True,False,True\u001b[39;00m\n\u001b[1;32m 9\u001b[0m \u001b[38;5;66;03m# window 5..100 (5) | valueType: 'open', 'low' | 'kdev' : 1..4 (0.1)\u001b[39;00m\n\u001b[1;32m 10\u001b[0m indEl1 \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 11\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdf\u001b[39m\u001b[38;5;124m'\u001b[39m: ask_candlesticks_df[:\u001b[38;5;241m3000\u001b[39m],\n\u001b[1;32m 12\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m: ind_params,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdrawFig\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[1;32m 16\u001b[0m }\n\u001b[0;32m---> 17\u001b[0m a \u001b[38;5;241m=\u001b[39m \u001b[43mmarket_trade\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msignals\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSignal1\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mSignalBollingerBands1\u001b[49m\u001b[43m(\u001b[49m\u001b[43m{\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBB\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m:\u001b[49m\u001b[43m \u001b[49m\u001b[43mindEl1\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m~/projects/marketTrade/market_trade/signals/Signal1.py:40\u001b[0m, in \u001b[0;36mSignalBollingerBands1.__init__\u001b[0;34m(self, IndDict, mode)\u001b[0m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28msuper\u001b[39m()\u001b[38;5;241m.\u001b[39m\u001b[38;5;21m__init__\u001b[39m(name\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m1.1\u001b[39m\u001b[38;5;124m'\u001b[39m,mode\u001b[38;5;241m=\u001b[39mmode,target\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnextBar\u001b[39m\u001b[38;5;124m'\u001b[39m,valeType\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mprice\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 39\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mIndDict\u001b[38;5;241m=\u001b[39mIndDict\n\u001b[0;32m---> 40\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mBB\u001b[38;5;241m=\u001b[39m\u001b[43mmarket_trade\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcore\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mInd_bollingerBands\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mBB\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 41\u001b[0m \u001b[43m \u001b[49m\u001b[43mIndDict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBB\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 42\u001b[0m \u001b[43m \u001b[49m\u001b[43mIndDict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBB\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mparams\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 43\u001b[0m \u001b[43m \u001b[49m\u001b[43mIndDict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBB\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mneedFig\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 44\u001b[0m \u001b[43m \u001b[49m\u001b[43mIndDict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBB\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mshowOnlyIndex\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 45\u001b[0m \u001b[43m \u001b[49m\u001b[43mIndDict\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mBB\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdrawFig\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 46\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgetAns()\n\u001b[1;32m 48\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m mode\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mretro\u001b[39m\u001b[38;5;124m'\u001b[39m:\n",
+ "File \u001b[0;32m~/projects/marketTrade/market_trade/core/Ind_bollingerBands.py:36\u001b[0m, in \u001b[0;36mBB.__init__\u001b[0;34m(self, base_df, options, needFig, showOnlyIndex, drawFig)\u001b[0m\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbase_df\u001b[38;5;241m=\u001b[39mbase_df\u001b[38;5;241m.\u001b[39mreset_index(drop\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m 35\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions\u001b[38;5;241m=\u001b[39moptions\n\u001b[0;32m---> 36\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mans\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgetAns\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 37\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m needFig:\n\u001b[1;32m 38\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfig\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpltShow(showOnlyIndex,drawFig)\n",
+ "File \u001b[0;32m~/projects/marketTrade/market_trade/core/Ind_bollingerBands.py:53\u001b[0m, in \u001b[0;36mBB.getAns\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 43\u001b[0m ans\u001b[38;5;241m=\u001b[39m{}\n\u001b[1;32m 45\u001b[0m opMA\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdataType\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mohcl\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 46\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfindMean\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 47\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mactionOptions\u001b[39m\u001b[38;5;124m'\u001b[39m:{\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 51\u001b[0m }\n\u001b[1;32m 52\u001b[0m }\n\u001b[0;32m---> 53\u001b[0m ans[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mBB\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m=\u001b[39m\u001b[43mmarket_trade\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcore\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCoreTraidMath\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mCoreMath\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbase_df\u001b[49m\u001b[43m,\u001b[49m\u001b[43mopMA\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mans\n\u001b[1;32m 54\u001b[0m opSTD\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdataType\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mohcl\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 55\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124maction\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfindSTD\u001b[39m\u001b[38;5;124m'\u001b[39m,\n\u001b[1;32m 56\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mactionOptions\u001b[39m\u001b[38;5;124m'\u001b[39m:{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalueType\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mvalueType\u001b[39m\u001b[38;5;124m'\u001b[39m],\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwindow\u001b[39m\u001b[38;5;124m'\u001b[39m:\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moptions[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mwindow\u001b[39m\u001b[38;5;124m'\u001b[39m]}\n\u001b[1;32m 57\u001b[0m }\n\u001b[1;32m 58\u001b[0m ans[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSTD\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m=\u001b[39mmarket_trade\u001b[38;5;241m.\u001b[39mcore\u001b[38;5;241m.\u001b[39mCoreTraidMath\u001b[38;5;241m.\u001b[39mCoreMath(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbase_df,opSTD)\u001b[38;5;241m.\u001b[39mans\n",
+ "File \u001b[0;32m~/projects/marketTrade/market_trade/core/CoreTraidMath.py:32\u001b[0m, in \u001b[0;36mCoreMath.__init__\u001b[0;34m(self, base_df, params)\u001b[0m\n\u001b[1;32m 30\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparams\u001b[38;5;241m=\u001b[39mparams\n\u001b[1;32m 31\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparams[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdataType\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mohcl\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[0;32m---> 32\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcol\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbase_df\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mactionOptions\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mvalueType\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 33\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparams[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdataType\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;241m==\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mseries\u001b[39m\u001b[38;5;124m'\u001b[39m:\n\u001b[1;32m 34\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcol\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mbase_df\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/frame.py:3504\u001b[0m, in \u001b[0;36mDataFrame.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3502\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_single_key:\n\u001b[1;32m 3503\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mnlevels \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m-> 3504\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_getitem_multilevel\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3505\u001b[0m indexer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns\u001b[38;5;241m.\u001b[39mget_loc(key)\n\u001b[1;32m 3506\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(indexer):\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/frame.py:3555\u001b[0m, in \u001b[0;36mDataFrame._getitem_multilevel\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3553\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_getitem_multilevel\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[1;32m 3554\u001b[0m \u001b[38;5;66;03m# self.columns is a MultiIndex\u001b[39;00m\n\u001b[0;32m-> 3555\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcolumns\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3556\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(loc, (\u001b[38;5;28mslice\u001b[39m, np\u001b[38;5;241m.\u001b[39mndarray)):\n\u001b[1;32m 3557\u001b[0m new_columns \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcolumns[loc]\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/indexes/multi.py:2869\u001b[0m, in \u001b[0;36mMultiIndex.get_loc\u001b[0;34m(self, key, method)\u001b[0m\n\u001b[1;32m 2866\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m mask\n\u001b[1;32m 2868\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m-> 2869\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_level_indexer\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mlevel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2870\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m _maybe_to_slice(loc)\n\u001b[1;32m 2872\u001b[0m keylen \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mlen\u001b[39m(key)\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/indexes/multi.py:3222\u001b[0m, in \u001b[0;36mMultiIndex._get_level_indexer\u001b[0;34m(self, key, level, indexer)\u001b[0m\n\u001b[1;32m 3218\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mslice\u001b[39m(i, j, step)\n\u001b[1;32m 3220\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 3222\u001b[0m idx \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_loc_single_level_index\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlevel_index\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3224\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m level \u001b[38;5;241m>\u001b[39m \u001b[38;5;241m0\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_lexsort_depth \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[1;32m 3225\u001b[0m \u001b[38;5;66;03m# Desired level is not sorted\u001b[39;00m\n\u001b[1;32m 3226\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(idx, \u001b[38;5;28mslice\u001b[39m):\n\u001b[1;32m 3227\u001b[0m \u001b[38;5;66;03m# test_get_loc_partial_timestamp_multiindex\u001b[39;00m\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/indexes/multi.py:2802\u001b[0m, in \u001b[0;36mMultiIndex._get_loc_single_level_index\u001b[0;34m(self, level_index, key)\u001b[0m\n\u001b[1;32m 2800\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 2801\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m-> 2802\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mlevel_index\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n",
+ "File \u001b[0;32m~/.cache/pypoetry/virtualenvs/markettrade-P3YxNLxR-py3.10/lib/python3.10/site-packages/pandas/core/indexes/base.py:3623\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key, method, tolerance)\u001b[0m\n\u001b[1;32m 3621\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3622\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3623\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3624\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3625\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3626\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3627\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3628\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n",
+ "\u001b[0;31mKeyError\u001b[0m: 'low'"
+ ]
+ }
+ ],
+ "source": [
+ "\"\"\"\n",
+ "extract from test signal file\n",
+ "\"\"\"\n",
+ "import market_trade.signals.Signal1\n",
+ "\n",
+ "\n",
+ "ind_params = {'MeanType': 'SMA', 'window': 5, 'valueType': 'low', 'kDev': 2}\n",
+ "# df_candle[:3000],ind_params,True,False,True\n",
+ "# window 5..100 (5) | valueType: 'open', 'low' | 'kdev' : 1..4 (0.1)\n",
+ "indEl1 = {\n",
+ " 'df': ask_candlesticks_df[:3000],\n",
+ " 'params': ind_params,\n",
+ " 'needFig': False,\n",
+ " 'showOnlyIndex': False,\n",
+ " 'drawFig': True\n",
+ "}\n",
+ "a = market_trade.signals.Signal1.SignalBollingerBands1({'BB': indEl1})\n"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Kernel for market_trade development",
+ "language": "python",
+ "name": "markettrade_kernel"
+ },
+ "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.4"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 5
+}
diff --git a/market_trade/notebooks/autogen/Make unified candlesticks data import.py b/market_trade/notebooks/autogen/Make unified candlesticks data import.py
new file mode 100644
index 0000000..1d40725
--- /dev/null
+++ b/market_trade/notebooks/autogen/Make unified candlesticks data import.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# coding: utf-8
+
+# Let's try to get filepath of any candlesticks file.
+
+# In[2]:
+
+
+import market_trade.constants
+
+candlesticks_filepaths = [filepath for filepath in market_trade.constants.CANDLESTICK_DATASETS_PATH.iterdir()]
+candlesticks_filepath = candlesticks_filepaths[0]
+candlesticks_filepath
+
+
+# Let's import that file to pandas
+
+# In[18]:
+
+
+import pandas as pd
+
+# we set two rows as multiheader, and parse dates in index
+candlesticks_df = pd.read_csv(candlesticks_filepath,index_col=0, header=[0,1], parse_dates=True)
+candlesticks_df['date'] = candlesticks_df.index
+candlesticks_df.reset_index(inplace=True, drop=True)
+ask_candlesticks_df = candlesticks_df['ask']
+ask_candlesticks_df.head()
+
+
+# Everything imported beatifully.
+
+# In[17]:
+
+
+"""
+extract from test signal file
+"""
+import market_trade.signals.Signal1
+
+
+ind_params = {'MeanType': 'SMA', 'window': 5, 'valueType': 'low', 'kDev': 2}
+# df_candle[:3000],ind_params,True,False,True
+# window 5..100 (5) | valueType: 'open', 'low' | 'kdev' : 1..4 (0.1)
+indEl1 = {
+ 'df': ask_candlesticks_df[:3000],
+ 'params': ind_params,
+ 'needFig': False,
+ 'showOnlyIndex': False,
+ 'drawFig': True
+}
+a = market_trade.signals.Signal1.SignalBollingerBands1({'BB': indEl1})
+
|