{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from model_intra import get_data, walk_forward_validation\n",
"import lightgbm as lgb\n",
"from sklearn.linear_model import LogisticRegression"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"getting econ tickers: 100%|██████████| 3/3 [00:00<00:00, 6.07it/s]\n",
"Getting release dates: 100%|██████████| 8/8 [00:01<00:00, 4.93it/s]\n",
"Making indicators: 100%|██████████| 8/8 [00:00<00:00, 3996.95it/s]\n",
"Found cached dataset text (C:/Users/WINSTON-ITX/.cache/huggingface/datasets/boomsss___text/boomsss--spx_intra-88eacccda5de09b8/0.0.0/cb1e9bd71a82ad27976be3b12b407850fe2837d80c22c5e03a28949843a8ace2)\n"
]
},
{
"data": {
"application/vnd.jupyter.widget-view+json": {
"model_id": "9bf6344ca1764fb5934dcbe4bcf0f7d8",
"version_major": 2,
"version_minor": 0
},
"text/plain": [
" 0%| | 0/3 [00:00, ?it/s]"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"^GSPC: No data found for this date range, symbol may be delisted\n",
"^VIX: No data found for this date range, symbol may be delisted\n",
"^VVIX: No data found for this date range, symbol may be delisted\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"Merging econ data: 100%|██████████| 8/8 [00:00<00:00, 1006.07it/s]\n"
]
}
],
"source": [
"data, df_final, final_row = get_data(3)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['BigNewsDay', 'Quarter', 'Perf5Day', 'Perf5Day_n1', 'DaysGreen',\n",
" 'DaysRed', 'CurrentHigh30toClose', 'CurrentLow30toClose',\n",
" 'CurrentClose30toClose', 'CurrentRange30', 'GapFill30', 'CurrentGap',\n",
" 'RangePct', 'RangePct_n1', 'RangePct_n2', 'OHLC4_VIX', 'OHLC4_VIX_n1',\n",
" 'OHLC4_VIX_n2', 'OHLC4_Current_Trend', 'OHLC4_Trend', 'CurrentVIXTrend',\n",
" 'SPX30IntraPerf', 'VIX30IntraPerf', 'VVIX30IntraPerf', 'L1TouchPct',\n",
" 'L2TouchPct', 'H1TouchPct', 'H2TouchPct', 'L1BreakPct', 'L2BreakPct',\n",
" 'H1BreakPct', 'H2BreakPct', 'GreenProbas', 'H1BreakTouchPct',\n",
" 'H2BreakTouchPct', 'L1BreakTouchPct', 'L2BreakTouchPct',\n",
" 'H1BreakH2TouchPct', 'L1BreakL2TouchPct', 'H1TouchGreenPct',\n",
" 'L1TouchRedPct', 'Target', 'Target_clf'],\n",
" dtype='object')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.columns"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Open | \n",
" High | \n",
" Low | \n",
" Close | \n",
" Volume | \n",
" Dividends | \n",
" Stock Splits | \n",
" Open30 | \n",
" Open_VIX30 | \n",
" Open_VVIX30 | \n",
" ... | \n",
" FOMC_shift | \n",
" UNEMP | \n",
" UNEMP_shift | \n",
" ADP | \n",
" ADP_shift | \n",
" PCE | \n",
" PCE_shift | \n",
" BigNewsDay | \n",
" DaysGreen | \n",
" DaysRed | \n",
"
\n",
" \n",
" \n",
" \n",
" 2018-07-02 | \n",
" 2704.949951 | \n",
" 2727.260010 | \n",
" 2698.949951 | \n",
" 2726.709961 | \n",
" 3095040000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2704.95 | \n",
" 17.84 | \n",
" 111.39 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 0 | \n",
"
\n",
" \n",
" 2018-07-03 | \n",
" 2733.270020 | \n",
" 2736.580078 | \n",
" 2711.159912 | \n",
" 2713.219971 | \n",
" 1911460000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2733.27 | \n",
" 15.11 | \n",
" 103.24 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0 | \n",
" 1 | \n",
"
\n",
" \n",
" 2018-07-05 | \n",
" 2724.189941 | \n",
" 2737.830078 | \n",
" 2716.020020 | \n",
" 2736.610107 | \n",
" 2980160000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2724.19 | \n",
" 15.18 | \n",
" 103.44 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 2018-07-06 | \n",
" 2737.679932 | \n",
" 2764.409912 | \n",
" 2733.520020 | \n",
" 2759.820068 | \n",
" 2590250000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2737.68 | \n",
" 14.88 | \n",
" 102.85 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2 | \n",
" 0 | \n",
"
\n",
" \n",
" 2018-07-09 | \n",
" 2775.620117 | \n",
" 2784.649902 | \n",
" 2770.729980 | \n",
" 2784.169922 | \n",
" 3070060000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2768.51 | \n",
" 13.13 | \n",
" 96.43 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 3 | \n",
" 0 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2023-10-30 | \n",
" 4139.390137 | \n",
" 4177.470215 | \n",
" 4132.939941 | \n",
" 4166.819824 | \n",
" 3911140000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4139.39 | \n",
" 20.51 | \n",
" 100.31 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1 | \n",
" 0 | \n",
"
\n",
" \n",
" 2023-10-31 | \n",
" 4171.330078 | \n",
" 4195.549805 | \n",
" 4153.120117 | \n",
" 4193.799805 | \n",
" 4249470000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4171.33 | \n",
" 19.57 | \n",
" 94.57 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2 | \n",
" 0 | \n",
"
\n",
" \n",
" 2023-11-01 | \n",
" 4201.270020 | \n",
" 4245.640137 | \n",
" 4197.740234 | \n",
" 4237.859863 | \n",
" 4224900000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4201.27 | \n",
" 17.96 | \n",
" 87.09 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 3 | \n",
" 0 | \n",
"
\n",
" \n",
" 2023-11-02 | \n",
" 4268.259766 | \n",
" 4319.720215 | \n",
" 4268.259766 | \n",
" 4317.779785 | \n",
" 4669780000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4268.26 | \n",
" 16.32 | \n",
" 83.91 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4 | \n",
" 0 | \n",
"
\n",
" \n",
" 2023-11-03 | \n",
" 4334.229980 | \n",
" 4373.620117 | \n",
" 4334.229980 | \n",
" 4358.339844 | \n",
" 4570960000 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4334.23 | \n",
" 15.32 | \n",
" 83.03 | \n",
" ... | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 5 | \n",
" 0 | \n",
"
\n",
" \n",
"
\n",
"
1338 rows × 138 columns
\n",
"
"
],
"text/plain": [
" Open High Low Close Volume \\\n",
"2018-07-02 2704.949951 2727.260010 2698.949951 2726.709961 3095040000 \n",
"2018-07-03 2733.270020 2736.580078 2711.159912 2713.219971 1911460000 \n",
"2018-07-05 2724.189941 2737.830078 2716.020020 2736.610107 2980160000 \n",
"2018-07-06 2737.679932 2764.409912 2733.520020 2759.820068 2590250000 \n",
"2018-07-09 2775.620117 2784.649902 2770.729980 2784.169922 3070060000 \n",
"... ... ... ... ... ... \n",
"2023-10-30 4139.390137 4177.470215 4132.939941 4166.819824 3911140000 \n",
"2023-10-31 4171.330078 4195.549805 4153.120117 4193.799805 4249470000 \n",
"2023-11-01 4201.270020 4245.640137 4197.740234 4237.859863 4224900000 \n",
"2023-11-02 4268.259766 4319.720215 4268.259766 4317.779785 4669780000 \n",
"2023-11-03 4334.229980 4373.620117 4334.229980 4358.339844 4570960000 \n",
"\n",
" Dividends Stock Splits Open30 Open_VIX30 Open_VVIX30 ... \\\n",
"2018-07-02 0.0 0.0 2704.95 17.84 111.39 ... \n",
"2018-07-03 0.0 0.0 2733.27 15.11 103.24 ... \n",
"2018-07-05 0.0 0.0 2724.19 15.18 103.44 ... \n",
"2018-07-06 0.0 0.0 2737.68 14.88 102.85 ... \n",
"2018-07-09 0.0 0.0 2768.51 13.13 96.43 ... \n",
"... ... ... ... ... ... ... \n",
"2023-10-30 0.0 0.0 4139.39 20.51 100.31 ... \n",
"2023-10-31 0.0 0.0 4171.33 19.57 94.57 ... \n",
"2023-11-01 0.0 0.0 4201.27 17.96 87.09 ... \n",
"2023-11-02 0.0 0.0 4268.26 16.32 83.91 ... \n",
"2023-11-03 0.0 0.0 4334.23 15.32 83.03 ... \n",
"\n",
" FOMC_shift UNEMP UNEMP_shift ADP ADP_shift PCE PCE_shift \\\n",
"2018-07-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2018-07-03 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2018-07-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2018-07-06 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2018-07-09 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"... ... ... ... ... ... ... ... \n",
"2023-10-30 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2023-10-31 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2023-11-01 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2023-11-02 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"2023-11-03 0.0 0.0 0.0 0.0 0.0 0.0 0.0 \n",
"\n",
" BigNewsDay DaysGreen DaysRed \n",
"2018-07-02 0.0 0 0 \n",
"2018-07-03 0.0 0 1 \n",
"2018-07-05 0.0 1 0 \n",
"2018-07-06 0.0 2 0 \n",
"2018-07-09 0.0 3 0 \n",
"... ... ... ... \n",
"2023-10-30 0.0 1 0 \n",
"2023-10-31 0.0 2 0 \n",
"2023-11-01 0.0 3 0 \n",
"2023-11-02 0.0 4 0 \n",
"2023-11-03 0.0 5 0 \n",
"\n",
"[1338 rows x 138 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" BigNewsDay | \n",
" Quarter | \n",
" Perf5Day | \n",
" Perf5Day_n1 | \n",
" DaysGreen | \n",
" DaysRed | \n",
" CurrentHigh30toClose | \n",
" CurrentLow30toClose | \n",
" CurrentClose30toClose | \n",
" CurrentRange30 | \n",
" ... | \n",
" GreenProbas | \n",
" H1BreakTouchPct | \n",
" H2BreakTouchPct | \n",
" L1BreakTouchPct | \n",
" L2BreakTouchPct | \n",
" H1BreakH2TouchPct | \n",
" L1BreakL2TouchPct | \n",
" H1TouchGreenPct | \n",
" L1TouchRedPct | \n",
" Target_clf | \n",
"
\n",
" \n",
" \n",
" \n",
" 2018-07-02 | \n",
" 0.0 | \n",
" 3 | \n",
" False | \n",
" True | \n",
" 0 | \n",
" 0 | \n",
" 0.003620 | \n",
" 0.000356 | \n",
" 0.000855 | \n",
" 0.003264 | \n",
" ... | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" False | \n",
"
\n",
" \n",
" 2018-07-03 | \n",
" 0.0 | \n",
" 3 | \n",
" False | \n",
" False | \n",
" 0 | \n",
" 1 | \n",
" 0.006258 | \n",
" 0.001032 | \n",
" 0.001633 | \n",
" 0.005226 | \n",
" ... | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" True | \n",
"
\n",
" \n",
" 2018-07-05 | \n",
" 0.0 | \n",
" 3 | \n",
" False | \n",
" False | \n",
" 1 | \n",
" 0 | \n",
" 0.005134 | \n",
" -0.001129 | \n",
" 0.004644 | \n",
" 0.006263 | \n",
" ... | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" True | \n",
"
\n",
" \n",
" 2018-07-06 | \n",
" 0.0 | \n",
" 3 | \n",
" False | \n",
" False | \n",
" 2 | \n",
" 0 | \n",
" 0.006529 | \n",
" 0.003149 | \n",
" 0.006500 | \n",
" 0.003381 | \n",
" ... | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" True | \n",
"
\n",
" \n",
" 2018-07-09 | \n",
" 0.0 | \n",
" 3 | \n",
" False | \n",
" False | \n",
" 3 | \n",
" 0 | \n",
" 0.004098 | \n",
" 0.001236 | \n",
" 0.003653 | \n",
" 0.002863 | \n",
" ... | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" NaN | \n",
" True | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 2023-10-27 | \n",
" 0.0 | \n",
" 4 | \n",
" False | \n",
" False | \n",
" 0 | \n",
" 3 | \n",
" 0.011204 | \n",
" 0.003782 | \n",
" 0.005545 | \n",
" 0.007422 | \n",
" ... | \n",
" 0.857143 | \n",
" 0.487805 | \n",
" 0.437500 | \n",
" 0.651163 | \n",
" 0.407407 | \n",
" 0.812500 | \n",
" 0.888889 | \n",
" 0.780488 | \n",
" 0.604651 | \n",
" True | \n",
"
\n",
" \n",
" 2023-10-30 | \n",
" 0.0 | \n",
" 4 | \n",
" False | \n",
" False | \n",
" 1 | \n",
" 0 | \n",
" 0.002122 | \n",
" -0.003288 | \n",
" 0.001543 | \n",
" 0.005409 | \n",
" ... | \n",
" 0.609023 | \n",
" 0.500000 | \n",
" 0.437500 | \n",
" 0.651163 | \n",
" 0.407407 | \n",
" 0.812500 | \n",
" 0.888889 | \n",
" 0.785714 | \n",
" 0.604651 | \n",
" True | \n",
"
\n",
" \n",
" 2023-10-31 | \n",
" 0.0 | \n",
" 4 | \n",
" False | \n",
" False | \n",
" 2 | \n",
" 0 | \n",
" 0.008472 | \n",
" 0.000940 | \n",
" 0.007020 | \n",
" 0.007533 | \n",
" ... | \n",
" 0.887218 | \n",
" 0.500000 | \n",
" 0.437500 | \n",
" 0.651163 | \n",
" 0.407407 | \n",
" 0.812500 | \n",
" 0.888889 | \n",
" 0.785714 | \n",
" 0.604651 | \n",
" True | \n",
"
\n",
" \n",
" 2023-11-01 | \n",
" 0.0 | \n",
" 4 | \n",
" True | \n",
" False | \n",
" 3 | \n",
" 0 | \n",
" 0.015598 | \n",
" 0.007173 | \n",
" 0.015564 | \n",
" 0.008424 | \n",
" ... | \n",
" 0.910448 | \n",
" 0.511628 | \n",
" 0.411765 | \n",
" 0.651163 | \n",
" 0.407407 | \n",
" 0.823529 | \n",
" 0.888889 | \n",
" 0.790698 | \n",
" 0.604651 | \n",
" True | \n",
"
\n",
" \n",
" 2023-11-02 | \n",
" 0.0 | \n",
" 4 | \n",
" True | \n",
" True | \n",
" 4 | \n",
" 0 | \n",
" 0.010813 | \n",
" 0.003810 | \n",
" 0.007928 | \n",
" 0.007004 | \n",
" ... | \n",
" 0.887218 | \n",
" 0.511628 | \n",
" 0.444444 | \n",
" 0.651163 | \n",
" 0.407407 | \n",
" 0.833333 | \n",
" 0.888889 | \n",
" 0.790698 | \n",
" 0.604651 | \n",
" True | \n",
"
\n",
" \n",
"
\n",
"
1337 rows × 42 columns
\n",
"
"
],
"text/plain": [
" BigNewsDay Quarter Perf5Day Perf5Day_n1 DaysGreen DaysRed \\\n",
"2018-07-02 0.0 3 False True 0 0 \n",
"2018-07-03 0.0 3 False False 0 1 \n",
"2018-07-05 0.0 3 False False 1 0 \n",
"2018-07-06 0.0 3 False False 2 0 \n",
"2018-07-09 0.0 3 False False 3 0 \n",
"... ... ... ... ... ... ... \n",
"2023-10-27 0.0 4 False False 0 3 \n",
"2023-10-30 0.0 4 False False 1 0 \n",
"2023-10-31 0.0 4 False False 2 0 \n",
"2023-11-01 0.0 4 True False 3 0 \n",
"2023-11-02 0.0 4 True True 4 0 \n",
"\n",
" CurrentHigh30toClose CurrentLow30toClose CurrentClose30toClose \\\n",
"2018-07-02 0.003620 0.000356 0.000855 \n",
"2018-07-03 0.006258 0.001032 0.001633 \n",
"2018-07-05 0.005134 -0.001129 0.004644 \n",
"2018-07-06 0.006529 0.003149 0.006500 \n",
"2018-07-09 0.004098 0.001236 0.003653 \n",
"... ... ... ... \n",
"2023-10-27 0.011204 0.003782 0.005545 \n",
"2023-10-30 0.002122 -0.003288 0.001543 \n",
"2023-10-31 0.008472 0.000940 0.007020 \n",
"2023-11-01 0.015598 0.007173 0.015564 \n",
"2023-11-02 0.010813 0.003810 0.007928 \n",
"\n",
" CurrentRange30 ... GreenProbas H1BreakTouchPct \\\n",
"2018-07-02 0.003264 ... NaN NaN \n",
"2018-07-03 0.005226 ... NaN NaN \n",
"2018-07-05 0.006263 ... NaN NaN \n",
"2018-07-06 0.003381 ... NaN NaN \n",
"2018-07-09 0.002863 ... NaN NaN \n",
"... ... ... ... ... \n",
"2023-10-27 0.007422 ... 0.857143 0.487805 \n",
"2023-10-30 0.005409 ... 0.609023 0.500000 \n",
"2023-10-31 0.007533 ... 0.887218 0.500000 \n",
"2023-11-01 0.008424 ... 0.910448 0.511628 \n",
"2023-11-02 0.007004 ... 0.887218 0.511628 \n",
"\n",
" H2BreakTouchPct L1BreakTouchPct L2BreakTouchPct \\\n",
"2018-07-02 NaN NaN NaN \n",
"2018-07-03 NaN NaN NaN \n",
"2018-07-05 NaN NaN NaN \n",
"2018-07-06 NaN NaN NaN \n",
"2018-07-09 NaN NaN NaN \n",
"... ... ... ... \n",
"2023-10-27 0.437500 0.651163 0.407407 \n",
"2023-10-30 0.437500 0.651163 0.407407 \n",
"2023-10-31 0.437500 0.651163 0.407407 \n",
"2023-11-01 0.411765 0.651163 0.407407 \n",
"2023-11-02 0.444444 0.651163 0.407407 \n",
"\n",
" H1BreakH2TouchPct L1BreakL2TouchPct H1TouchGreenPct \\\n",
"2018-07-02 NaN NaN NaN \n",
"2018-07-03 NaN NaN NaN \n",
"2018-07-05 NaN NaN NaN \n",
"2018-07-06 NaN NaN NaN \n",
"2018-07-09 NaN NaN NaN \n",
"... ... ... ... \n",
"2023-10-27 0.812500 0.888889 0.780488 \n",
"2023-10-30 0.812500 0.888889 0.785714 \n",
"2023-10-31 0.812500 0.888889 0.785714 \n",
"2023-11-01 0.823529 0.888889 0.790698 \n",
"2023-11-02 0.833333 0.888889 0.790698 \n",
"\n",
" L1TouchRedPct Target_clf \n",
"2018-07-02 NaN False \n",
"2018-07-03 NaN True \n",
"2018-07-05 NaN True \n",
"2018-07-06 NaN True \n",
"2018-07-09 NaN True \n",
"... ... ... \n",
"2023-10-27 0.604651 True \n",
"2023-10-30 0.604651 True \n",
"2023-10-31 0.604651 True \n",
"2023-11-01 0.604651 True \n",
"2023-11-02 0.604651 True \n",
"\n",
"[1337 rows x 42 columns]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_final.drop(columns='Target')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 1336/1336 [00:12<00:00, 108.26it/s]\n",
"Calibrating Probas: 100%|██████████| 1336/1336 [00:03<00:00, 426.27it/s]\n"
]
}
],
"source": [
"df_results, model = walk_forward_validation(df=df_final.drop(columns='Target'), target_column='Target_clf', num_periods=1)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.8129370589535423\n",
"0.7519788918205804\n",
"0.8039492242595204\n"
]
}
],
"source": [
"from sklearn.metrics import mean_squared_error, roc_auc_score, precision_score, recall_score\n",
"res = df_results.dropna()\n",
"print(roc_auc_score(res['True'].astype(bool), res['Predicted']))\n",
"print(precision_score(res['True'].astype(bool), res['Predicted'] > 0.5))\n",
"print(recall_score(res['True'].astype(bool), res['Predicted'] > 0.5))"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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pGXLlowYMYJ69epRtmzZjPoff/xxRhBi37597N69m3HjxvH6668THx/PPffcA8DMmTPZv38/8fHxBz0/Pj6e559/nnr16hETE3NcxijHVygUyvJ7FckrND8lL9P8lLxKc1Pysvw4P0+nQMKx8B7BGQaB5IhrA25099WRFczscWAL4RUFBYB9Edk/EQ44NCQccDgcqRy89aRYFHX2R1yncfDv96DzGI72DIDihQuyemi7o2ojN+eeey7nnXceq1evpmbNmsyePZs6depwwQUXMHfuXFq2bMmaNWv47bffsnzYHzJkCEOGDAHC/1GPGDGC119/HYCtW7dSrlw59u/fzzPPPMPAgQMB+O6777jgggswM77++mv279/PH/7wh+M2PhERERERkVNVvjgj4TA0B77PIe9joLcFn8DNrGGQfhbhFQIHgD8DBSPq7ATaAUPMLD6Hdj8FbjGzgsF2gxbAAuAHoI6ZFQ22UlwZlF8NlDezJkE/SpnZkQSEvgRamNn5QTtlgvQ9hLd5nHSjR4+mU6dOxMbGkpCQwMMPP0y3bt343//+R7169bj11luZMGECZsamTZto27btIdscPnw4tWvXJjY2lmuvvZY//vGPALz99tvUq1ePuLg47rnnHt566y0duCgiIiIiIpKNfLEiIfjQPRU4G7jWzAa7e90gO/2MBAN+A3L63r8ngVHAUjMrAKwlfN7AS8DbZnYHMIODVzHg7lvMrD3wkZl1c/evMrU7FWgGJAIO9HP3zUG//wMsD561JGjvt2ALxmgzK074fISrDveduPvPwZkH7wTj2Qq0At4HpgSHSfZ2908Pt+1jJS4uLuNgxEjpqwsiVahQgenTp2dJj4+PP2iZ0fDhwxk+fHiWcv3796d///5H12EREREREZF84LQJJLh7yUz344HxwfVCoFI2ddYBxXNoL6N+cL8X6JlNuW+B2Iik/kF6CAgF1z8CdTPVqxpx+1Dwk7ntfkC/bNIXAk0zJWfub/scnhXZzkfAR5nS1mQaj4iIiIiIiEgGbW0QERERERERkagpkCAiIiIiIiIiUVMgQURERERERESipkCCiIiIiIiIiERNgQQRERERERERiZoCCSIiIiIiIiISNQUSRERERERERCRqCiRInlO1alXq169PXFwcjRs3BiAxMZFmzZpRv359rr32Wnbv3p1t3eeff5569epRt25dRo0alZH+0EMPUatWLWJjY+nYsSM7d+7MyBsyZAjVq1enZs2afPzxx8dzaCIiIiIiIqe8fBtIMLOBZrbCzJaaWYKZXWJmITNbbWaJZva5mdU0s4JmttjMWkTUnWlmfwquZwTlV5jZy2ZWMEgvY2azzOzb4N+zg/QuZjbmEH2rama3H+G40oLxLDezyWZW4jDrDw/GMvxInn+szJ07l4SEBBYtWgRA9+7dGTp0KMuWLaNjx44MH561e8uXL+ef//wnCxYsIDExkQ8++IDvvvsOgFatWrF8+XKWLl1KjRo1GDJkCAArV65k0qRJrFixghkzZnD33XeTlpZ24gYqIiIiIiJyismXgQQzawa0Bxq5eyxwFbA+yO7k7g2ACcBwd08D7gbGmFlhM7sNOODuk4PyNwfl6wFlgT8F6QOA2e5+ITA7uI9WVSDbQIKZFTpE3b3uHufu9YDfgF7RPDCi3R5ArLs/FGVfT4g1a9bQokU4ltOqVSvefvvtLGW++eYbLrnkEkqUKEGhQoW44ooreOeddwBo3bo1hQqFh9i0aVM2bNgAwLRp07j11lspWrQo559/PtWrV2fBggUnaFQiIiIiIiKnnkN9KD1dlQe2uft+AHffBmBmkWU+Ae4P8r8ys/nA44Q/4LdKL+Tu6WvsCwFFAA/urwPig+sJQAjoH/kAMxsP7AYaA+cC/dx9CjAUqG1mCUHdHcANQEmgoJm1A6YBZwOFgUfcfVo24/wUiDWzM4DRhIMdhYHH3X2amXXJ1O6u4HqxmQ1x97dyeoF7U9KoOuDDnLIP27qh7TKuzYzWrVtjZvTs2ZMePXpQt25dpk2bxvXXX8/kyZNZv359ljbq1avHwIED2b59O8WLF2f69OkZWyMivfrqq9xyyy0AbNy4kaZNm2bkVapUiY0bNx6zcYmIiIiIiJxu8msgYSYwyMzWAP8F3nL3eZnKXAssi7j/K+FVC6Pc/bvIgmb2MXAx8BEwJUg+x91/Cq43A+fk0JfyQHOgFvBeUH8A0Nfd2wftdwEaEV4p8EuweqCju+82sxjgSzN7z93TgxjpKwyuAWYAA4E57t7NzEoDC8zsv0HRjHaDeknuHpdDX0+Izz77jIoVK7J161ZatWpFrVq1ePXVV7nvvvt48skn6dChA0WKFMlSr3bt2vTv35/WrVtzxhlnEBcXR8GCBQ8q8/TTT1OoUCE6dep0ooYjIiIiIiJyWsmXgQR3TzKzi4DLgZbAW2aWvvXgDTPbC6wDekdUawHsIvxX/cztXW1mxYA3gD8CszLlu5l55nqBd939ALDSzHIKNgDMSv+wDxjwt+DchgNARcKBis1A8WAlA4RXJLwCfAF0MLO+QXoxoHI27ebKzHoQ3vpATExZBtVPjaZaVEKh0EH33377LQANGzZk4sSJ3HLLLTz88MMArF+/nnLlymWpA3DBBRcwcuRIAP75z39StmzZjHIzZszg/fffZ+TIkcybF44b7d+/n3nz5lGpUiUAli5dSqNGjbJtW04dSUlJ+h1KnqX5KXmZ5qfkVZqbkpflx/mZLwMJAMHZByEgZGbLgM5BVid3XxRZNtgaMIxwkOBfZtbW3adnam+fmU0jvKVhFrDFzMq7+09mVh7YmkNX9kc+KpcuJ0dcdyJ8HsNF7p5iZusIBwcgOCMhU/8NuNHdV2dKvyRTu7ly97HAWICaNWt6707XRVs1asnJyRw4cIBSpUqRnJzMww8/zKBBg6hTpw7lypXjwIEDdOnShYceeoj4+Pgs9bdu3Uq5cuX48ccfWbx4MV9++SWlS5dmxowZvPfee8ybN4+yZctmlC9btiy33347Y8aMYdOmTWzfvp1evXplWckgp5ZQKJTt/BDJCzQ/JS/T/JS8SnNT8rL8OD/z62GLNc3swoikOOCHXKoMAv7j7qsIH7z4nJkVM7OSQZAgfStBO2BVUOc9fg9OdCZ8pkG09gClcsk/C9gaBBFaAlUO0d7HQO8goICZNTyMvpxQW7ZsoXnz5jRo0ICLL76Ydu3a0aZNGyZOnEiNGjWoVasWFSpUoGvXrgBs2rSJtm3bZtS/8cYbqVOnDtdeey0vvvgipUuXBuDee+9lz549tGrViri4OHr1Cp9BWbduXW6++Wbq1KlDmzZtePHFFxVEEBERERERyUV+XZFQEhgdnBeQCnxHeMn+lMwFzawu0BFoAODuS4IzEfoDLwPvmVlRwkGZuUEahA9M/I+Z3Uk4SHHzYfRvKZBmZonAeMKHLUZ6A3g/WEmxiN+DFzl5EhgFLDWzAsBawt9akedUq1aNxMTELOl9+vShT58+WdIrVKjA9Om/Lw759NNPs203/WsgszNw4EAGDhx4BL0VERERERHJf/JlIMHdFwOXZpMVn03ZFUCNTGn3Rdw2yeEZ24Ers0kfTzg4gLt3yZRXMvg3hfA2ikjjI8ptA5rl8NyS2aTtBXrm1pfc6ouIiIiIiIiky5dbG0RERERERETkyCiQICIiIiIiIiJRUyBBRERERERERKKmQIKIiIiIiIiIRE2BBBERERERERGJmgIJIiIiIiIiIhI1BRJEREREREREJGoKJIiIiIiIiIhI1BRIkDylatWq1K9fn7i4OBo3bgxAYmIizZo1o379+lx77bXs3r076rqRRo4ciZmxbds2ANyd++67j+rVqxMbG8vXX399/AYmIiIiIiJymjitAwlmdq6ZTTKz781ssZlNN7MaJ/D58WZ2acT942a20cwSzGylmd12ovoSPH+GmSWa2Qoze9nMCgbpZcxslpl9G/x79onsV2Zz584lISGBRYsWAdC9e3eGDh3KsmXL6NixI8OHD4+6brr169czc+ZMKleunJH20Ucf8e233/Ltt98yduxY7rrrruMzIBERERERkdNIoZPdgePFzAyYCkxw91uDtAbAOcCaKOoXdPe0nO6jFA8kAV9EpD3n7iPM7EJgsZlNcfeUw2z3SN3s7ruDdzMF+BMwCRgAzHb3oWY2ILjvn1tDe1PSqDrgw2PWsXVD2+WYt2bNGlq0aAFAq1atuPrqq3nyyScPq/0HHniAYcOGcd1112WkTZs2jTvuuAMzo2nTpuzcuZOffvqJ8uXLH9kgRERERERE8oHTeUVCSyDF3V9OT3D3RKCgmX2QnmZmY8ysS3C9zsyeMbOvgT9lc9/azOab2ddmNtnMSkbUGxykLzOzWmZWFegFPBCsQLg8snPu/i3wK3B20MbfzWxRsFpgcET/srQdpJcNVg+sMLNxZvaDmcUEef9nZguC5/4jfeWBu6fvCSgEFAE8uL8OmBBcTwCuP5oXfzTMjNatW3PRRRcxduxYAOrWrcu0adMAmDx5MuvXr4+6LoQDBhUrVqRBgwYHld+4cSPnnXdexn2lSpXYuHHjsR6SiIiIiIjIaeW0XZEA1AMWH0G97e7eCMDMhqbfBx/S3wGucvdkM+sPPAg8EdTbFpS7G+jr7t3N7GUgyd1HBO1dmf4QM2sEfOvuW4Okge7+S/Chf7aZxbr70uzaBroDjwFz3H2ImbUB7gzarQ3cAlzm7ilm9hLQCfh3kP8xcDHwEeFVCQDnuPtPwfVmwqs2sjCzHkAPgJiYsgyqn3q47zZHoVAIgGHDhlG2bFl27NhB37592bt3L7169eLpp5+mX79+XHbZZRQoUCCjfKTs6tasWZMBAwYwfPhwQqEQ+/bt4/PPP+ess85i+/btLFmyhNTU8Dh27NjB4sWLSUpKOmbjkpMjKSkp2zkikhdofkpepvkpeZXmpuRl+XF+ns6BhCP1Vg73TYE6wOfhnQEUAeZHlHsn+HcxcEMu7T9gZl2BGsC1Eek3Bx/UCwHlg2elBxKya7s50BHA3WeY2Y4g/UrgImBh0M/iQHqwAne/2syKAW8AfwRmRXbO3d3MnGy4+1hgLEDlatV95LJjN33WdYrPkpaYmEhKSgp33HEHd9xxBxDe5rBixQri47OWz65uxYoV2b59O/feey8A27Zto3fv3ixYsIDY2FhiYmIy2kpOTqZDhw7a2nAaCIVCh5wjIieL5qfkZZqfkldpbkpelh/n5+kcSFgB3JRNeioHb+kolik/OYd7A2a5e04HJO4P/k0j9/eafkZCB+AVM7uAcOCgL9DE3XeY2fhM/Yq27fR+TnD3v+ZUwN33mdk0wlsaZgFbzKy8u/9kZuWJCDzkpHjhgqzO5VyDI5GcnMyBAwcoVaoUycnJzJw5k0GDBrF161bKlSvHgQMHeOqpp+jVq1fUdevXr8/Wrb8Pp2rVqixatIiYmBg6dOjAmDFjuPXWW/nqq68466yzFEQQERERERE5hNP5jIQ5QNHgr/wAmFks4Q/adcysqJmVJvwX/Gh8CVxmZtWDts6I4hsg9gClsstw9/eARUBn4EzCAYtdZnYOcE0U/fkcuDnoS2uCsxaA2cBNZlYuyCtjZlXMrGQQJMDMCgHtgFVBnfeCfhD8Oy2K5x9zW7ZsoXnz5jRo0ICLL76Ydu3a0aZNGyZOnEiNGjWoVasWFSpUoGvXrgBs2rSJtm3b5lo3N23btqVatWpUr16dv/zlL7z00kvHfYwiIiIiIiKnutN2RUKwRL8jMCo4z2AfsA64H/gPsBxYCyyJsr2fg0MZJ5pZ0SD5EXL/Boj3gSlmdh3QO5v8J4A3gdpBP1YB6wkHCQ5lcNCXPxPeYrEZ2OPu28zsEWCmmRUAUoB7CI//vaDvBYC5QPpBlEOB/5jZncAPBAGKE61atWokJiZmSe/Tpw99+vTJkl6hQgWmT5+ea93M1q1bl3FtZrz44otH3mEREREREZF86LQNJAC4+yay/1DcL/jJXL7qIe7nAE1yq+fuiwh/7SPuvgaIjSj6aaZ6i4GawW2XHMaQbdvALuBqd081s2aEt0XsD8q9RdazHsiu70H57US/MkNERERERETysdM6kHCaq0x4FUEB4DfgLye5PyIiIiIiIpIPKJBwinL3b4GGJ7sfIiIiIiIikr+czoctioiIiIiIiMgxpkCCiIiIiIiIiERNgQQRERERERERiZoCCSIiIiIiIiISNQUSRERERERERCRqCiSIiIiIiIiISNQUSJA8pWrVqtSvX5+4uDgaN24MQEJCAk2bNs1IW7BgQbZ1+/fvT7169ahXrx5vvfVWRvrs2bNp1KgRcXFxNG/enO+++w6AZ599ljp16hAbG8uVV17JDz/8cPwHKCIiIiIicorL94EEM6tkZtPM7Fsz+97MnjezImYWb2YfZCo73sxuCq5DZtY4m/YuNrNPzGy1mS0xs3FmViIiv4mZpaa3k0Of/mdmNTOljTKz/pH9MrMHzezViDKdzOzDI3wPM8xsZ+Yxnwxz584lISGBRYsWAdCvXz8ee+wxEhISeOKJJ+jXr1+WOh9++CFff/01CQkJfPXVV4wYMYLdu3cDcNddd/HGG2+QkJDA7bffzlNPPQVAw4YNWbRoEUuXLuWmm27Ktl0RERERERE5WKGT3YGTycwMeAf4u7tfZ2YFgbHA08BhfyA3s3OAycCt7j4/SLsJKAX8GrT/DDDzEE1NAm4FBgdtFABuAi4Dzo8o9wKwyMwuA1YATwFXHm6/A8OBEkDPaArvTUmj6oAjillka93QdjnmmVlGUGDXrl1UqFAhS5mVK1fSokULChUqRKFChYiNjWXGjBncfPPNOdZv2bJlRv2mTZvy+uuvH7PxiIiIiIiInK7ydSAB+COwz93/BeDuaWb2ALAWmHsE7d0DTEgPIgRtTonI7w28DTQ5RDsTgbcIAglAC+AHd//BzDICCe6eamZ3Ay8BC4BX3f1/OTVqZuOB3UBj4FygX3r/3H22mcVHMcbjysxo3bo1ZkbPnj3p0aMHo0aN4uqrr6Zv374cOHCAL774Iku9Bg0aMHjwYP7f//t//Prrr8ydO5c6deoAMG7cONq2bUvx4sU588wz+fLLL7PUf+WVV7jmmmuO+/hEREREREROdfk9kFAXWByZ4O67zexHoDpwuZklRGRXBnJb+l8PmJBdhplVBDoCLTlEIMHdl5nZATNr4O6JhFcnTMyh7Bdm9g1wFVA7t3YD5YHmQC3gPWBK7sUPGkMPoAdATExZBtVPjbbqIYVCIQCGDRtG2bJl2bFjB3379mXv3r3MmzePO++8kyuuuIK5c+dyww03MHLkyIPqFylShNq1axMbG0vp0qWpVq0aa9euJRQKMWjQIJ588knq1KnDpEmTuO2223jooYcy6s6aNYs5c+YwatSojH7IqS0pKUm/S8mzND8lL9P8lLxKc1Pysvw4P/N7IOFQPnX39uk3wV/0j9QooL+7HwjvqDikicCtZrYCuB54LLtCZlaS8AqDwkBZYMMh2n3X3Q8AK4OtGFFz97GEt35QuVp1H7ns2E2fdZ3is6QlJiaSkpLC7NmzefvttzEzrrjiCp577jni47OWj0y7/fbbadu2LXXr1mXjxo3cfffdAFSrVo02bdpklP3vf//LO++8w7x58yhXrtwxG4+cXKFQKNs5IpIXaH5KXqb5KXmV5qbkZflxfub3QMJKwmcPZDCzMwmvPPgOaH2Y7a0ALgKmZZPXGJgUBBFigLZmluru7+bQ1iTCZynMA5a6+5Ycyg0GXge2AM8BfzpEH/dHXEcV0chO8cIFWZ3LuQZHIjk5mQMHDlCqVCmSk5OZOXMmgwYNokKFCsybN4/4+HjmzJnDhRdemKVuWloaO3fu5A9/+ANLly5l6dKltG4d/vXt2rWLNWvWUKNGDWbNmkXt2uGFG0uWLKFnz57MmDFDQQQREREREZEo5fdAwmxgqJnd4e7/Dg5DHAmMB349gvbGAAvM7EN3/wrAzG4APnf3jLMNgpUNH+QSRMDdvzezbcBQ4PnsyphZfaAdEAf8BtxpZq3cfdYR9P2k27JlCx07dgQgNTWV22+/nTZt2lCyZEn69OlDamoqxYoVY+zYsQAsWrSIl19+mXHjxpGSksLll18OwJlnnsnrr79OoULh6f3Pf/6TG2+8kQIFCnD22Wfz6qvhL7p46KGHSEpK4k9/CsdeKleuzHvvvXeihy0iIiIiInJKydeBBHd3M+sIvGRmjxL+OszpwMNAsyia+NDMUoLr+e7+JzO7FRhhZuWAA8AnwIwj7OJEwoGEdzJnBN848XfgAXffF6TdBfzbzOLc/bfDeZCZfUr43ISSZrYBuNPdPz7Cfh+RatWqkZiYmCW9efPmLF68OEt648aNGTduHADFihVj5cqV2bbbsWPHjABFpP/+979H2WMREREREZH8J18HEgDcfT1wbTZZoeAnsmyXiOv4HNqbD1x+iGd2yS0/otwowmcrRKZF9qt5prxFQJ1on+vuJSOuc+2ziIiIiIiICIT/Ai8iIiIiIiIiEpV8vyLhZArOOHgtU/J+d7/kKNsdSNZDFye7+9NH066IiIiIiIiIAgknkbsvI3xQ4rFu92lAQQMRERERERE55rS1QURERERERESipkCCiIiIiIiIiERNgQQRERERERERiZoCCSIiIiIiIiISNQUSJM+oWrUq9evXJy4ujsaNGwPw+OOPU7FiReLi4oiLi2P69OlR1wVISEigadOmGekLFiwAYNeuXVx77bU0aNCAunXr8q9//ev4D1BEREREROQ0cNp8a4OZJbl7yYj7LkBjd7/XzB4EugOpwM9AN3f/wcyqAt8AqwEDkoGu7r76GPQnHujr7u0j0roCfYLbOsFz04AZ7j7gKJ/XhWC82eStA/YADmwG7nD3zbn0+zd3/+Jo+nOk5s6dS0xMzEFpDzzwAH379j2iuv369eOxxx7jmmuuYfr06fTr149QKMSLL75InTp1eP/99/n555+pWbMmnTp1okiRIsd0PCIiIiIiIqeb/LIiYQnhD9mxwBRgWETe9+4e5+4NgAnAw5krm9kxCbi4+7+CZ8UBm4CWwf1RBRGi1DIY/yKyGWOEeODSE9CfE8LM2L17NxBehVChQoWM9D179uDuJCUlUaZMGQoVOm3iaiIiIiIiIsdNvvjk5O5zI26/BP4vh6JnAjsg4y/8NwAlgYJm1hYYDdQDCgOPu/u0YFXDa8AZQRv3Zv5rvpk1AcYCN7n795nyjHBg4xrCKwaecve3Mq9oMLMxwCJ3Hx+093zwzP3AlUFzFcxsBnABMNXd+2Uzxk+A+4I22wB/AwoC24A7gV5Ampn9H9Db3T/N7kXtTUmj6oAPc3iNh2fd0HYE/aF169aYGT179qRHjx4AjBkzhn//+980btyYkSNHcvbZZ2dpI6e6o0aN4uqrr6Zv374cOHCAL74I/2ruvfdeOnToQIUKFdizZw9vvfUWBQrkl7iaiIiIiIjIkTudAgnFzSwh4r4M8F425e4EPoq4vyCoVwooAVwSkdcIiHX3X8zsb8Acd+9mZqWBBWb2X2Ar0Mrd95nZhcBEIGOTvpldSjgAcZ27/5hNf24A4oAGQAyw0Mw+yWmQZlYEeAu4xd0XmtmZwN4gOw5oSDi4sNrMRrv7+kxNtAeWmVlZ4J9AC3dfa2ZlgnG+DCS5+4hsnt0D6AEQE1OWQfVTc+rmYQmFQgAMGzaMsmXLsmPHDvr27cvevXuJjY3llVdewcx49dVXuf322+nfv3+WNrKr26BBA1544QXuvPNOrrjiCubOncsNN9zAyJEjmTdvHjExMbz55pts2rSJ7t27M27cOM4444wsbcupJykpKWNeieQ1mp+Sl2l+Sl6luSl5WX6cn6dTIGFvsGUA+P3MgMgCwV/ZGwNXRCR/n17PzG4hvHKgTZA3y91/Ca5bAx3MLH2zfjGgMuEtCmPMLI7weQc1ItquHbTX2t035dDv5sBEd08DtpjZPKAJsDuH8jWBn9x9IYC77w76DjDb3XcF9yuBKkB6IGGumaUBS4FHgMuBT9x9bdDOLxyCu48NxkPlatV95LJjM33WdYrPkpaYmEhKSgo33HBDRlq1atVo37498fFZy2dXNz4+nuuuu463334bM+OKK67gueeeIz4+nuHDhzNgwAAuv/xyAF555RXKli3LxRdffEzGJCdXKBQ65DwROVk0PyUv0/yUvEpzU/Ky/Dg/T6dAQq7M7CpgIHCFu+/Podh7QOTx/cmRTQA3Zj6I0cweB7YQXlFQANgXkf0T4YBDQ8IBh8ORysFnWBSLok7kuNI4+Pfb0t23pd8EgYcjVrxwQVYHWxKOheTkZA4cOECpUqVITk5m5syZDBo0iJ9++ony5csDMHXqVOrVqxd1XYAKFSowb9484uPjmTNnDhdeeCEAlStXZvbs2Vx++eVs2bKF1atXU61atWM2HhERERERkdNVvggkmFlD4B9AG3ffmkvR5sD3OeR9DPQ2s97u7mbW0N2XAGcBG9z9gJl1JnzeQLqdhLdSzDKzZHcPZdPup0BPM5tAeDtGC+Ahwucw1DGzokBxwucgfEb4mx7Km1mTYGtDKX7f2nA4vgReMrPzI7c2EP52hzOPoL2jsmXLFjp27AhAamoqt99+O23atOHPf/4zCQkJmBlVq1blH//4B0DGdoTp06fnWBfgn//8J3369CE1NZVixYoxduxYAB599FG6dOlC/fr1cXeeeeaZLN/4ICIiIiIiIlnli0ACMJzwoYmTg7/E/+juHYK89DMSDPiN8NdEZudJYBSw1MwKAGsJnzfwEvC2md0BzODgVQy4+xYzaw98ZGbd3P2rTO1OBZoBiYQPW+yX/tWMZvYfYHnwrCVBe78FWzBGm1lxwkGEqw73hbj7z8GZB+8E49kKtALeB6aY2XXkctjisVatWjUSExOzpL/22mvZlq9QoQLTp0/PtS5A8+bNWbx4cbb1Z86ceRQ9FhERERERyZ9Om0CCu5fMdD8eGB9cZ/tB293XEf5rf3Z5GfWD+71Az2zKfQvERiT1D9JDQCi4/hGom6le1Yjbh4KfzG33A7J880JwPkLTTMmZ+9s+h2dFtvMRBx88ibuvyTQeERERERERkQz6vjsRERERERERiZoCCSIiIiIiIiISNQUSRERERERERCRqCiSIiIiIiIiISNQUSBARERERERGRqCmQICIiIiIiIiJRUyBBRERERERERKKmQIKIiIiIiIiIRE2BBMkzqlatSv369YmLi6Nx48YAPP7441SsWJG4uDji4uKYPn161HUBHnroIWrVqkVsbCwdO3Zk586dGXlDhgyhevXq1KxZk48//vi4jk1EREREROR0oUDCUTCzc81skpl9b2aLzWy6mdU4gc+PN7NLM6X9n5ktNbMVZpZoZuPMrPSJ6tPRmjt3LgkJCSxatCgj7YEHHiAhIYGEhATatm17WHVbtWrF8uXLWbp0KTVq1GDIkCEArFy5kkmTJrFixQpmzJjB3XffTVpa2vEbmIiIiIiIyGmi0MnuwKnKzAyYCkxw91uDtAbAOcCaKOoXdPe0nO6jFA8kAV8EbbQBHgCucfeNZlYQ6Bz0aedhtp2rvSlpVB3w4TFpa93Qdsekney0bt0647pp06ZMmTIFgGnTpnHrrbdStGhRzj//fKpXr86CBQto1qzZceuLiIiIiIjI6UArEo5cSyDF3V9OT3D3RKCgmX2QnmZmY8ysS3C9zsyeMbOvgT9lc9/azOab2ddmNtnMSkbUGxykLzOzWmZWFegFPGBmCWZ2OTAQ6OvuG4P+pLn7q+6+OmhnkJktNLPlZjY2CIZgZiEzez5oZ7mZXXz8X19WZkbr1q256KKLGDt2bEb6mDFjiI2NpVu3buzYseOw6kZ69dVXueaaawDYuHEj5513XkZepUqV2Lhx4zEcjYiIiIiIyOlJKxKOXD1g8RHU2+7ujQDMbGj6vZnFAO8AV7l7spn1Bx4EngjqbQvK3U04WNDdzF4Gktx9RNBeXeDrXJ49xt2fCMq+BrQH3g/ySrh7nJm1AF4NxncQM+sB9ACIiSnLoPqpRzD8rEKhEADDhg2jbNmy7Nixg759+7J3715iY2N55ZVXMDNeffVVbr/9dvr375+ljezqNmjQICP/9ddfZ+fOnVSsWJFQKMTGjRv55ptvMp79008/sWLFCmJiYo7JmOTkSkpKyvjdiuQ1mp+Sl2l+Sl6luSl5WX6cnwoknHhv5XDfFKgDfB4sFCgCzI8o907w72LghkM9xMzqA68BpYCH3f0toKWZ9QNKAGWAFfweSJgI4O6fmNmZZlba3XdGtunuY4GxAJWrVfeRy47N9FnXKT5LWmJiIikpKdxww+9DrVatGu3btyc+Pmv57Oqmlxs/fjwrVqxg9uzZlChRAoD588OvNr3MkCFDaN26tbY2nCZCodAh54nIyaL5KXmZ5qfkVZqbkpflx/mpQMKRWwHclE16KgdvGSmWKT85h3sDZrn7bTk8b3/wbxo5/95WAI2Aue6+DIgzszFAcTMrBrwENHb39Wb2eKa+eaa2Mt8fpHjhgqw+hmcbJCcnc+DAAUqVKkVycjIzZ85k0KBB/PTTT5QvXx6AqVOnUq9eloUSOdYFmDFjBsOGDWPevHkZQQSADh06cPvtt/Pggw+yadMmvv32Wy6++KTs6BARERERETml6IyEIzcHKBos9wfAzGIJBwTqmFnR4NsSroyyvS+By8ysetDWGVF8A8QewisO0g0BRphZpYi04sG/6UGDbcHZC5mDILcEz20O7HL3XVH2+5jYsmULzZs3p0GDBlx88cW0a9eONm3a0K9fP+rXr09sbCxz587lueeeA2DTpk0Z3+CQU12Ae++9lz179tCqVSvi4uLo1asXAHXr1uXmm2+mTp06tGnThhdffJGCBQueyCGLiIiIiIickrQi4Qi5u5tZR2BUcJ7BPmAdcD/wH2A5sBZYEmV7PweHMk40s6JB8iPk/g0Q7wNTzOw6oLe7TzezssBHwTc27Az68bG77zSzfwb3m4GFmdraZ2ZLgMJAt2j6fCxVq1aNxMTELOmvvfZatuUrVKjA9OnTc60L8N133+X4zIEDBzJw4MAj6K2IiIiIiEj+pUDCUXD3TcDN2WT1C34yl696iPs5QJPc6rn7IsJf+4i7rwFiM5WdAEzIob+PEA5OZOd1d78/hzwRERERERERQFsbREREREREROQwaEWC4O7xJ7sPIiIiIiIicmrQigQRERERERERiZoCCSIiIiIiIiISNQUSRERERERERCRqCiSIiIiIiIiISNQUSBARERERERGRqCmQIHlC1apVqV+/PnFxcTRu3BiAhx56iFq1ahEbG0vHjh3ZuXNnlnqrV68mLi4u4+fMM89k1KhRADz66KPExsYSFxdH69at2bRpEwChUIizzjoro84TTzxxooYpIiIiIiJyyjvtAglmlpRNWgsz+9rMUs3spoj0qma218wSzCzRzL4ws5rHqB/xZvZBprSuwbMSzOw3M1sWXA89Bs/rYmZjcshbFzxrqZnNNLNzD9HvS4+2P0di7ty5JCQksGjRIgBatWrF8uXLWbp0KTVq1GDIkCFZ6tSsWZOEhAQSEhJYvHgxJUqUoGPHjkA4ELF06VISEhJo3779QQGDyy+/PKPeoEGDTswARURERERETgOnXSAhBz8CXYA3s8n73t3j3L0BMAF4OHMBMyt0LDrh7v8KnhUHbAJaBvcDjkX7h9DS3WOBRWQzxgjxwEkJJGTWunVrChUKv/qmTZuyYcOGXMvPnj2bCy64gCpVqgBw5plnZuQlJydjZsevsyIiIiIiIvnEMfmAnNe5+zoAMztwiKJnAjuCsl2AG4CSQEEzawuMBuoBhYHH3X2amVUFXgPOCNq4192/iGzUzJoAY4Gb3P37THkGDAOuARx4yt3fMrN4oK+7tw/KjQEWufv4oL3ng2fuB64MmqtgZjOAC4Cp7t4vmzF+AtwXtNkG+BtQENgG3An0AtLM7P+A3u7+aXYvam9KGlUHfJjDa4zeuqHtCPpC69atMTN69uxJjx49Dir36quvcsstt+Ta1qRJk7jtttsOShs4cCD//ve/Oeuss5g7d25G+vz582nQoAEVKlRgxIgR1K1b96jHIiIiIiIikh/ki0DCIVxgZglAKaAEcElEXiMg1t1/MbO/AXPcvZuZlQYWmNl/ga1AK3ffZ2YXAhOBxukNBNsERgPXufuP2Tz/BiAOaADEAAvN7JOcOmtmRYC3gFvcfaGZnQnsDbLjgIaEgwurzWy0u6/P1ER7YJmZlQX+CbRw97VmViYY58tAkruPyO2lHWufffYZFStWZOvWrbRq1YpatWrRokULAJ5++mkKFSpEp06dcqz/22+/8d5772XZ/vD000/z9NNPM2TIEMaMGcPgwYNp1KgRP/zwAyVLlmT69Olcf/31fPvtt8d1fCIiIiIiIqcLBRKCrQ0AZnYL4ZUDbYK8We7+S3DdGuhgZn2D+2JAZcJbFMaYWRyQBtSIaLt20F5rd9+Uw/ObAxPdPQ3YYmbzgCbA7hzK1wR+cveFAO6+O+g7wGx33xXcrwSqAOmBhLlmlgYsBR4BLgc+cfe1QTu/cAhm1gPoARATU5ZB9VMPVeWQQqFQxnX6h/mGDRsyceJEDhw4wIwZM3j//fcZOXIk8+bNy7Gdzz77jPPPP59vvvmGb775Jkt+tWrVGDBgAC1btjwovUSJEuzZs4dp06Zx1llnHfV4JG9ISko6aG6J5CWan5KXaX5KXqW5KXlZfpyfCiQc7D3gXxH3yRHXBtzo7qsjK5jZ48AWwisKCgD7IrJ/IhxwaEg44HA4Ujn4DItiUdTZH3GdxsG/35buvi395kjOC3D3sYQDI9SsWdN7d7rusNvITnJyMgcOHKBUqVIkJyfz8MMPM2jQIPbt28d7773HvHnzKFu2bK5tvPzyy9x9993Ex8dnpH377bdceOGFAIwePZqLLrqI+Ph4Nm/ezDnnnIOZsWDBAooUKUKHDh10hsJpJBQKHTQXRPISzU/JyzQ/Ja/S3JS8LD/OTwUSDtYc+D6HvI+B3mbW293dzBq6+xLgLGCDux8ws86EzxtIt5PwuQOzzCzZ3UPZtPsp0NPMJgBlgBbAQ4TPYahjZkWB4oTPQfgMWA2UN7MmwdaGUvy+teFwfAm8ZGbnR25tAPYQPivihNmyZUvGNy2kpqZy++2306ZNG6pXr87+/ftp1aoVED5w8eWXX2bTpk10796d6dOnA+FAxKxZs/jHP/5xULsDBgxg9erVFChQgCpVqvDyyy8DMGXKFP7+979TqFAhihcvzqRJkxREEBERERERidLpGEgoYWaRx/s/S/jD+lTgbOBaMxvs7umn66WfkWDAb0D3HNp9EhgFLDWzAsBawucNvAS8bWZ3ADM4eBUD7r7FzNoDH5lZN3f/KlO7U4FmQCLhwxb7uftmADP7D7A8eNaSoL3fgi0Yo82sOOEgwlXRvpyIfv0cbFV4JxjPVqAV8D4wxcyuI5fDFo+latWqkZiYmCX9u+++y7Z8hQoVMoIIAGeccQbbt2/PUu7tt9/Otv69997Lvffee4S9FRERERERyd9Ou0CCu+f0lZaVsim7jvBf+7NrZzwwPuJ+L9Azm3LfArERSf2D9BAQCq5/BOpmqlc14vah4Cdz2/2ALN+8EJyP0DRTcub+ts/hWZHtfAR8lCltTabxiIiIiIiIiGTI6UO3iIiIiIiIiEgWCiSIiIiIiIiISNQUSBARERERERGRqCmQICIiIiIiIiJRUyBBRERERERERKKmQIKIiIiIiIiIRE2BBBERERERERGJmgIJIiIiIiIiIhI1BRIkT0hLS6Nhw4a0b98egDlz5tCoUSPq1atH586dSU1NzVJn7ty5xMXFZfwUK1aMd99996Ay9913HyVLlsy4/+STT2jUqBGFChViypQpx3VMIiIiIiIipyMFEiRPeP7556lduzYABw4coHPnzkyaNInly5dTpUoVJkyYkKVOy5YtSUhIICEhgTlz5lCiRAlat26dkb9o0SJ27NhxUJ3KlSszfvx4br/99uM7IBERERERkdOUAgmHYGZpZpZgZsvN7H0zK30Cn93FzH4Onr/SzP5yiPIPH8Wz/mRmK8zsgJk1PtJ2jsSGDRv48MMP6d69OwDbt2+nSJEi1KhRA4BWrVrx9ttv59rGlClTuOaaayhRogQQXuHw0EMPMWzYsIPKVa1aldjYWAoU0NQXERERERE5EoVOdgdOAXvdPQ7AzCYA9wBPn8Dnv+Xu95pZOWCFmb3n7ltyKPsw8LcjfM5y4AbgH9EU3puSRtUBHx7ho8LWDW0HwP3338+wYcPYs2cPADExMaSmprJo0SIaN27MlClTWL9+fa5tTZo0iQcffDDjfsyYMXTo0IHy5csfVR9FRERERETkYAokHJ75QCyAmV0MPA8UA/YCXd19tZl1AToAJYALgKnu3i+ocyfQH9gJJAL7gyBBWeBloHLwnPvd/fPIB7v7VjP7HqhiZsnAaKAx4MBgoAlQ3MwSgBXu3ilz582sKvAR8BlwKbARuM7d97r7N0GZHAdvZj2AHgAxMWUZVD/ruQWHIxQKMX/+fFJSUtizZw8JCQls376defPm0a9fP7p160ZKSgqNGzdm7969hEKhbNvZvn07X3/9NcWKFSMUCrFt2zbGjRvHqFGjCIVCpKWlZam7efNmVqxYQUxMzFGNQfKmpKSkHOeLyMmm+Sl5mean5FWam5KX5cf5qUBClMysIHAl8EqQtAq43N1TzewqwisBbgzy4oCGwH5gtZmNBtKAR4FGwB5gDuFgAoQDEs+5+2dmVhn4GKid6fnVgGrAd0E7u9y9fpB3tru/bWb3pq+eyMWFwG3u/hcz+0/Q59ejeQfuPhYYC1C5WnUfuezops+6TvF8/PHHLF68mC5durBv3z52797NuHHjeP3117nnnnsAmDlzJvv37yc+Pj7bdp5//nluvvlmrrrqKgA+/PBDfv75Z+68804A9u/fT/fu3fnuu+8y6owfP566devm2Kac2kKhkH63kmdpfkpepvkpeZXmpuRl+XF+KpBwaOl/5a8IfAPMCtLPAiaY2YWEVwUUjqgz2913AZjZSqAKEAPMc/dfgvTJQI2g/FVAnYjVAGeaWfpXDdxiZs0JByV6uvsvQeDi1vTC7n7wiYK5W+vuCcH1YqDqYdTNULxwQVYHWxOOxpAhQxgyZAgQ/g9wxIgRvP7662zdupVy5cqxf/9+nnnmGQYOHJhjGxMnTsxoA6Bdu3Zs3rw5475kyZIHBRFERERERETkyOnEuUNLPyOhCmCEz0gAeBKY6+71gGsJb3FItz/iOo1DB2wKAE3dPS74qejuSUHeW0HaJe4+9WgHcwR9OymGDx9O7dq1iY2N5dprr+WPf/wjEP4mhvRDGQHWrVvH+vXrueKKK6Jqd+HChVSqVInJkyfTs2dP6tate1z6LyIiIiIicrrKkx8i8yJ3/9XM7gPeNbOXCK9I2Bhkd4miiYXAKDM7m/DWhhuBZUHeTKA3MBzAzOIiVg1kZxbhgMb9Qfmzg1UJKWZW2N1TDmNoeUZ8fHzGkqDhw4czfPjwLGUaN27MuHHjMu6rVq3Kxo0bs5SLlJSUlHHdpEkTNmzYcGw6LCIiIiIikg9pRcJhcPclwFLgNmAYMMTMlhBFQMbdNxI+R2EB8DmwDtgVZN8HNDazpcFWiF6HaO4p4OzgKykTgZZB+lhgqZm9cVgDA8yso5ltAJoBH5rZx4fbhoiIiIiIiJz+tCLhENy9ZKb7ayNua0RcPxLkjwfGR5RvH1HmTXcfa2aFgKnAu0GZbcAt2Tz7oLYi0pOAztmk9yf8rRA5jWUdUC/ifkTE9dSgTyIiIiIiIiI50oqEE+vx4ODG5cBagkCCiIiIiIiIyKlCKxJOIHfveyKeY2Z/AGZnk3Wlu28/EX0QERERERGR05MCCaehIFgQd7L7ISIiIiIiIqcfbW0QERERERERkagpkCAiIiIiIiIiUVMgQURERERERESipkCCiIiIiIiIiERNgQTJE9LS0mjYsCHt27cHYM6cOTRq1Ih69erRuXNnUlNTs9RJSEigWbNm1K1bl9jYWN56662MvDFjxlC9enXMjG3btmWkv/HGG8TGxlK/fn0uvfRSEhMTj//gRERERERETiMKJEie8Pzzz1O7dm0ADhw4QOfOnZk0aRLLly+nSpUqTJgwIUudEiVK8O9//5sVK1YwY8YM7r//fnbu3AnAZZddxn//+1+qVKlyUJ3zzz+fefPmsWzZMh599FF69Ohx3McmIiIiIiJyOtHXPx6CmaUBywi/q7XAn9195wl6dhdgOLARKAI85+7/zKX8w+7+tyN81nDgWuA34Huga27j3JuSRtUBHx7JozKsG9oOgA0bNvDhhx8ycOBAnn32WbZv306RIkWoUaMGAK1atWLIkCHceeedB9VPzweoUKEC5cqV4+eff6Z06dI0bNgw22deeumlGddNmzZlw4YNRzUGERERERGR/EYrEg5tr7vHuXs94BfgnhP8/LfcPQ6IB/5mZufkUvbho3jOLKCeu8cCa4C/HkVbh+X+++9n2LBhFCgQno4xMTGkpqayaNEiAKZMmcL6/8/enYZXVZ1/H//egMqkII1YgUJABENICBikFsSggkVBoWARbTUidaiKw18ES0uxtQUZFBBrS9HGioIKIj6iiAwHLGoZw6iUWqJMyuBEJEAI9/Pi7MST5CQ5TBLJ73Ndudx7TfveYfni3Flrnc2bSx1jyZIlHDhwgHPPPTfm5z799NN07dr1yAMXERERERGpgLQi4fC8ByQDmNmFwDigKpBD+C/4G4JVBFcD1YFzgRnu/mDQ5xZgEPAlsArY7+53mdlZwF+BhsFz7nX3xZEPdvcdZvYR0MjMvgGeAFIBBx4G2gLVzCwTWOfuNxQN3szigTeBfwE/IbzS4Rp3z3H3ORFN3wd6R+l/K3ArQFzcWQxNKn5uweEIhUK899575ObmsmfPHjIzM9m9ezcLFy7kwQcfpF+/fuTm5pKamkpOTg6hUCjqOLt37+a+++5j8ODBLFq0qFDdvn37WLx4MbVq1SpUvnLlSp544gnGjx9f4rjy/ZWdna1/Vym3ND+lPNP8lPJKc1PKs4o4P5VIiJGZVQYuA54Oij4ELnb3g2Z2OfBnoFdQlwK0BvYDG8zsCSAP+B3QBtgDzCecTIBwQuJxd/+XmTUE3gISijy/CdAE+G8wzlfunhTUnenu083srmD1QmnOA/q6+6/M7KUg5slF2vQDXiza0d0nAhMBGjZp6mPWHN30ybohjbfeeovly5eTnp7Ovn37+Prrr5k0aRKTJ0/mzjvDiz/mzJnD/v37SUtLKzbG119/TVpaGo899hi9exfLfVC1alXat29PXFxcQdnq1auZMGECb7/9dqHtEXLyCIVCUeeLSHmg+SnlmeanlFeam1KeVcT5qURC2fL/yl8f+IDwFgCAWsCzZnYe4VUBp0T0mefuXwGY2XqgERAHLHT3z4Pyl4H8T7GXAy3MLL//GWZWM7juY2YdCCclbnP3z4PExXX5jd39i8N4n03unhlcLwfiIyvNbAhwEHi+tEGqnVKZDcEZB0dj+PDhDB8+HAj/Dzh69GgmT57Mjh07qFu3Lvv37+fRRx9lyJAhxfoeOHCAnj17cuONN0ZNIkTzySef8LOf/YznnntOSQQREREREZEjoDMSypYT/JW/EWB8e0bCH4EFwdkJ3Qlvcci3P+I6j7ITNpWAHwdnMaS4e313zw7qXgzK2rn7jKN9mdJiC7ZldANucHc/Bs86YqNGjSIhIYHk5GS6d+/OpZdeCsCyZcvo378/AC+99BKLFi0iIyODlJQUUlJSyMzMBGD8+PE0aNCALVu2kJycXNDnD3/4A7t37+bXv/41KSkppKamnpD3ExERERER+b7SioQYufteMxsAvGpmfyG8ImFrUJ0ewxBLgbFmdibhrQ29CH8bBMAc4G7C39CAmaVErBqI5m3CCY17g/ZnBqsScs3sFHfPPYxXIxjjp8CDwCXuvvdw+x8LaWlpBUuCRo0axahRo4q1SU1NZdKkSQD84he/4Be/+EXUsQYMGMCAAQOKlU+aNKmgv4iIiIiIiBw+rUg4DO6+ElgN9AVGAsPNbCUxJGTcfSvhcxSWAIuBLOCroHoAkGpmq4OtELeXMdwjwJlmttbMVgGdgvKJwGozK3VbQgkmAKcDb5tZppn99QjGEBERERERkZOcViSUwd1rFrnvHnEbucn+t0F9BpAR0b5bRJsX3H2imVUBZgCvBm12AX2iPLvQWBHl2cBNUcoHEf5WiJLeJQtoGXE/OuK6aUn9RERERERERPJpRcJ3a1hwcONaYBNBIkFERERERETk+0IrEr5D7v7Ad/EcM/sBMC9K1WXuvvu7iEFEREREREROTkoknISCZEHKiY5DRERERERETj7a2iAiIiIiIiIiMVMiQURERERERERipkSCiIiIiIiIiMRMiQQ54fLy8mjdujXduoW/KdPdGTJkCM2aNSMhIYHx48cX67NgwQJSUlIKfqpWrcqrr74KwIQJE2jatClmxq5du4r1Xbp0KVWqVGHatGnH9b1ERERERERORhUikWBmC8zsiiJl95rZJjNrXqR8rJkNMrM0M3s9KLvfzJ6JaHODmc0Krm83szVmlmlm/zKzFhHtHjKz/5rZhsjnm1l2DDHfa2bVj+BdM4L3yjSzFWZ20WH2v9jM1gX9qx3u84/EuHHjSEhIKLjPyMhg8+bNfPjhh3zwwQdcd911xfp06tSJzMxMMjMzmT9/PtWrV6dLly4AtG/fnrlz59KoUaNi/fLy8hg0aFBBWxERERERETk8FSKRAEwBin4avQ7YFFluZpWA3sDUIm3HA23MrL2Z1QYeAe4O6l5w9yR3TwFGAo8FY7UIxk4Efgr8xcwqH0bM9wJREwkxjDMwiGcw8LdYHxiMewMw3N1T3D0n1r5HasuWLcyaNYv+/fsXlD311FMMHTqUSpXC07Nu3bqljjFt2jS6du1K9erhX1fr1q2Jj4+P2vaJJ56gV69eZY4pIiIiIiIi0VWUr3+cBjxiZqe6+wEziwfqAVcBLwIPB+06Ah+7+8dm1ji/s7sfNLNfA38BlgDPuPv/grqvI55TA/Dg+hpgqrvvBzaZ2X+BC4H38hubWRowDNgFtASWA78gnKSoBywws13u3ilYxfA34HLgTjO7FOgOVAPeBW5z9/xn51sENA2e9QtgAHAq8G/g1+6eV2Tcl4GfA1eYWVd3v6GkX2hObh7xg2eVVF2mrBFXAXDvvfcycuRI9uzZU1D30Ucf8eKLLzJjxgzOOussxo8fz3nnnVfiWFOnTuX+++8v85lbt25lxowZLFiwgKVLlx5x7CIiIiIiIhVZhViR4O6fE04AdA2KrgNecvc1wCEzaxVRPqWEMd4FPiD8gXtkZJ2Z3WlmHwXlA4Li+sDmiGZbgrKiWhNefdACaAK0d/fxwDagk7t3CtrVAP7t7q3c/V/ABHdv6+4tCScTukUZuzuwxswSgD7B2ClAHuGVB0XHfQR4jfCKhhKTCMfK66+/Tt26dbngggsKle/fv5+qVauybNkyfvWrX9GvX78Sx9i+fTtr1qzhiiuuKLFNvnvvvZdHH320YKWDiIiIiIiIHL6KsiIBvt3eMDP47y2R5Wa2DugB/D5aZzOrCaQCpwBnEU4MAODuTwJPmtn1wG+Bmw4jriXuviV4RiYQD/wrSrs8YHrEfScze5Dw9oc6wDrg/wV1o8zst8DO4D0vAy4AlpoZhBMPO0oYt0RmditwK0Bc3FkMTToY0wtGEwqFmDJlCnPmzOGVV17hwIED7N27l86dO1OnTh3q1atHKBTizDPPZOXKlYRCoajjTJs2jXbt2rF48eJidfv27WPx4sXUqlULgH/961+88847AHz11VfMnDmTDz/8kA4dOhzxe0j5lJ2dXeKcETnRND+lPNP8lPJKc1PKs4o4PytSImEm8LiZtQGqu/vyoHwqMAdYCKx2989K6P8wMBn4DHgcuDZKm6nAU8H1VuBHEXUNgrKi9kdc51Hyv8k+d88DMLOqhLdZpLr7ZjMbBlSNaDvQ3Qu+ksDMOgHPuvtDpY1bFnefCEwEaN68ud99wzWxdCtRWlpawXUoFGL06NG8/vrrDB48mJycHNLS0giFQiQkJBRqG2nw4MEMHz48an3VqlVp3749cXFxQHj1Qr709HS6detG7969j+odpHwKhUIlzhmRE03zU8ozzU8przQ3pTyriPOzwqzxdvdsYAHwDBHbF9z9I8JnFIyghG0NZpZE+DyFRwl/kI43s85BXeTm/auAjcH1a4RXOpwWnLdwHuHtFbHaA5xeQl1+0mBXsFKirE/D84DeZlY3iLmOmRX/SoNyYvDgwUyfPp2kpCQeeughJk2aBMCyZcsKHcqYlZXF5s2bueSSSwr1Hz9+PA0aNGDLli0kJycX6iMiIiIiIiJHpyKtSIBwomAGxb/BYQrhRMIrRTtYeC/AU8B97r4vKLsD+KeZpQB3mdnlQC7wBcG2BndfZ2YvAeuBg8Cdsf7lPzARmG1m2yLOSSAY+0sz+zuwFvgUKPXkQHdfH2x1mBN8M0UucCfw8WHEc1ylpaUVZPFq167NrFnFD3JMTU0tSCoAxMfHs3Vr8UUeAwYMYMCAAcXKI2VkZBxVvCIiIiIiIhVVhUokuPurgEUpHwuMLVIWAkLBbYcidcsIH44IcE8pz/sT8Kco5TWjPAN3vyvi+gngiaJ9Iu5/S/g8hqJjp5cQy4uEv6Eiaixl9RcRERERERGBCrS1QURERERERESOnhIJIiIiIiIiIhIzJRJEREREREREJGZKJIiIiIiIiIhIzJRIEBEREREREZGYKZEgIiIiIiIiIjFTIkFEREREREREYqZEgoiIiIiIiIjETIkEOaHy8vJo3bo13bp1AyA9PZ3GjRuTkpJCSkoKmZmZUfs9++yznHfeeZx33nk8++yzAOzZs6egX0pKCnFxcdx7770ALFq0iDZt2lClShWmTZv2XbyaiIiIiIjISUmJhCNkZtlF7tPNbEJw3dHMVpjZQTPrHdEm3sxyzCzTzFaZ2btm1vwYxZNmZq9HKU83s53BM9eb2a/KGOc3xyKeWI0bN46EhIRCZaNGjSIzM5PMzExSUlKK9fn88895+OGH+fe//82SJUt4+OGH+eKLLzj99NML+mVmZtKoUSN+9rOfAdCwYUMyMjK4/vrrv4vXEhEREREROWlVOdEBnKQ+AdKBB6LUfeTuKQBmdhvwG+CmyAZmVsXdDx7DeF5097vMrC6wzsxec/fPSmj7G+DPZQ2Yk5tH/OBZRxRM1oirANiyZQuzZs1iyJAhPPbYYzH3f+utt+jcuTN16tQBoHPnzsyePZu+ffsWtPnPf/7Djh07uPjiiwGIj48HoFIl5c5ERERERESOhj5VHQfunuXuq4FDZTQ9A/gCClYOvGZm84F5ZlbDzJ4xsyVmttLMrgnaxZvZO8GKhxVm9pOig5pZ26DPuUXi2gF8BDQys5pm9g8zW2Nmq82sl5mNAKoFqxeePwa/ilLde++9jBw5stiH+yFDhpCcnMx9993H/v37i/XbunUrP/rRjwruGzRowNatWwu1mTp1Kn369MHMjk/wIiIiIiIiFZRWJBy5amaWGXFfB3gthn7nBv1OB6oD7SLq2gDJ7v65mf0ZmO/u/cysNrDEzOYCO4DO7r7PzM4DpgCp+QMEiYUngGvc/RMzuziirgnQBPgv8DvgK3dPCurOdPfpZnZX/oqJoszsVuBWgLi4sxiadGSLJkKhEO+99x65ubns2bOHzMxMdu/eTSgUonv37tx0003k5uYyZswYbr/9dm66qdCCDT766CMOHDhAKBQCYNOmTZx22mkF9wDPPPMMDz30UKEygE8//ZR169YRFxd3RLHL90N2dnaxf3uR8kLzU8ozzU8przQ3pTyriPNTiYQjlxP5gdvM0on4QF+KyK0NfYCJwE+Durfd/fPgugtwtZnlb4+oCjQEtgETzCwFyAOaRYydEIzXxd23RZT3MbMOwH7gtiBRcTlwXX4Dd/+irMDdfWIwPg2bNPUxa45s+mTdkMZbb73F8uXLSU9PZ9++fXz99ddMmjSJyZMnF7Q79dRTGT16NGlpaYX6b9++nVAoVFA+ZcoUOnbsWHC/atUqTj31VG677bZiz87IyCAxMbHYmHJyiZwfIuWN5qeUZ5qfUl5pbkp5VhHnpxIJJ9ZrwD8i7r+JuDagl7tviOxgZsOAz4BWhLem7Iuo3k444dCacMIh34vuftexCxuqnVKZDcFZB0di+PDhDB8+HAj/jzd69GgmT57M9u3bOeecc3B3Xn31VVq2bFms7xVXXMFvfvMbvvginPuYM2dOwVgQTixEnpcgIiIiIiIix47OSDixOhA+syCat4C7Ldjkb2atg/JawHZ3PwT8Eqgc0edL4CpguJmllfHst4E782/M7MzgMtfMTon9FY6tG264gaSkJJKSkti1axe//e1vAVi2bBn9+/cHoE6dOvzud7+jbdu2tG3blqFDhxYcvAjw0ksvFUskLF26lAYNGvDyyy9z2223kZiY+N29lIiIiIiIyElEKxKOAzNrC8wAzgS6m9nD7p7/yTX/jAQDDgD9Sxjmj8BYYLWZVQI2Ad2AvwDTzexGYDaFVzHg7p+ZWTfgTTPrV0qYjwBPmtlawlskHgZeIbx1YbWZrXD3Gw7vzY9MWlpawVKg+fPnR22TmprKpEmTCu779etHv37RX+9///tfsbK2bduyZcuWow9WRERERESkglMi4Qi5e80i9xlARnC9FGgQpU8WUK2E8Qr6B/c5QLFN/u6+EUiOKBoUlIeAUHD9CZCfuPh35LgR42RT5Gsng/JB+WOKiIiIiIiIFKWtDSIiIiIiIiISMyUSRERERERERCRmMSUSzOxcMzstuE4zswFmVvu4RiYiIiIiIiIi5U6sKxKmA3lm1pTwYXw/Al44blGJiIiIiIiISLkUayLhkLsfBHoCT7j7QOCc4xeWiIiIiIiIiJRHsSYScs2sL+FT/l8Pyk45PiGJiIiIiIiISHkVayLhZuAi4E/uvsnMGgPPHb+wRERERERERKQ8qhJLI3dfb2aDgIbB/Sbg0eMZmIiIiIiIiIiUP7F+a0N3IBOYHdynmNlrxzEuqSDy8vJo3bo13bp1K1Q+YMAAatasGbXP7t276dSpEzVr1uSuu+4qVJeWlkbz5s1JSUkhJSWFHTt2ALBo0SLatGlDlSpVmDZt2vF5GRERERERkQog1q0Nw4ALgS8B3D0TaHJcIiqHzOxsM3vBzP5nZsvN7D0z63mcnxkysw1mtsrMFptZ88PoG29ma49nfMfKuHHjSEhIKFS2bNkyvvjiixL7VK1alT/+8Y+MHj06av3zzz9PZmYmmZmZ1K1bF4CGDRuSkZHB9ddff+yCFxERERERqYBi2toA5Lr7V2YWWXboOMRT7lj4pV8FnnX364OyRsDVRdpVCb7Z4li6wd2XmdmtwKgoz6zs7nnH+JkxycnNI37wrCPqmzXiKgC2bNnCrFmzGDJkCI899hgQXqEwcOBAXnjhBWbMmBG1f40aNejQoQP//e9/Y35mfHw8AJUqxZo7ExERERERkWhi/VS1zsyuByqb2Xlm9gTw7nGMqzy5FDjg7n/NL3D3j939CTNLN7PXzGw+MM/MapjZM2a2xMxWmtk1EP7Ab2ajzGypma02s9uC8rRg5cE0M/vQzJ63ItmawCKgadAn28zGmNkq4CIzu9/M1gY/90b0qRKM90EwfvWg/9AgjrVmNjH/eWY2wMzWB/FNPQ6/x2LuvfdeRo4cWejD/YQJE7j66qs555wj/3bRm2++mZSUFP74xz/i7sciVBEREREREQnEuiLhbmAIsB94AXgLeOR4BVXOJAIrSqlvAyS7++dm9mdgvrv3M7PawBIzmwvcAHzl7m3N7DRgsZnNCfq3Dp6xDVgMtAf+VeQZ3YE1wXUN4N/u/n9mdgHhb9RoBxjwbzNbCHwBNAducffFZvYM8GtgNDDB3f8AYGbPAd2A/wcMBhq7+/4g9mKClRG3AsTFncXQpCNbgBEKhXjvvffIzc1lz549ZGZmsnv3bqZNm8akSZMYO3YsoVCIvLw8QqFQieN8+OGHbN26tVCbO++8k7POOou9e/fy+9//nr1793LFFVcU1H/66aesW7eOuLi4I4pdvh+ys7NLnTsiJ5Lmp5Rnmp9SXmluSnlWEednmYkEM6sMzHL3ToSTCRWamT0JdAAOAE8Cb7v750F1F+BqM3sguK9K+JsuugDJZtY7KK8FnBeMscTdtwRjZwLxfJtIeN7McoAswskcgDxgenDdAZjh7t8E/V8BLgZeAza7++Kg3WRgAOFEQiczexCoDtQB1hFOJKwOnvcq4a0cxbj7RGAiQMMmTX3MmljzUIVl3ZDGW2+9xfLly0lPT2ffvn18/fXX/OpXv+K0007jlltuAWD//v3079+/xC0MWVlZZGdnk5aWFrV+x44dLFu2rFB9RkYGiYmJJfaRk0MoFNK/sZRbmp9Snml+SnmluSnlWUWcn2V+EnT3PDM7ZGa13P2r7yKocmYd0Cv/xt3vNLM4YFlQ9E1EWwN6ufuGyAGC7QN3u/tbRcrTCK/yyJdH4X+TG9x9GYXti/FchKJr+t3MqgJ/AVLdfbOZDSOc7AC4CuhIePXDEDNLKu3Mh2qnVGZDcNbBkRg+fDjDhw8Hwv/jjR49mtdff71Qm5o1ax7WOQgHDx7kyy+/JC4ujtzcXF5//XUuv/zyI45RREREREREiov1jIRsYI2ZPW1m4/N/jmdg5ch8oKqZ3RFRVr2Etm8Bd0ecO9A6ovwOMzslKG9mZjWOQWzvAD3MrHowXs+gDKChmV0UXF9PeJVDftJgl5nVBHoH8VQCfuTuC4BBhFdMRP/uxRPktddeY+jQoQX38fHx3H///WRkZNCgQQPWr1/P/v37ueKKK0hOTiYlJYX69evzq1/9CoClS5fSoEEDXn75ZW677TYSExNP1KuIiIiIiIh8r8W6Nv2V4KfCcXc3sx7A48GWgJ2EVyEMAqoVaf5HYCywOvhwvonwGQSTCG9ZWBEkGXYCPY5BbCvMLANYEhRNcveVZhYPbADuDM5HWA885e57zezvwFrgU2Bp0K8yMNnMahFeVTHe3b882vhilZaWFnUpUHZ2dsH11VdfzdVXf/ulFVlZWVHHWr58edTytm3bsmXLlqOKU0RERERERGJMJLj7s8c7kPLM3bcD15VQnRHRLge4LUr/Q8Bvgp9IoeAnv91dEddpJcRSs8j9Y8BjRcqygPNL6P9b4LdRqjpEay8iIiIiIiISKaZEgpltoviee9y9yTGPSERERERERETKrVi3NqRGXFcFriV84r+IiIiIiIiIVCAxHbbo7rsjfra6+1jCp/yLiIiIiIiISAUS69aGNhG3lQivUIh1NYOIiIiIiIiInCRiTQaMibg+SPjbCH5+7MMRERERERERkfIs1kTCLe7+v8gCM2t8HOIRERERERERkXIspjMSgGkxlomIiIiIiIjISazURIKZnW9mvYBaZvaziJ90wt/eIHLE8vLyaN26Nd26dQNgwoQJNG3aFDNj165dJfZ78MEHSUxMJCEhgQEDBuAe/mbSn/70p7Rq1YrExERuv/128vLyAOjTpw8pKSmkpKQQHx9PSkrKcX83ERERERGRk1VZWxuaA92A2kD3iPI9wK+OU0zfO2aWB6wBTiF8hsQ/gcfd/dAxfMbZwOPAj4EvgAPASHefcaye8V0bN24cCQkJfP311wC0b9+ebt26kZaWVmKfd999l8WLF7N69WoAOnTowMKFC0lLS+Oll17ijDPOwN3p3bs3L7/8Mtdddx0vvvhiQf//+7//o1atWsf1vURERERERE5mpSYS3H0mMNPMLnL3976jmL6Pctw9BcDM6gIvAGcAvz8Wg5uZAa8Cz7r79UFZI+DqKG2ruPvBY/Hc42nLli3MmjWLIUOG8NhjjwHQunXrMvuZGfv27ePAgQO4O7m5uZx99tkAnHHGGQAcPHiQAwcOEP61fcvdeemll5g/f/4xfhsREREREZGKI9bDFlea2Z1AIhFbGty933GJ6nvM3XeY2a3AUjMbBjQCngNqBE3ucvd3zeyfwCvu/iqAmT0PvAT8F/gHcCrhrSe9gIbAAXf/a8RzPgaeCPqmAz8DagKVzezKoK4l4VUSw9x9pplVBkYAacBpwJPu/jczSwOGAbuCPsuBX3j+noEocnLziB8867B/P1kjrgLg3nvvZeTIkezZs+ew+l900UV06tSJc845B3fnrrvuIiEhoaD+iiuuYMmSJXTt2pXevXsX6vvOO+9w9tlnc9555x123CIiIiIiIhIWayLhOeBD4ArgD8ANwAfHK6jvO3f/X/ChvS6wA+js7vvM7DxgCpAKPA3cB7xqZrWAnwA3Ed6+MM7dnzezU4HKQFdgRRmPbQMku/vnZvZnYL679zOz2sASM5tL+N/tK3dva2anAYvNbE7QvzXhRNE2YDHQHvhX5AOCBMmtAHFxZzE06fAXPoRCId577z1yc3PZs2cPmZmZ7N69m1AoVNBm3759LF68OOoWhK1bt/Kvf/2LKVOmAPDAAw9w9tlnk5ycDMBDDz3EgQMHeOSRR3j88cdJTU0t6Pv4449z4YUXFnqWnJyys7P17yzlluanlGean1JeaW5KeVYR52esiYSm7n6tmV3j7s+a2QvAO8czsJPIKcAEM0sB8oBmAO6+0Mz+YmZnEV51MN3dD5rZe8AQM2tAeMXCxqJL9M3sSaAD4VUKbYPit9398+C6C3C1mT0Q3FclvKqhC5BsZvl/qq8FnEf4vIUl7r4lGD8TiKdIIsHdJwITARo2aepj1sQ6fb6VdUMab731FsuXLyc9PZ19+/bx9ddfM2nSJCZPnhwOtmpV2rdvT1xcXLH+o0aN4qqrrqJr164ALF26lH379hU7V+HTTz9lyZIlPPBA+Fdw8OBB+vTpw/Lly2nQoMFhxy3fL6FQqNSzNkROJM1PKc80P6W80tyU8qwizs9YPwnmBv/90sxaAp8S/mu7RGFmTQgnDXYQPifhM6AV4a0K+yKa/hP4BXAdcDOAu79gZv8GrgLeMLPbgHWEkw0Ebe40szhgWcRY30SGAPRy9w1F4jLgbnd/q0h5GrA/oiiPMuZGtVMqsyHYpnC4hg8fzvDhw4Hw/3SjR48uSCKUpWHDhvz973/noYcewt1ZuHAh9957L9nZ2ezZs4dzzjmHgwcPMmvWLC6++OKCfnPnzuX8889XEkFEREREROQolfr1jxEmmtmZwO+A14D1wMjjFtX3WLDC4K/AhOCMgVrA9uAbHH5JeKtCvgzgXgB3Xx/0bwL8z93HAzOBZGA+UNXM7ojoW72UMN4C7g4SB5hZ64jyO8zslKC8mZnVKGGM79z48eNp0KABW7ZsITk5mf79+wOwbNmyguvevXtz7rnnkpSURKtWrWjVqhXdu3fnm2++4eqrryY5OZmUlBTq1q3L7bffXjD21KlT6du37wl5LxERERERkZNJTCsS3H1ScLkQaHL8wvneqhZsB8j/+sfngMeCur8A083sRmA2ESsH3P0zM/uA8Dcy5Ps58EszyyW88uPP7u5m1gN43MweBHYG4wwqIZ4/AmOB1WZWCdhE+Gs8JxHesrAiSDLsBHocxXsftbS0tIJlQAMGDGDAgAHF2qSmpjJpUngKVq5cmb/97W/F2px99tksXbq0xOdkZGQck3hFREREREQqupgSCWZ2NvBnoJ67dzWzFsBF7v70cY3ue8LdK5dSt5HwqoJ8BR/+zaw64TMKpkS0H0H4mxWKjrOd8BaIaM/IILy6If8+B7gtSrtDwG+Cn0ih4Ce/3V0lvY+IiIiIiIhUbLFubcggvCy+XnD/H4Il+XJkzOxywt988YS7f3Wi4xERERERERGJRayJhDh3fwk4BODuBwkfyCdHyN3nunsjdx97omMRERERERERiVWsiYRvzOwHgAOY2Y8B/RVdREREREREpIKJ9esf7yf8bQ3nmtli4Cyg93GLSkRERERERETKpVITCWbW0N0/cfcVZnYJ0BwwYIO7534nEYqIiIiIiIhIuVHW1oZXI65fdPd17r5WSQQRERERERGRiqmsRIJFXDc5noGIiIiIiIiISPlXViLBS7gWERERERERkQqorERCKzP72sz2AMnB9ddmtsfMvv4uApSTV15eHq1bt6Zbt24ATJgwgaZNm2Jm7Nq1K2qfzMxMLrroIhITE0lOTubFF18sqJs/fz5t2rShZcuW3HTTTRw8eBCAr776iu7du9OqVSsSExP5xz/+cfxfTkRERERE5CRVaiLB3Su7+xnufrq7Vwmu8+/P+K6ClJPTuHHjSEhIKLhv3749c+fOpVGjRiX2qV69Ov/85z9Zt24ds2fP5t577+XLL7/k0KFD3HTTTUydOpW1a9fSqFEjnn32WQCefPJJWrRowapVqwiFQvzf//0fBw4cOO7vJyIiIiIicjKK9esfpRRm1gB4EmhBODnzOjAQ+AnwgLt3i2ibAbzu7tPMLBTULysy3oXAaOBsYC+wHBjg7nuD+rbAe8B17j6thJj+B3R19w0RZWOB7cC/8+Mys/uBlu7eL2hzA3C9u19V2jvn5OYRP3hWDL+dwrJGhIfdsmULs2bNYsiQITz22GMAtG7dusz+zZo1K7iuV68edevWZefOneTm5nLqqacW1Hfu3Jnhw4dzyy23YGbs2bMHdyc7O5s6depQpYqmvoiIiIiIyJEoa2uDlMHMDHgFeNXdzwOaATWBPx3heGcDLwOD3L25u7cGZgOnB/WVgUeBOWUMNRW4LmLcSkDvoDzSeKCNmbU3s9rAI8DdRxL74bj33nsZOXIklSod+RRcsmQJBw4c4NxzzyUuLo6DBw+ybFk4JzNt2jQ2b94MwF133cUHH3xAvXr1SEpKYty4cUf1XBERERERkYpMf5Y9epcC+9z9HwDunmdm9wGbgAVHMN6dwLPu/l5+QZFVB3cD04G2ZYwzBXgReDi47wh87O4fm1njiLEPmtmvgb8AS4Bn3P1/0QY0s1uBWwHi4s5iaNLBw3oxgFAoxHvvvUdubi579uwhMzOT3bt3EwqFCtrs27ePxYsXU6tWrRLH2b17N/fddx+DBw9m0aJFADz44IP069eP3NxcUlNTycnJIRQKsXDhQuLi4njhhRfYtm0b/fv3Z9KkSdSoUeOw45fvh+zs7EJzSqQ80fyU8kzzU8orzU0pzyri/FQi4eglEt56UMDdvzazT4CmwMVmlhlR3ZDw1oeStASejVZhZvWBnkAnykgkuPsaMztkZq3cfRXh1QlTSmj7rpl9AFwOJERrE7SbCEwEaNikqY9Zc/jTJ+uGNN566y2WL19Oeno6+/bt4+uvv2bSpElMnjwZgKpVq9K+fXvi4uKijvH111+TlpbGY489Ru/evQvK09LSuPPOOwGYM2cO+/fvJy0tjVGjRjF48GAuvvhiAJ5++mnOOussLrzwwsOOX74fQqEQaWlpJzoMkag0P6U80/yU8kpzU8qzijg/lUg4/t6JckbCkRpLeMvDofCOijJNAa4zs3VAD+D30RqZWU0gFTgFOAvYUtbA1U6pzIYRpR6jUKLhw4czfPhwIPw/3ejRowuSCGU5cOAAPXv25MYbbyyURADYsWMHdevWZf/+/Tz66KMMGTIEgIYNGzJv3jwuvvhiPvvsMzZs2ECTJk2OKHYREREREZGKThvFj9564ILIAjM7g/DKg/8ewXjrio4XIRWYamZZhM87+IuZ9ShlrKnAzwmvNFjt7p+V0O5hYDLhcx0eP4KYj4nx48fToEEDtmzZQnJyMv379wdg2bJlBdcvvfQSixYtIiMjg5SUFFJSUsjMzARg1KhRJCQkkJycTPfu3bn00ksB+N3vfse7775LUlISl112GY8++miJqx1ERERERESkdObuJzqG77XgsMWlwHh3/2dwGOJfga+B/8dhfmtDcNjiEuDn7v7voOxnwOLIREDkOGXE92/gNGBc/jkOZpbGt9/akET4cMcU4ADhb3T4jbu/Xdq4zZs39w0bNpTWROSEqYjLy+T7Q/NTyjPNTymvNDelPDtZ56eZLXf31Gh1WpFwlDyciekJXGtmG4H/APuA38Q4xCwz2xL8vBwkC64DRpvZhuDsgiuAPUcY4hTgfMLfLFFIkAR5CrjP3fe5+yHgDmCcmZ16hM8TERERERGRk5jOSDgG3H0z0D1KVSj4iWybHnGdVsJ47wEXl/HM9NLqI9qNJXy2QmRZZFwditQtA1rEMraIiIiIiIhUPFqRICIiIiIiIiIx04qE77ngjIPnihTvd/d2JyIeERERERERObkpkfA95+5rCB+UKCIiIiIiInLcaWuDiIiIiIiIiMRMiQQRERERERERiZkSCSIiIiIiIiISMyUS5Duxb98+LrzwQlq1akViYiK///3vAdi0aRPt2rWjadOm9OnThwMHDpQ4xieffELNmjUZPXo0AJs3b6ZTp060aNGCxMRExo0bV9D2888/p3Pnzpx33nl07tyZL7744vi+oIiIiIiISAWhRMJRMLPsIvfpZjYhuO5oZivM7KCZ9Q7KkswsM/j53Mw2Bddzj0Es8Wa2toS6jIhnrTCzi8oY5/qjjaeo0047jfnz57Nq1SoyMzOZPXs277//PoMGDeK+++7jv//9L2eeeSZPP/10iWPcf//9dO3ateC+SpUqjBkzhvXr1/P+++/z5JNPsn79egBGjBjBZZddxsaNG7nssssYMWLEsX4lERERERGRCkmJhOPnEyAdeCG/wN3XuHuKu6cArwEDg/vLv4N4BgbPHQz8rZR28cAxTySYGTVr1gQgNzeX3NxczIz58+fTu3dvAG666SZeffXVqP1fffVVGjduTGJiYkHZOeecQ5s2bQA4/fTTSUhIYOvWrQDMnDmTm266qcxxRURERERE5PDo6x+PE3fPAjCzQ2W1NbO+wG8AA2a5+6CgPNvdawbXvYFu7p5uZmcDfwWaBEPcAWwDKpvZ34GfAFuBa9w9p8jjFgFNgzGbBuOcBeQB1wIjgAQzywSedffHo8Wck5tH/OBZMfwmIGvEVQDk5eVxwQUX8N///pc777yTc889l9q1a1OlSngaNmjQoCARECk7O5tHH32Ut99+u2BbQ7FnZGWxcuVK2rVrB8Bnn33GOeecA8APf/hDPvvss5hiFRERERERkdJpRcLRqRaxVSET+MPhDmBm9YBHgUuBFKCtmfUoo9t4YKG7twLaAOuC8vOAJ909EfgS6BWlb3dgTXD9fNC+FeHkw3bCKxbeCVZKRE0iHKnKlSuTmZnJli1bWLJkCR9++GFM/YYNG8Z9991XsKKhqOzsbHr16sXYsWM544wzitWbGWZ2VLGLiIiIiIhImFYkHJ2cYLsAED4jAUg9zDHaAiF33xmM8TzQEXi1lD6XAjcCuHse8JWZnQlscvfMoM1ywtsU8o0ys98CO4FbzOx0oL67zwjG2Rc8v8SHmtmtwK0AcXFnMTTpYEwvGAqFipXFx8czefJkdu7cybx586hcuTLr1q2jWrVqxdrPmTOHyZMnM2DAALKzs6lUqRKbN2+mZ8+eHDx4kIceeoh27dpRp06dgr5nnHEG06dP5wc/+AG7d+/m9NNPjxqHnJyys7P17y3lluanlGean1JeaW5KeVYR56cSCeWbR1xXjaH9/ojrPKBaxP1Ad5+WfxMkEg4vGPeJwESA5s2b+903XBNz3507d3LKKadQu3ZtcnJy+N3vfsegQYPYvXs3O3fu5LrrrmPq1KncfPPNpKWlFeq7evXqguthw4ZRs2ZNHnjgAdydm266ifbt2zN27NhCffr06cPGjRvp1asXI0aM4Lrrris2rpy8QqGQ/r2l3NL8lPJM81PKK81NKc8q4vzU1oYTbwlwiZnFmVlloC+wMKj7zMwSzKwS0DOizzzC5yJgZpXNrNbhPtTd9wBb8rdRmNlpZlYd2AMcdpKhLNu3b6dTp04kJyfTtm1bOnfuTLdu3Xj00Ud57LHHaNq0Kbt37+aWW24B4LXXXmPo0KGljrl48WKee+455s+fT0pKCikpKbzxxhsADB48mLfffpvzzjuPuXPnMnjw4GP9SiIiIiIiIhWSViQcJ2bWFpgBnAl0N7OHg7MLCnH37WY2GFjAt4ctzgyqBwOvE96OsAzIPyTgHmCimd1CeOXBHYTPNzhcvwT+ZmZ/AHIJH7a4Gsgzs1VAxrE6JyE5OZmVK1cWK2/SpAlLliwpVn711Vdz9dVXFysfNmxYwXWHDh1w92JtAH7wgx8wb968Iw9YREREREREolIi4Sjkf6NCxH0GkBFcLwUalNI3PeJ6CjAlSptpwLQo5Z8B0fYVtIxoMzriOj1KW9x9I+HzFoqKViYiIiIiIiKirQ0iIiIiIiIiEjslEkREREREREQkZkokiIiIiIiIiEjMlEgQERERERERkZgpkSAiIiIiIiIiMVMiQURERERERERipkSCiIiIiIiIiMRMiQQRERERERERiZkSCXLcbd68mU6dOtGiRQsSExMZN24cAKtWreKiiy4iKSmJ7t278/XXX0ftP27cOFq2bEliYiJjx44tVj9mzBjMjF27dgEwatQoUlJSSElJoWXLllSuXJnPP//8uL2fiIiIiIhIRaJEwnfMzPLMLNPM1pnZKjP7PzM7pv8OEc9Ya2b/z8xqH2b/7GMZT5UqVRgzZgzr16/n/fff58knn2T9+vX079+fESNGsGbNGnr27MmoUaOK9V27di1///vfWbJkCatWreL111/nv//9b0H95s2bmTNnDg0bNiwoGzhwIJmZmWRmZjJ8+HAuueQS6tSpcyxfSUREREREpMJSIuG7l+PuKe6eCHQGugK/P07PaAl8Dtx5jMc/LOeccw5t2rQB4PTTTychIYGtW7fyn//8h44dOwLQuXNnpk+fXqzvBx98QLt27ahevTpVqlThkksu4ZVXXimov++++xg5ciRmFvXZU6ZMoW/fvsfhrURERERERCqmKic6gIrM3XeY2a3AUjMbBjQCngNqBE3ucvd3zeyfwCvu/iqAmT0PvAT8F/gHcCrhpFAvd99Y5DHvAclBv3OBJ4GzgL3Ar9z9QzNrDLwA1ARmxhJ7Tm4e8YNnldkua8RVhe+zsli5ciXt2rUjMTGRmTNn0qNHD15++WU2b95crH/Lli0ZMmQIu3fvplq1arzxxhukpqYCMHPmTOrXr0+rVq2iPnvv3r3Mnj2bCRMmxPJKIiIiIiIiEgNz9xMdQ4ViZtnuXrNI2ZdAc2APcMjd95nZecAUd081s0uA+9y9h5nVAjKB84DHgffd/XkzOxWo7O45+c8ws8rAVOBpd59tZvOA2919o5m1A4a7+6Vm9howzd3/aWZ3Ao8WjTGI81bgVoC4uLMuGDr272W+b1L9WgXXOTk53HPPPfziF7+gY8eOfPLJJzzxxBN89dVXtG/fnldeeYWZM4vnMWbNmsXMmTOpVq0a8fHxnHLKKfTv35/77ruPUaNGUbNmTa677jr+9re/UavWt8+bP38+c+fO5c9//nOZccrJJTs7m5o1i01hkXJB81PKM81PKa80N6U8O1nnZ6dOnZa7e2q0OiUSvmNlJBL2AROAFCAPaObu1YM264A0oBfQ1N0fMLPrgSFA/oqFjUHbPGANUB/4AOgEVAN2AhsiHn2auyeY2W7gh+6ea2ZnANuiJRIiNWzS1Cv9fFyZ75u/IiE3N5du3bpxxRVXcP/99xdr95///Idf/OIXLFmypNTxfvOb39CgQQMuvvhiLrvsMqpXrw7Ali1bqFevHkuWLOGHP/whAD179uTaa6/l+uuvLzNOObmEQiHS0tJOdBgiUWl+Snmm+SnlleamlGcn6/w0sxITCdracIKZWRPCSYMdhM9K+AxoRXirwr6Ipv8EfgFcB9wM4O4vmNm/gauAN8zsNnefT3BGgplVB94ifEZCBvClu6eUEMphZZSqnVKZDUW2LZTE3bnllltISEgolETYsWMHdevW5dChQzzyyCPcfvvtUfvnt/vkk0945ZVXeP/996lduzY7duwoaBMfH8+yZcuIi4sD4KuvvmLhwoVMnjz5cF5LREREREREyqDDFk8gMzsL+CswwcNLQ2oB2939EPBLoHJE8wzgXgB3Xx/0bwL8z93HEz7bIDlyfHffCwwA/o/wmQibzOzaoK+ZWf7hAosJJygAbji2bwmLFy/mueeeY/78+QVfy/jGG28wZcoUmjVrxvnnn0+9evW4+eabAdi2bRtXXnllQf9evXrRokULunfvzpNPPknt2rXLfOaMGTPo0qULNWrUKLOtiIiIiIiIxE4rEr571cwsEzgFOEj4cMXHgrq/ANPN7EZgNvBNfid3/8zMPgBejRjr58AvzSwX+BQodhiAu680s9VAX8JJgqfM7LfB86cCq4B7gBfMbBAxHrZ4ODp06EBJW2juueeeYmX16tXjjTfeKLh/5513ynxGVlZWofv09HTS09MPK04REREREREpmxIJ3zF3r1xK3UYKryoYlH8RbFM4D5gS0X4EMCLKODWL3HePuP1plPabgIsiin5b8huIiIiIiIhIRaatDd8DZnY54UMTn3D3r050PCIiIiIiIlJxaUXC94C7zwUaneg4RERERERERLQiQURERERERERipkSCiIiIiIiIiMRMiQQRERERERERiZkSCSIiIiIiIiISMyUSRERERERERCRmSiSIiIiIiIiISMyUSJDjavPmzXTq1IkWLVqQmJjIuHHjABg2bBj169cnJSWFlJQU3njjjaj9Z8+eTfPmzWnatCkjRowoKHd3hgwZQrNmzUhISGD8+PGF+i1dupQqVaowbdq04/dyIiIiIiIiFVCVEx3AiWJm2e5es0hZR2AskAxc5+7TzCwJeC5o0hD4KvjZ5e6XH2UM8cDr7t4ySl0GcEnwLAPud/d5hzF2RjD2NDMLAecA+4BsoJ+7byihXwpQz92jf7I/TFWqVGHMmDG0adOGPXv2cMEFF9C5c2cA7rvvPh544IES++bl5XHnnXfy9ttv06BBA9q2bcvVV19NixYtyMjIYPPmzXz44YdUqlSJHTt2FOo3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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Plot feature importances\n",
"# plt.figure(figsize=(16, 12))\n",
"lgb.plot_importance(model, figsize=(16, 12), importance_type='gain') # Adjust max_num_features as needed\n",
"plt.title(\"Feature Importances\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'XXX' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32md:\\Projects\\gamedayspx\\troubleshoot_day_model.ipynb Cell 9\u001b[0m line \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[0m XXX\n",
"\u001b[1;31mNameError\u001b[0m: name 'XXX' is not defined"
]
}
],
"source": [
"XXX"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"extensionsToCheck = ['L1', 'L2', 'H1', 'H2']\n",
"level_cols = [x for x in df_final.columns if any(ext in x for ext in extensionsToCheck)]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_final.groupby(pd.cut(df_final['CurrentClose30toClose'],5))['Target_clf'].mean()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_final.groupby('OHLC4_Current_Trend')['Target_clf'].mean()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_final.groupby(['GreenProbas']).mean().T"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data.loc[final_row, df_final.columns[-5:]]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.7876608388341906\n",
"0.7399741267787839\n",
"0.8067700987306065\n",
"0.794694547312638\n",
"0.7601156069364162\n",
"0.7993920972644377\n"
]
}
],
"source": [
"from sklearn.metrics import roc_auc_score, precision_score, recall_score\n",
"\n",
"cal = res.copy()\n",
"\n",
"print(roc_auc_score(cal['True'], cal['CalibPredicted']))\n",
"print(precision_score(cal['True'], cal['CalibPredicted'] > .5))\n",
"print(recall_score(cal['True'], cal['CalibPredicted'] > .5))\n",
"\n",
"res1_hi_confidence = cal.query('(CalibPredicted >= .6) | (CalibPredicted < 0.4)')\n",
"\n",
"print(roc_auc_score(res1_hi_confidence['True'], res1_hi_confidence['CalibPredicted']))\n",
"print(precision_score(res1_hi_confidence['True'], res1_hi_confidence['CalibPredicted'] > .5))\n",
"print(recall_score(res1_hi_confidence['True'], res1_hi_confidence['CalibPredicted'] > .5))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"len(res1_hi_confidence) / len(cal)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"XXX"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import yfinance as yf\n",
"\n",
"vix = yf.Ticker('^TNX')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"vix.history(interval='30m')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_final.groupby(pd.qcut(df_final['CurrentGap'], 10))['Target_clf'].mean()"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.metrics import roc_auc_score, precision_score, recall_score\n",
"# st.subheader('New Prediction')\n",
"nq = 7\n",
"\n",
"df_probas = res.groupby(pd.qcut(res['Predicted'],nq)).agg({'True':[np.mean,len,np.sum]})\n",
"# df_probas = res.groupby(pd.cut(res['Predicted'],[-np.inf, 0.27, 0.375, 0.625, 0.7, np.inf])).agg({'True':[np.mean,len,np.sum]})\n",
"df_probas.columns = ['PctGreen','NumObs','NumGreen']\n",
"\n",
"# Calculate quantiles\n",
"quantiles = pd.qcut(res['Predicted'], nq, labels=False, duplicates='drop')\n",
"\n",
"# Determine the number of quantiles\n",
"num_quantiles = len(quantiles.unique())\n",
"\n",
"# Calculate the middle quantile(s)\n",
"if num_quantiles % 2 == 0: # Even number of quantiles\n",
" middle_quantiles = quantiles.isin([num_quantiles // 2 - 1, num_quantiles // 2])\n",
"else: # Odd number of quantiles\n",
" middle_quantiles = quantiles == num_quantiles // 2\n",
"\n",
"# Extract the lower and upper thresholds\n",
"lo_thres = 0.4 # res.loc[middle_quantiles, 'Predicted'].min()\n",
"hi_thres = 0.6 # res.loc[middle_quantiles, 'Predicted'].max()\n",
"\n",
"roc_auc_score_all = roc_auc_score(res['True'].astype(int), res['Predicted'].values)\n",
"roc_auc_score_calib = roc_auc_score(res.dropna(subset='CalibPredicted')['True'].astype(int), res.dropna(subset='CalibPredicted')['CalibPredicted'].values)\n",
"precision_score_all = precision_score(res['True'].astype(int), res['Predicted'] > 0.5)\n",
"recall_score_all = recall_score(res['True'].astype(int), res['Predicted'] > 0.5)\n",
"len_all = len(res)\n",
"\n",
"res2_filtered = res.loc[(res['Predicted'] > hi_thres) | (res['Predicted'] <= lo_thres)]\n",
"\n",
"roc_auc_score_hi = roc_auc_score(res2_filtered['True'].astype(int), res2_filtered['Predicted'].values)\n",
"roc_auc_score_hi_calib = roc_auc_score(res2_filtered.dropna(subset='CalibPredicted')['True'].astype(int), res2_filtered.dropna(subset='CalibPredicted')['CalibPredicted'].values)\n",
"precision_score_hi = precision_score(res2_filtered['True'].astype(int), res2_filtered['Predicted'] > 0.5)\n",
"recall_score_hi = recall_score(res2_filtered['True'].astype(int), res2_filtered['Predicted'] > 0.5)\n",
"len_hi = len(res2_filtered)\n",
"\n",
"df_performance = pd.DataFrame(\n",
" index=[\n",
" 'N',\n",
" 'ROC AUC',\n",
" 'Calib. AUC',\n",
" 'Precision',\n",
" 'Recall'\n",
" ],\n",
" columns = [\n",
" 'All',\n",
" 'High Confidence'\n",
" ],\n",
" data = [\n",
" [len_all, len_hi],\n",
" [roc_auc_score_all, roc_auc_score_hi],\n",
" [roc_auc_score_calib, roc_auc_score_hi_calib],\n",
" [precision_score_all, precision_score_hi],\n",
" [recall_score_all, recall_score_hi]\n",
" ]\n",
").round(2)\n",
"\n",
"def get_acc(t, p):\n",
" if t == False and p <= lo_thres:\n",
" return '✅' # ✅\n",
" elif t == True and p > hi_thres:\n",
" return '✅' # \n",
" elif t == False and p > hi_thres:\n",
" return '❌' # ❌\n",
" elif t == True and p <= lo_thres:\n",
" return '❌'\n",
" else:\n",
" return '🟨' # ⬜\n",
" \n",
"def get_acc_html(t, p):\n",
" if t == False and p <= lo_thres:\n",
" return '✅'\n",
" elif t == True and p > hi_thres:\n",
" return '✅'\n",
" elif t == False and p > hi_thres:\n",
" return '❌'\n",
" elif t == True and p <= lo_thres:\n",
" return '❌'\n",
" else:\n",
" return '⬜'\n",
"\n",
"\n",
"perf_daily = res.copy()\n",
"perf_daily['Accuracy'] = [get_acc(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]\n",
"perf_daily['HTML'] = [get_acc_html(t, p) for t, p in zip(perf_daily['True'], perf_daily['Predicted'])]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" \n",
" | \n",
" True | \n",
" Predicted | \n",
" CalibPredicted | \n",
" Accuracy | \n",
" HTML | \n",
" \n",
" \n",
" \n",
" \n",
" 2023-10-06 | \n",
" True | \n",
" 0.390290 | \n",
" 0.339394 | \n",
" ❌ | \n",
" ❌ | \n",
" \n",
" \n",
" 2023-10-09 | \n",
" True | \n",
" 0.717766 | \n",
" 0.730088 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-10 | \n",
" True | \n",
" 0.567903 | \n",
" 0.566845 | \n",
" 🟨 | \n",
" ⬜ | \n",
" \n",
" \n",
" 2023-10-11 | \n",
" False | \n",
" 0.416167 | \n",
" 0.343373 | \n",
" 🟨 | \n",
" ⬜ | \n",
" \n",
" \n",
" 2023-10-12 | \n",
" False | \n",
" 0.435582 | \n",
" 0.341317 | \n",
" 🟨 | \n",
" ⬜ | \n",
" \n",
" \n",
" 2023-10-13 | \n",
" True | \n",
" 0.754148 | \n",
" 0.841667 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-16 | \n",
" False | \n",
" 0.363547 | \n",
" 0.339286 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-17 | \n",
" False | \n",
" 0.214458 | \n",
" 0.104895 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-18 | \n",
" False | \n",
" 0.558775 | \n",
" 0.569149 | \n",
" 🟨 | \n",
" ⬜ | \n",
" \n",
" \n",
" 2023-10-19 | \n",
" False | \n",
" 0.330018 | \n",
" 0.243590 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-20 | \n",
" False | \n",
" 0.711180 | \n",
" 0.731278 | \n",
" ❌ | \n",
" ❌ | \n",
" \n",
" \n",
" 2023-10-23 | \n",
" True | \n",
" 0.799432 | \n",
" 0.842105 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-24 | \n",
" False | \n",
" 0.219967 | \n",
" 0.104167 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-25 | \n",
" False | \n",
" 0.303841 | \n",
" 0.242553 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-26 | \n",
" False | \n",
" 0.697450 | \n",
" 0.728070 | \n",
" ❌ | \n",
" ❌ | \n",
" \n",
" \n",
" 2023-10-27 | \n",
" True | \n",
" 0.765789 | \n",
" 0.842541 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-10-30 | \n",
" True | \n",
" 0.511026 | \n",
" 0.566138 | \n",
" 🟨 | \n",
" ⬜ | \n",
" \n",
" \n",
" 2023-10-31 | \n",
" True | \n",
" 0.788861 | \n",
" 0.842975 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-11-01 | \n",
" True | \n",
" 0.749367 | \n",
" 0.843407 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" 2023-11-02 | \n",
" True | \n",
" 0.714132 | \n",
" 0.724891 | \n",
" ✅ | \n",
" ✅ | \n",
" \n",
" \n",
" \n",
" "
],
"text/plain": [
" True Predicted CalibPredicted Accuracy HTML\n",
"2023-10-06 True 0.390290 0.339394 ❌ ❌\n",
"2023-10-09 True 0.717766 0.730088 ✅ ✅\n",
"2023-10-10 True 0.567903 0.566845 🟨 ⬜\n",
"2023-10-11 False 0.416167 0.343373 🟨 ⬜\n",
"2023-10-12 False 0.435582 0.341317 🟨 ⬜\n",
"2023-10-13 True 0.754148 0.841667 ✅ ✅\n",
"2023-10-16 False 0.363547 0.339286 ✅ ✅\n",
"2023-10-17 False 0.214458 0.104895 ✅ ✅\n",
"2023-10-18 False 0.558775 0.569149 🟨 ⬜\n",
"2023-10-19 False 0.330018 0.243590 ✅ ✅\n",
"2023-10-20 False 0.711180 0.731278 ❌ ❌\n",
"2023-10-23 True 0.799432 0.842105 ✅ ✅\n",
"2023-10-24 False 0.219967 0.104167 ✅ ✅\n",
"2023-10-25 False 0.303841 0.242553 ✅ ✅\n",
"2023-10-26 False 0.697450 0.728070 ❌ ❌\n",
"2023-10-27 True 0.765789 0.842541 ✅ ✅\n",
"2023-10-30 True 0.511026 0.566138 🟨 ⬜\n",
"2023-10-31 True 0.788861 0.842975 ✅ ✅\n",
"2023-11-01 True 0.749367 0.843407 ✅ ✅\n",
"2023-11-02 True 0.714132 0.724891 ✅ ✅"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"perf_daily.tail(20)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"190"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_probas.loc[df_probas.index[0], 'NumObs']"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"df_levels = pd.DataFrame(\n",
" index=['H2','H1','L1','L2'],\n",
" columns=['Level','BreakPct(100)','TouchPct(100)'],\n",
" data=[\n",
" [f\"{data['H2'].iloc[-1]:.2f}\",f\"{data['H2BreakPct'].iloc[-2]:.1%}\",f\"{data['H2TouchPct'].iloc[-2]:.1%}\"],\n",
" [f\"{data['H1'].iloc[-1]:.2f}\",f\"{data['H1BreakPct'].iloc[-2]:.1%}\",f\"{data['H1TouchPct'].iloc[-2]:.1%}\"],\n",
" [f\"{data['L1'].iloc[-1]:.2f}\",f\"{data['L1BreakPct'].iloc[-2]:.1%}\",f\"{data['L1TouchPct'].iloc[-2]:.1%}\"],\n",
" [f\"{data['L2'].iloc[-1]:.2f}\",f\"{data['L2BreakPct'].iloc[-2]:.1%}\",f\"{data['L2TouchPct'].iloc[-2]:.1%}\"]\n",
" ]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" \n",
" | \n",
" Level | \n",
" BreakPct(100) | \n",
" TouchPct(100) | \n",
" \n",
" \n",
" \n",
" \n",
" H2 | \n",
" 4380.66 | \n",
" 8.0% | \n",
" 18.0% | \n",
" \n",
" \n",
" H1 | \n",
" 4359.56 | \n",
" 22.0% | \n",
" 43.0% | \n",
" \n",
" \n",
" L1 | \n",
" 4306.05 | \n",
" 28.0% | \n",
" 43.0% | \n",
" \n",
" \n",
" L2 | \n",
" 4285.48 | \n",
" 11.0% | \n",
" 27.0% | \n",
" \n",
" \n",
" \n",
" "
],
"text/plain": [
" Level BreakPct(100) TouchPct(100)\n",
"H2 4380.66 8.0% 18.0%\n",
"H1 4359.56 22.0% 43.0%\n",
"L1 4306.05 28.0% 43.0%\n",
"L2 4285.48 11.0% 27.0%"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_levels"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
" \n",
" \n",
" \n",
" | \n",
" All | \n",
" High Confidence | \n",
" \n",
" \n",
" \n",
" \n",
" N | \n",
" 1328.00 | \n",
" 1028.00 | \n",
" \n",
" \n",
" ROC AUC | \n",
" 0.81 | \n",
" 0.84 | \n",
" \n",
" \n",
" Calib. AUC | \n",
" 0.79 | \n",
" 0.81 | \n",
" \n",
" \n",
" Precision | \n",
" 0.75 | \n",
" 0.80 | \n",
" \n",
" \n",
" Recall | \n",
" 0.80 | \n",
" 0.84 | \n",
" \n",
" \n",
" \n",
" "
],
"text/plain": [
" All High Confidence\n",
"N 1328.00 1028.00\n",
"ROC AUC 0.81 0.84\n",
"Calib. AUC 0.79 0.81\n",
"Precision 0.75 0.80\n",
"Recall 0.80 0.84"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_performance"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'perf_daily' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32md:\\Projects\\gamedayspx\\troubleshoot_day_model.ipynb Cell 28\u001b[0m line \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mpandas\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mpd\u001b[39;00m\n\u001b[0;32m 2\u001b[0m \u001b[39mimport\u001b[39;00m \u001b[39mplotly\u001b[39;00m\u001b[39m.\u001b[39;00m\u001b[39mgraph_objs\u001b[39;00m \u001b[39mas\u001b[39;00m \u001b[39mgo\u001b[39;00m\n\u001b[1;32m----> 4\u001b[0m plot_data \u001b[39m=\u001b[39m perf_daily\u001b[39m.\u001b[39mmerge(data[[\u001b[39m'\u001b[39m\u001b[39mOpen\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39mHigh\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39mLow\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39mClose\u001b[39m\u001b[39m'\u001b[39m]], left_index\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m, right_index\u001b[39m=\u001b[39m\u001b[39mTrue\u001b[39;00m)\n\u001b[0;32m 6\u001b[0m df \u001b[39m=\u001b[39m plot_data\u001b[39m.\u001b[39mcopy()\n\u001b[0;32m 8\u001b[0m y_min \u001b[39m=\u001b[39m df[\u001b[39m'\u001b[39m\u001b[39mLow\u001b[39m\u001b[39m'\u001b[39m]\u001b[39m.\u001b[39mtail(\u001b[39m50\u001b[39m)\u001b[39m.\u001b[39mmin() \u001b[39m-\u001b[39m \u001b[39m50\u001b[39m\n",
"\u001b[1;31mNameError\u001b[0m: name 'perf_daily' is not defined"
]
}
],
"source": [
"import pandas as pd\n",
"import plotly.graph_objs as go\n",
"\n",
"plot_data = perf_daily.merge(data[['Open','High','Low','Close']], left_index=True, right_index=True)\n",
"\n",
"df = plot_data.copy()\n",
"\n",
"y_min = df['Low'].tail(50).min() - 50\n",
"y_max = df['High'].tail(50).max()\n",
"\n",
"increasing_color = '#3399ff' # Blue\n",
"decreasing_color = '#ff5f5f' # Red \n",
"\n",
"# Create a candlestick trace\n",
"candlestick_trace = go.Candlestick(\n",
" x=df.index,\n",
" open=df['Open'],\n",
" high=df['High'],\n",
" low=df['Low'],\n",
" close=df['Close'],\n",
" increasing_fillcolor=increasing_color, # Color for increasing candles\n",
" increasing_line_color=increasing_color, # Color for increasing candles\n",
" decreasing_fillcolor=decreasing_color, # Color for decreasing candles\n",
" decreasing_line_color=decreasing_color, # Color for decreasing candles\n",
" name='OHLC Chart'\n",
")\n",
"\n",
"# Create a scatter trace for symbols (correct and incorrect)\n",
"scatter_trace = go.Scatter(\n",
" x=df.index,\n",
" y=df['Low'] * 0.995,\n",
" text=df['HTML'],\n",
" mode='text',\n",
" marker=dict(size=10),\n",
" textposition='bottom center',\n",
" name='Predictions'\n",
")\n",
"\n",
"# Create a layout with initial x-axis range for the last 30 candles\n",
"layout = go.Layout(\n",
" title='OHLC Chart with Predictions (Right/Wrong)',\n",
" xaxis=dict(title='Date', range=[df.index[-50], df.index[-1]]), # Set initial range to last 30 data points\n",
" yaxis=dict(title='Price', range=[y_min, y_max]),\n",
" xaxis_rangeslider_visible=False,\n",
" template='plotly_dark',\n",
" grid=False\n",
")\n",
"\n",
"# Create a figure\n",
"fig = go.Figure(data=[candlestick_trace, scatter_trace], layout=layout)\n",
"\n",
"fig.update_xaxes(\n",
" rangebreaks=[\n",
" # NOTE: Below values are bound (not single values), ie. hide x to y\n",
" dict(bounds=[\"sat\", \"mon\"]), # hide weekends, eg. hide sat to before mon\n",
" dict(bounds=[16, 9.5], pattern=\"hour\"), # hide hours outside of 9.30am-4pm\n",
" # dict(values=[\"2019-12-25\", \"2020-12-24\"]) # hide holidays (Christmas and New Year's, etc)\n",
" ]\n",
" )\n",
"\n",
"\n",
"# Show the figure (you can also save it as an HTML file)\n",
"fig.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"plotlyServerURL": "https://plot.ly"
},
"data": [
{
"close": [
4239.9599609375,
4220.47998046875,
4224.47998046875,
4242.81005859375,
4253.72998046875,
4254.240234375,
4251.009765625,
4240.6201171875,
4236.77001953125,
4239.2998046875,
4246.52001953125,
4258.4599609375,
4263.6201171875,
4255.27001953125,
4248.4501953125,
4233.64990234375,
4233.93017578125,
4234.14990234375,
4245.75,
4239.7998046875,
4242.7900390625,
4254.2001953125,
4256.419921875,
4264.580078125,
4262.419921875,
4258.25,
4232.27978515625,
4242.759765625,
4251.2998046875,
4270.39013671875,
4301.66015625,
4295.2099609375,
4295.64990234375,
4307.2099609375,
4310.2900390625,
4317.43994140625,
4319.9599609375,
4321.0498046875,
4307.89013671875,
4302.009765625,
4296.60986328125,
4287.10986328125,
4300.22021484375,
4303.85009765625,
4305.41015625,
4302.5498046875,
4312.4501953125,
4334.419921875,
4337.58984375,
4339.06005859375,
4335.9599609375,
4335.85009765625,
4349.990234375,
4364.41015625,
4366.83984375,
4377.22021484375,
4383.06005859375,
4383.990234375,
4381.43994140625,
4367.1201171875,
4367.81982421875,
4361.0400390625,
4359.27978515625,
4360.85986328125,
4358.6298828125,
4368.56005859375,
4363.35986328125,
4368.330078125,
4357.740234375,
4358.22021484375,
4352.2001953125,
4354.91015625,
4350.2900390625,
4351.83984375,
4359.18994140625,
4363.419921875,
4367.759765625,
4376.7998046875,
4368.25,
4372.2099609375,
4374.52978515625,
4374.93994140625,
4378.06982421875,
4384.93017578125,
4378.14990234375,
4347.25,
4336.9501953125,
4338.64990234375,
4342.25,
4346.41015625,
4349.4501953125,
4371.990234375,
4357.43994140625,
4340.740234375,
4334,
4326.14990234375,
4341.6298828125,
4333.64990234375,
4314.919921875,
4326.60009765625,
4327.1201171875,
4328.6201171875,
4323.669921875,
4328.33984375,
4356.2001953125,
4371.43994140625,
4380.35986328125,
4377.919921875,
4372.330078125,
4373.35986328125,
4372.18994140625,
4368.97021484375,
4377.1201171875,
4372.2001953125,
4377.91015625,
4381.39013671875,
4371.93017578125,
4339.85986328125,
4359.7001953125,
4364.18994140625,
4372.10986328125,
4385.02001953125,
4393.009765625,
4380.6201171875,
4376.39990234375,
4361.56005859375,
4364.39013671875,
4359.02978515625,
4367.39990234375,
4372.97998046875,
4353.080078125,
4349.10009765625,
4338.16015625,
4341.31982421875,
4337.919921875,
4332.9599609375,
4327.93994140625,
4342.4599609375,
4337.830078125,
4333.39013671875,
4324.56982421875,
4316.77978515625,
4313.60009765625,
4320.0498046875,
4304.93994140625,
4301.56005859375,
4306.97021484375,
4312.2998046875,
4313.10009765625,
4322.64990234375,
4323.64013671875,
4307.31005859375,
4302.1201171875,
4281.91015625,
4277.77001953125,
4277.580078125,
4263.2900390625,
4245.10986328125,
4235.35986328125,
4234.8798828125,
4245.490234375,
4241.89013671875,
4254.759765625,
4253.02978515625,
4253.64013671875,
4238.10009765625,
4237.97998046875,
4235.35009765625,
4223.580078125,
4218,
4220.81005859375,
4225.58984375,
4235.8701171875,
4240.2998046875,
4240.240234375,
4254.89013671875,
4241.3798828125,
4241.43994140625,
4235.85009765625,
4238.81005859375,
4222.22998046875,
4217.60986328125,
4249.18017578125,
4255.240234375,
4253.56005859375,
4241.33984375,
4243.93017578125,
4227.2900390625,
4224.1201171875,
4232.89013671875,
4233.31005859375,
4241.02978515625,
4246.9501953125,
4252.0498046875,
4247.6201171875,
4212.2099609375,
4204.759765625,
4212.93017578125,
4220.919921875,
4206.75,
4203.60986328125,
4197.240234375,
4191.1201171875,
4188.31005859375,
4188.85009765625,
4188.2998046875,
4190.740234375,
4186.97998046875,
4164.9501953125,
4165.31982421875,
4174.7001953125,
4155.02978515625,
4156.7099609375,
4140.83984375,
4132.7099609375,
4133.22998046875,
4147.60986328125,
4152.72021484375,
4166.52978515625,
4153.43017578125,
4136.31982421875,
4143.5400390625,
4141.68994140625,
4145.85009765625,
4150.81005859375,
4145.31982421875,
4136.4599609375,
4129.1201171875,
4118.669921875,
4114.64990234375,
4108.9501953125,
4106.60009765625,
4115.7001953125,
4118.2998046875,
4159.830078125,
4140.2900390625,
4140.2001953125,
4140.06005859375,
4150.9599609375,
4144.31982421875,
4142.5,
4161.10009765625,
4167.2900390625,
4163.5,
4168.7099609375,
4172.9599609375,
4166.509765625,
4158.56005859375,
4168.02978515625,
4173.25,
4167.5400390625,
4175.14990234375,
4169.740234375,
4177.83984375,
4180.02978515625,
4189.1298828125,
4181.72998046875,
4191.8701171875,
4193.0400390625,
4193.35009765625,
4206.14990234375,
4222.759765625,
4223.240234375,
4214.259765625,
4217.72021484375,
4211.02001953125,
4208.02001953125,
4208.5,
4211.39013671875,
4215.080078125,
4224.08984375,
4239.25,
4237.60986328125,
4286.240234375,
4292.990234375,
4303.81982421875,
4298.169921875,
4298.81005859375,
4298.18017578125,
4302.02978515625,
4307.10009765625,
4313.60009765625,
4312.43994140625,
4313.5,
4313.60986328125,
4317.9599609375,
4358.240234375,
4348.8798828125,
4352.009765625,
4350.43994140625,
4360.490234375,
4366.43017578125,
4368.0400390625,
4361.39013671875,
4367.14990234375,
4368.0498046875,
4371.72998046875,
4365.39990234375,
4358.10986328125
],
"decreasing": {
"fillcolor": "#ff5f5f",
"line": {
"color": "#ff5f5f"
}
},
"high": [
4248.18994140625,
4242.77001953125,
4239.72998046875,
4243.72021484375,
4253.72998046875,
4255.9501953125,
4257.6201171875,
4251.490234375,
4242.9501953125,
4241.759765625,
4247.509765625,
4261.60009765625,
4268.5,
4266.5498046875,
4255.7998046875,
4248.77978515625,
4237.490234375,
4239.68017578125,
4245.97021484375,
4248.2900390625,
4242.85986328125,
4255.43017578125,
4259.39013671875,
4267.1298828125,
4265.41015625,
4263.419921875,
4243.22021484375,
4242.759765625,
4256.169921875,
4274.39013671875,
4301.89013671875,
4305.56982421875,
4300.0498046875,
4309.240234375,
4311.22021484375,
4317.490234375,
4324.10009765625,
4321.22998046875,
4322.31982421875,
4303.83984375,
4304.47021484375,
4298.3798828125,
4300.5,
4303.93994140625,
4313.02001953125,
4307.85986328125,
4312.64013671875,
4334.419921875,
4338.39013671875,
4341.72998046875,
4339.8701171875,
4336.08984375,
4349.990234375,
4365.72998046875,
4370.1201171875,
4379.64990234375,
4384.2001953125,
4385.4599609375,
4384.81982421875,
4381.4501953125,
4370.02001953125,
4369.35009765625,
4370.14990234375,
4364.580078125,
4363.35986328125,
4377.43994140625,
4369.6298828125,
4368.47021484375,
4371.330078125,
4363.35009765625,
4358.56982421875,
4355.97021484375,
4356.56005859375,
4352.72998046875,
4365.72021484375,
4365.97998046875,
4368.43017578125,
4378.64013671875,
4382.669921875,
4379.81005859375,
4375.259765625,
4381.2998046875,
4378.14990234375,
4385.85009765625,
4385.3701171875,
4378.2001953125,
4349.4501953125,
4339.5400390625,
4346.14013671875,
4351.2998046875,
4355.27001953125,
4377.10009765625,
4372.52001953125,
4363.31005859375,
4341.14013671875,
4339.06005859375,
4342.259765625,
4345.75,
4335.75,
4329.91015625,
4331.490234375,
4332.9599609375,
4336.5,
4329.22021484375,
4360.25,
4371.6298828125,
4380.6201171875,
4383.330078125,
4379.18994140625,
4374.66015625,
4374.64013671875,
4381.18017578125,
4378.080078125,
4379.33984375,
4377.91015625,
4381.41015625,
4382.02001953125,
4348.66015625,
4365.08984375,
4369.3798828125,
4373.64013671875,
4387.22021484375,
4393.009765625,
4393.56982421875,
4382.35986328125,
4376.25,
4366.52978515625,
4369.419921875,
4367.89013671875,
4373.2998046875,
4360.3798828125,
4364.2001953125,
4349.81982421875,
4348.25,
4345.2998046875,
4346.919921875,
4335.009765625,
4349.64990234375,
4342.68994140625,
4344.64013671875,
4337.72998046875,
4324.56005859375,
4320.08984375,
4326.0400390625,
4322.27978515625,
4308.10009765625,
4307.18994140625,
4319.1298828125,
4339.5400390625,
4325.66015625,
4335.3701171875,
4328.93994140625,
4311.66015625,
4302.22998046875,
4287.6298828125,
4285.60986328125,
4276.56005859375,
4265.56982421875,
4249.7099609375,
4243.14013671875,
4248.759765625,
4247.5400390625,
4255.7099609375,
4258.669921875,
4257.58984375,
4254.27978515625,
4244.31982421875,
4242.41015625,
4237.10009765625,
4218,
4227.64013671875,
4226.259765625,
4238.3701171875,
4241.6201171875,
4241.64990234375,
4254.89013671875,
4255.83984375,
4249.97998046875,
4244.6298828125,
4242.8701171875,
4242.35986328125,
4224.830078125,
4250.22998046875,
4255.240234375,
4259.3798828125,
4253.8798828125,
4243.97021484375,
4246.330078125,
4229.06982421875,
4232.93017578125,
4237.02001953125,
4241.06005859375,
4248.81982421875,
4252.81005859375,
4253.10009765625,
4232.419921875,
4213.14013671875,
4222.0400390625,
4225.3701171875,
4221.81005859375,
4207.08984375,
4208.5498046875,
4199.490234375,
4191.0400390625,
4193.919921875,
4191.68994140625,
4192.58984375,
4195.60009765625,
4183.60009765625,
4168.490234375,
4179.6298828125,
4176.7900390625,
4159.97998046875,
4156.7001953125,
4142.2001953125,
4142.3798828125,
4147.9599609375,
4153.5,
4166.52978515625,
4170.330078125,
4153.77001953125,
4155.83984375,
4151.68994140625,
4147,
4156.7001953125,
4151.33984375,
4146.4501953125,
4140.41015625,
4131.39990234375,
4121.83984375,
4120.14990234375,
4122.72021484375,
4115.9599609375,
4118.419921875,
4163.5,
4160.740234375,
4145.56005859375,
4151.27978515625,
4151.2900390625,
4152.77978515625,
4150.1201171875,
4162.240234375,
4167.75,
4167.66015625,
4173.22998046875,
4177.47021484375,
4174.4501953125,
4172.8701171875,
4172.8701171875,
4175.66015625,
4176.02978515625,
4175.16015625,
4175.2998046875,
4178.39013671875,
4181.740234375,
4189.89013671875,
4190.89990234375,
4192.6201171875,
4195.4599609375,
4195.5498046875,
4209.41015625,
4225.22021484375,
4229.330078125,
4226.5498046875,
4219.4501953125,
4217.759765625,
4214.0400390625,
4214.35009765625,
4212.580078125,
4219.16015625,
4226.93994140625,
4244.10986328125,
4245.64013671875,
4291.25,
4294.509765625,
4303.9599609375,
4304.35009765625,
4303.580078125,
4300.39013671875,
4306.02978515625,
4308.64990234375,
4314.68994140625,
4313.6298828125,
4315.240234375,
4316.169921875,
4319.72021484375,
4360.91015625,
4364.47021484375,
4352.18017578125,
4353.8701171875,
4362.27001953125,
4367.68017578125,
4368.8701171875,
4369.5400390625,
4369.02001953125,
4368.0498046875,
4372.25,
4373.6201171875,
4365.8798828125
],
"increasing": {
"fillcolor": "#3399ff",
"line": {
"color": "#3399ff"
}
},
"low": [
4233.830078125,
4220.47998046875,
4220.830078125,
4221.580078125,
4236.91015625,
4247.47021484375,
4249.35986328125,
4240.490234375,
4235.56005859375,
4231.85009765625,
4236.080078125,
4245.35986328125,
4256.97998046875,
4247.2900390625,
4241.39013671875,
4230.60986328125,
4225.91015625,
4229.7998046875,
4232.77001953125,
4237.14990234375,
4232.9501953125,
4238.830078125,
4253.2099609375,
4256.4599609375,
4256.22998046875,
4256.14013671875,
4223.9599609375,
4219.5498046875,
4242.56005859375,
4251.2099609375,
4270.81982421875,
4291.2998046875,
4290.35009765625,
4294.3701171875,
4304.16015625,
4307,
4316.18017578125,
4314.68994140625,
4307.52001953125,
4287.47021484375,
4290.66015625,
4283.7900390625,
4286.43994140625,
4296.14013671875,
4301.4599609375,
4299.43994140625,
4302.0498046875,
4312.47998046875,
4331.72021484375,
4330.8701171875,
4333.22021484375,
4329.14990234375,
4339.64013671875,
4350.06005859375,
4362.81982421875,
4365.240234375,
4376.39013671875,
4380.66015625,
4379.5498046875,
4360.4599609375,
4362.41015625,
4358.5400390625,
4356.7099609375,
4358.169921875,
4356.64990234375,
4366.58984375,
4360.2001953125,
4358.6298828125,
4356.580078125,
4355.740234375,
4350.27978515625,
4349.18017578125,
4347.31005859375,
4345.33984375,
4351.6201171875,
4359.08984375,
4362.72998046875,
4366.5498046875,
4364.52001953125,
4362.9501953125,
4365.35986328125,
4369.419921875,
4371.52001953125,
4375.83984375,
4376.75,
4346.9501953125,
4336.3701171875,
4325.43017578125,
4336.7099609375,
4342.35986328125,
4346.64013671875,
4360.490234375,
4354.919921875,
4339.22998046875,
4329.22998046875,
4323.81982421875,
4324.9501953125,
4329.419921875,
4314.419921875,
4311.97021484375,
4323.22021484375,
4320.919921875,
4322.27001953125,
4316.60009765625,
4342.3701171875,
4351.22021484375,
4371.4599609375,
4375.080078125,
4367.97998046875,
4369.8701171875,
4368.18994140625,
4356.83984375,
4367.72021484375,
4371.7001953125,
4369.35009765625,
4373.77001953125,
4371.64013671875,
4337.5400390625,
4338.97998046875,
4358.06982421875,
4362.52978515625,
4372.10009765625,
4384.56005859375,
4379.06982421875,
4375.259765625,
4359.14013671875,
4359.81005859375,
4355.60986328125,
4356.2900390625,
4361.580078125,
4348.14013671875,
4345.509765625,
4335.10986328125,
4335.3798828125,
4337.490234375,
4331.43994140625,
4326.9501953125,
4324,
4326.35986328125,
4331.60986328125,
4321.22998046875,
4315.4501953125,
4303.83984375,
4314.02978515625,
4304.93994140625,
4299.60986328125,
4297.919921875,
4305.77001953125,
4304.169921875,
4297.22998046875,
4318.75,
4302.7099609375,
4300.35986328125,
4278.7998046875,
4275.60986328125,
4269.68994140625,
4263.2900390625,
4244.33984375,
4234.52001953125,
4232.47998046875,
4230.990234375,
4235.06982421875,
4241.89013671875,
4243.14990234375,
4245.91015625,
4236.89990234375,
4234.580078125,
4229.66015625,
4223.02978515625,
4189.22021484375,
4213.9501953125,
4212.5,
4224.22998046875,
4232.08984375,
4231.10009765625,
4237.93017578125,
4238.39013671875,
4238.97021484375,
4232.419921875,
4233.10009765625,
4221.72998046875,
4214.330078125,
4235.7900390625,
4237.97998046875,
4250.7001953125,
4240.68017578125,
4237.740234375,
4225.83984375,
4219.43017578125,
4222.419921875,
4230.169921875,
4232.10986328125,
4241.240234375,
4244.14990234375,
4247.490234375,
4206.4599609375,
4201.240234375,
4203.4501953125,
4212.6298828125,
4206.75,
4200.06982421875,
4195.31005859375,
4189.56005859375,
4181.419921875,
4185.39013671875,
4182.83984375,
4183.85009765625,
4185.89013671875,
4163.64990234375,
4155.60986328125,
4154.919921875,
4153.18017578125,
4151.259765625,
4134.2001953125,
4132.3798828125,
4130.93994140625,
4127.89990234375,
4145,
4150.64013671875,
4153.2900390625,
4134.22998046875,
4137.77001953125,
4135.72021484375,
4130.39990234375,
4143.47021484375,
4139.83984375,
4132.14013671875,
4128.580078125,
4114.7900390625,
4112.669921875,
4107.5498046875,
4104.169921875,
4105.56982421875,
4103.77978515625,
4139.39013671875,
4137.22021484375,
4132.93994140625,
4135.06982421875,
4140.14990234375,
4144.10986328125,
4137.169921875,
4140.6201171875,
4157.14990234375,
4160.85986328125,
4163.509765625,
4167.5,
4165.85009765625,
4153.1201171875,
4153.2001953125,
4158.93017578125,
4166.8701171875,
4165.1201171875,
4163.43017578125,
4164.2099609375,
4174.509765625,
4180,
4181.72998046875,
4181.490234375,
4190.240234375,
4186.419921875,
4197.740234375,
4203.2099609375,
4221.60986328125,
4213.1298828125,
4213.18994140625,
4209.27001953125,
4204.1298828125,
4205,
4204.47021484375,
4204.22021484375,
4202.02001953125,
4224.2099609375,
4235.7998046875,
4268.259765625,
4278.39990234375,
4292.7099609375,
4293.39013671875,
4296.740234375,
4295.72998046875,
4297.31982421875,
4300.41015625,
4307.10986328125,
4308.5498046875,
4311.02001953125,
4311.75,
4313.41015625,
4334.22998046875,
4345.7099609375,
4343.58984375,
4346.2900390625,
4350.43017578125,
4359.740234375,
4364.9501953125,
4359.35009765625,
4360.3701171875,
4361.39013671875,
4365.75,
4364.35986328125,
4357.6201171875
],
"name": "OHLC Chart",
"open": [
4233.830078125,
4240.0498046875,
4220.85009765625,
4224.52001953125,
4242.52001953125,
4253.8798828125,
4254.27978515625,
4250.9599609375,
4240.68017578125,
4236.66015625,
4239.2001953125,
4246.52978515625,
4258.7001953125,
4259.31005859375,
4255.6298828125,
4248.43994140625,
4233.68017578125,
4233.919921875,
4234.10986328125,
4245.7099609375,
4239.83984375,
4242.72998046875,
4254.240234375,
4256.4599609375,
4264.5498046875,
4262.5,
4234.7900390625,
4232.4501953125,
4242.56005859375,
4251.2099609375,
4270.81982421875,
4301.8701171875,
4295.60986328125,
4295.7001953125,
4307.27001953125,
4310.31982421875,
4317.43994140625,
4319.97021484375,
4321.009765625,
4289.02001953125,
4302.14013671875,
4296.6298828125,
4287.1201171875,
4300.18994140625,
4303.81005859375,
4305.330078125,
4302.60986328125,
4312.47998046875,
4334.3798828125,
4337.6201171875,
4338.85986328125,
4336.06982421875,
4339.75,
4350.06005859375,
4364.2001953125,
4366.83984375,
4377.18017578125,
4383.08984375,
4384.06982421875,
4381.4501953125,
4367.14990234375,
4367.75,
4361.009765625,
4359.27001953125,
4360.83984375,
4366.58984375,
4368.81982421875,
4363.27001953125,
4368.31005859375,
4357.72021484375,
4358.2099609375,
4352.18017578125,
4354.830078125,
4350.27978515625,
4351.8701171875,
4359.2998046875,
4363.490234375,
4367.6298828125,
4380.93994140625,
4368.080078125,
4372.2998046875,
4374.5,
4374.8798828125,
4378.080078125,
4384.89990234375,
4378.2001953125,
4347.25,
4336.9501953125,
4338.60986328125,
4342.4501953125,
4346.64990234375,
4360.490234375,
4372.52001953125,
4357.330078125,
4340.77001953125,
4334,
4326.1298828125,
4341.60009765625,
4333.759765625,
4314.89990234375,
4326.60986328125,
4327.06982421875,
4328.60986328125,
4323.7099609375,
4342.3701171875,
4356.52001953125,
4371.4599609375,
4380.43994140625,
4378.009765625,
4372.330078125,
4373.33984375,
4372.240234375,
4368.97998046875,
4377.1201171875,
4372.18017578125,
4377.830078125,
4381.35986328125,
4345.22998046875,
4339.8701171875,
4359.68994140625,
4364.2099609375,
4372.10009765625,
4385.0498046875,
4393,
4380.60986328125,
4376.25,
4361.56005859375,
4364.3798828125,
4358.759765625,
4367.39990234375,
4357.35009765625,
4353.02001953125,
4349.14990234375,
4338.0400390625,
4341.31982421875,
4337.85009765625,
4332.93017578125,
4327.93994140625,
4342.68994140625,
4337.68017578125,
4333.330078125,
4324.56005859375,
4316.919921875,
4321.35986328125,
4320.1298828125,
4303.419921875,
4301.4501953125,
4307.02978515625,
4312.27001953125,
4313.02001953125,
4322.60009765625,
4323.66015625,
4307.18017578125,
4302.22998046875,
4281.72998046875,
4278.72998046875,
4273.85009765625,
4263.39990234375,
4245.18994140625,
4235.3701171875,
4234.81982421875,
4245.5400390625,
4241.89013671875,
4254.7900390625,
4253.169921875,
4253.81005859375,
4238.10986328125,
4238.02001953125,
4235.18994140625,
4210.39990234375,
4218.18994140625,
4220.56005859375,
4225.64990234375,
4235.8798828125,
4240.2900390625,
4239.919921875,
4255.43994140625,
4241.080078125,
4241.4501953125,
4235.83984375,
4238.89013671875,
4222.31005859375,
4235.7900390625,
4250.35009765625,
4255.39013671875,
4253.580078125,
4241.3798828125,
4243.93994140625,
4227.22021484375,
4224.10009765625,
4232.990234375,
4233.33984375,
4241.240234375,
4246.97021484375,
4252.0400390625,
4232.419921875,
4213.14013671875,
4204.7998046875,
4212.85009765625,
4220.8701171875,
4206.7998046875,
4203.64013671875,
4197.22998046875,
4191.0400390625,
4188.2998046875,
4188.81005859375,
4188.2998046875,
4190.8701171875,
4175.990234375,
4165.35009765625,
4165.330078125,
4174.66015625,
4154.89990234375,
4156.7001953125,
4140.85009765625,
4132.740234375,
4133.169921875,
4147.60986328125,
4153.1298828125,
4166.56982421875,
4153.27001953125,
4152.93017578125,
4145.3701171875,
4141.58984375,
4146.009765625,
4150.7900390625,
4145.56005859375,
4136.43994140625,
4129.14990234375,
4118.68017578125,
4115,
4109.10986328125,
4106.6298828125,
4115.52001953125,
4139.39013671875,
4159.9501953125,
4140.39990234375,
4140.66015625,
4140.14990234375,
4150.83984375,
4144.35986328125,
4142.47998046875,
4161.14013671875,
4167.3701171875,
4163.509765625,
4168.77001953125,
4172.9599609375,
4171.330078125,
4158.22021484375,
4167.93994140625,
4173.490234375,
4167.6201171875,
4175.27001953125,
4169.6298828125,
4177.81005859375,
4180,
4189.14990234375,
4181.56005859375,
4191.81982421875,
4193.009765625,
4201.27001953125,
4205.990234375,
4222.72021484375,
4223.31005859375,
4214.31005859375,
4217.759765625,
4211.009765625,
4208.06005859375,
4208.509765625,
4211.2998046875,
4214.9501953125,
4224.2099609375,
4239.22998046875,
4268.259765625,
4286.2998046875,
4293.0400390625,
4303.97021484375,
4298.1201171875,
4298.83984375,
4298.14013671875,
4302.009765625,
4307.10986328125,
4313.60986328125,
4312.4599609375,
4313.47998046875,
4313.669921875,
4334.22998046875,
4358.08984375,
4349.06982421875,
4352.0400390625,
4350.43017578125,
4360.4501953125,
4366.35009765625,
4368.02978515625,
4361.3798828125,
4367.14990234375,
4368.009765625,
4371.7099609375,
4365.39990234375
],
"type": "candlestick",
"x": [
"2023-10-04T09:30:00-04:00",
"2023-10-04T10:00:00-04:00",
"2023-10-04T10:30:00-04:00",
"2023-10-04T11:00:00-04:00",
"2023-10-04T11:30:00-04:00",
"2023-10-04T12:00:00-04:00",
"2023-10-04T12:30:00-04:00",
"2023-10-04T13:00:00-04:00",
"2023-10-04T13:30:00-04:00",
"2023-10-04T14:00:00-04:00",
"2023-10-04T14:30:00-04:00",
"2023-10-04T15:00:00-04:00",
"2023-10-04T15:30:00-04:00",
"2023-10-05T09:30:00-04:00",
"2023-10-05T10:00:00-04:00",
"2023-10-05T10:30:00-04:00",
"2023-10-05T11:00:00-04:00",
"2023-10-05T11:30:00-04:00",
"2023-10-05T12:00:00-04:00",
"2023-10-05T12:30:00-04:00",
"2023-10-05T13:00:00-04:00",
"2023-10-05T13:30:00-04:00",
"2023-10-05T14:00:00-04:00",
"2023-10-05T14:30:00-04:00",
"2023-10-05T15:00:00-04:00",
"2023-10-05T15:30:00-04:00",
"2023-10-06T09:30:00-04:00",
"2023-10-06T10:00:00-04:00",
"2023-10-06T10:30:00-04:00",
"2023-10-06T11:00:00-04:00",
"2023-10-06T11:30:00-04:00",
"2023-10-06T12:00:00-04:00",
"2023-10-06T12:30:00-04:00",
"2023-10-06T13:00:00-04:00",
"2023-10-06T13:30:00-04:00",
"2023-10-06T14:00:00-04:00",
"2023-10-06T14:30:00-04:00",
"2023-10-06T15:00:00-04:00",
"2023-10-06T15:30:00-04:00",
"2023-10-09T09:30:00-04:00",
"2023-10-09T10:00:00-04:00",
"2023-10-09T10:30:00-04:00",
"2023-10-09T11:00:00-04:00",
"2023-10-09T11:30:00-04:00",
"2023-10-09T12:00:00-04:00",
"2023-10-09T12:30:00-04:00",
"2023-10-09T13:00:00-04:00",
"2023-10-09T13:30:00-04:00",
"2023-10-09T14:00:00-04:00",
"2023-10-09T14:30:00-04:00",
"2023-10-09T15:00:00-04:00",
"2023-10-09T15:30:00-04:00",
"2023-10-10T09:30:00-04:00",
"2023-10-10T10:00:00-04:00",
"2023-10-10T10:30:00-04:00",
"2023-10-10T11:00:00-04:00",
"2023-10-10T11:30:00-04:00",
"2023-10-10T12:00:00-04:00",
"2023-10-10T12:30:00-04:00",
"2023-10-10T13:00:00-04:00",
"2023-10-10T13:30:00-04:00",
"2023-10-10T14:00:00-04:00",
"2023-10-10T14:30:00-04:00",
"2023-10-10T15:00:00-04:00",
"2023-10-10T15:30:00-04:00",
"2023-10-11T09:30:00-04:00",
"2023-10-11T10:00:00-04:00",
"2023-10-11T10:30:00-04:00",
"2023-10-11T11:00:00-04:00",
"2023-10-11T11:30:00-04:00",
"2023-10-11T12:00:00-04:00",
"2023-10-11T12:30:00-04:00",
"2023-10-11T13:00:00-04:00",
"2023-10-11T13:30:00-04:00",
"2023-10-11T14:00:00-04:00",
"2023-10-11T14:30:00-04:00",
"2023-10-11T15:00:00-04:00",
"2023-10-11T15:30:00-04:00",
"2023-10-12T09:30:00-04:00",
"2023-10-12T10:00:00-04:00",
"2023-10-12T10:30:00-04:00",
"2023-10-12T11:00:00-04:00",
"2023-10-12T11:30:00-04:00",
"2023-10-12T12:00:00-04:00",
"2023-10-12T12:30:00-04:00",
"2023-10-12T13:00:00-04:00",
"2023-10-12T13:30:00-04:00",
"2023-10-12T14:00:00-04:00",
"2023-10-12T14:30:00-04:00",
"2023-10-12T15:00:00-04:00",
"2023-10-12T15:30:00-04:00",
"2023-10-13T09:30:00-04:00",
"2023-10-13T10:00:00-04:00",
"2023-10-13T10:30:00-04:00",
"2023-10-13T11:00:00-04:00",
"2023-10-13T11:30:00-04:00",
"2023-10-13T12:00:00-04:00",
"2023-10-13T12:30:00-04:00",
"2023-10-13T13:00:00-04:00",
"2023-10-13T13:30:00-04:00",
"2023-10-13T14:00:00-04:00",
"2023-10-13T14:30:00-04:00",
"2023-10-13T15:00:00-04:00",
"2023-10-13T15:30:00-04:00",
"2023-10-16T09:30:00-04:00",
"2023-10-16T10:00:00-04:00",
"2023-10-16T10:30:00-04:00",
"2023-10-16T11:00:00-04:00",
"2023-10-16T11:30:00-04:00",
"2023-10-16T12:00:00-04:00",
"2023-10-16T12:30:00-04:00",
"2023-10-16T13:00:00-04:00",
"2023-10-16T13:30:00-04:00",
"2023-10-16T14:00:00-04:00",
"2023-10-16T14:30:00-04:00",
"2023-10-16T15:00:00-04:00",
"2023-10-16T15:30:00-04:00",
"2023-10-17T09:30:00-04:00",
"2023-10-17T10:00:00-04:00",
"2023-10-17T10:30:00-04:00",
"2023-10-17T11:00:00-04:00",
"2023-10-17T11:30:00-04:00",
"2023-10-17T12:00:00-04:00",
"2023-10-17T12:30:00-04:00",
"2023-10-17T13:00:00-04:00",
"2023-10-17T13:30:00-04:00",
"2023-10-17T14:00:00-04:00",
"2023-10-17T14:30:00-04:00",
"2023-10-17T15:00:00-04:00",
"2023-10-17T15:30:00-04:00",
"2023-10-18T09:30:00-04:00",
"2023-10-18T10:00:00-04:00",
"2023-10-18T10:30:00-04:00",
"2023-10-18T11:00:00-04:00",
"2023-10-18T11:30:00-04:00",
"2023-10-18T12:00:00-04:00",
"2023-10-18T12:30:00-04:00",
"2023-10-18T13:00:00-04:00",
"2023-10-18T13:30:00-04:00",
"2023-10-18T14:00:00-04:00",
"2023-10-18T14:30:00-04:00",
"2023-10-18T15:00:00-04:00",
"2023-10-18T15:30:00-04:00",
"2023-10-19T09:30:00-04:00",
"2023-10-19T10:00:00-04:00",
"2023-10-19T10:30:00-04:00",
"2023-10-19T11:00:00-04:00",
"2023-10-19T11:30:00-04:00",
"2023-10-19T12:00:00-04:00",
"2023-10-19T12:30:00-04:00",
"2023-10-19T13:00:00-04:00",
"2023-10-19T13:30:00-04:00",
"2023-10-19T14:00:00-04:00",
"2023-10-19T14:30:00-04:00",
"2023-10-19T15:00:00-04:00",
"2023-10-19T15:30:00-04:00",
"2023-10-20T09:30:00-04:00",
"2023-10-20T10:00:00-04:00",
"2023-10-20T10:30:00-04:00",
"2023-10-20T11:00:00-04:00",
"2023-10-20T11:30:00-04:00",
"2023-10-20T12:00:00-04:00",
"2023-10-20T12:30:00-04:00",
"2023-10-20T13:00:00-04:00",
"2023-10-20T13:30:00-04:00",
"2023-10-20T14:00:00-04:00",
"2023-10-20T14:30:00-04:00",
"2023-10-20T15:00:00-04:00",
"2023-10-20T15:30:00-04:00",
"2023-10-23T09:30:00-04:00",
"2023-10-23T10:00:00-04:00",
"2023-10-23T10:30:00-04:00",
"2023-10-23T11:00:00-04:00",
"2023-10-23T11:30:00-04:00",
"2023-10-23T12:00:00-04:00",
"2023-10-23T12:30:00-04:00",
"2023-10-23T13:00:00-04:00",
"2023-10-23T13:30:00-04:00",
"2023-10-23T14:00:00-04:00",
"2023-10-23T14:30:00-04:00",
"2023-10-23T15:00:00-04:00",
"2023-10-23T15:30:00-04:00",
"2023-10-24T09:30:00-04:00",
"2023-10-24T10:00:00-04:00",
"2023-10-24T10:30:00-04:00",
"2023-10-24T11:00:00-04:00",
"2023-10-24T11:30:00-04:00",
"2023-10-24T12:00:00-04:00",
"2023-10-24T12:30:00-04:00",
"2023-10-24T13:00:00-04:00",
"2023-10-24T13:30:00-04:00",
"2023-10-24T14:00:00-04:00",
"2023-10-24T14:30:00-04:00",
"2023-10-24T15:00:00-04:00",
"2023-10-24T15:30:00-04:00",
"2023-10-25T09:30:00-04:00",
"2023-10-25T10:00:00-04:00",
"2023-10-25T10:30:00-04:00",
"2023-10-25T11:00:00-04:00",
"2023-10-25T11:30:00-04:00",
"2023-10-25T12:00:00-04:00",
"2023-10-25T12:30:00-04:00",
"2023-10-25T13:00:00-04:00",
"2023-10-25T13:30:00-04:00",
"2023-10-25T14:00:00-04:00",
"2023-10-25T14:30:00-04:00",
"2023-10-25T15:00:00-04:00",
"2023-10-25T15:30:00-04:00",
"2023-10-26T09:30:00-04:00",
"2023-10-26T10:00:00-04:00",
"2023-10-26T10:30:00-04:00",
"2023-10-26T11:00:00-04:00",
"2023-10-26T11:30:00-04:00",
"2023-10-26T12:00:00-04:00",
"2023-10-26T12:30:00-04:00",
"2023-10-26T13:00:00-04:00",
"2023-10-26T13:30:00-04:00",
"2023-10-26T14:00:00-04:00",
"2023-10-26T14:30:00-04:00",
"2023-10-26T15:00:00-04:00",
"2023-10-26T15:30:00-04:00",
"2023-10-27T09:30:00-04:00",
"2023-10-27T10:00:00-04:00",
"2023-10-27T10:30:00-04:00",
"2023-10-27T11:00:00-04:00",
"2023-10-27T11:30:00-04:00",
"2023-10-27T12:00:00-04:00",
"2023-10-27T12:30:00-04:00",
"2023-10-27T13:00:00-04:00",
"2023-10-27T13:30:00-04:00",
"2023-10-27T14:00:00-04:00",
"2023-10-27T14:30:00-04:00",
"2023-10-27T15:00:00-04:00",
"2023-10-27T15:30:00-04:00",
"2023-10-30T09:30:00-04:00",
"2023-10-30T10:00:00-04:00",
"2023-10-30T10:30:00-04:00",
"2023-10-30T11:00:00-04:00",
"2023-10-30T11:30:00-04:00",
"2023-10-30T12:00:00-04:00",
"2023-10-30T12:30:00-04:00",
"2023-10-30T13:00:00-04:00",
"2023-10-30T13:30:00-04:00",
"2023-10-30T14:00:00-04:00",
"2023-10-30T14:30:00-04:00",
"2023-10-30T15:00:00-04:00",
"2023-10-30T15:30:00-04:00",
"2023-10-31T09:30:00-04:00",
"2023-10-31T10:00:00-04:00",
"2023-10-31T10:30:00-04:00",
"2023-10-31T11:00:00-04:00",
"2023-10-31T11:30:00-04:00",
"2023-10-31T12:00:00-04:00",
"2023-10-31T12:30:00-04:00",
"2023-10-31T13:00:00-04:00",
"2023-10-31T13:30:00-04:00",
"2023-10-31T14:00:00-04:00",
"2023-10-31T14:30:00-04:00",
"2023-10-31T15:00:00-04:00",
"2023-10-31T15:30:00-04:00",
"2023-11-01T09:30:00-04:00",
"2023-11-01T10:00:00-04:00",
"2023-11-01T10:30:00-04:00",
"2023-11-01T11:00:00-04:00",
"2023-11-01T11:30:00-04:00",
"2023-11-01T12:00:00-04:00",
"2023-11-01T12:30:00-04:00",
"2023-11-01T13:00:00-04:00",
"2023-11-01T13:30:00-04:00",
"2023-11-01T14:00:00-04:00",
"2023-11-01T14:30:00-04:00",
"2023-11-01T15:00:00-04:00",
"2023-11-01T15:30:00-04:00",
"2023-11-02T09:30:00-04:00",
"2023-11-02T10:00:00-04:00",
"2023-11-02T10:30:00-04:00",
"2023-11-02T11:00:00-04:00",
"2023-11-02T11:30:00-04:00",
"2023-11-02T12:00:00-04:00",
"2023-11-02T12:30:00-04:00",
"2023-11-02T13:00:00-04:00",
"2023-11-02T13:30:00-04:00",
"2023-11-02T14:00:00-04:00",
"2023-11-02T14:30:00-04:00",
"2023-11-02T15:00:00-04:00",
"2023-11-02T15:30:00-04:00",
"2023-11-03T09:30:00-04:00",
"2023-11-03T10:00:00-04:00",
"2023-11-03T10:30:00-04:00",
"2023-11-03T11:00:00-04:00",
"2023-11-03T11:30:00-04:00",
"2023-11-03T12:00:00-04:00",
"2023-11-03T12:30:00-04:00",
"2023-11-03T13:00:00-04:00",
"2023-11-03T13:30:00-04:00",
"2023-11-03T14:00:00-04:00",
"2023-11-03T14:30:00-04:00",
"2023-11-03T15:00:00-04:00",
"2023-11-03T15:30:00-04:00"
]
}
],
"layout": {
"template": {
"data": {
"bar": [
{
"error_x": {
"color": "#f2f5fa"
},
"error_y": {
"color": "#f2f5fa"
},
"marker": {
"line": {
"color": "rgb(17,17,17)",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "bar"
}
],
"barpolar": [
{
"marker": {
"line": {
"color": "rgb(17,17,17)",
"width": 0.5
},
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "barpolar"
}
],
"carpet": [
{
"aaxis": {
"endlinecolor": "#A2B1C6",
"gridcolor": "#506784",
"linecolor": "#506784",
"minorgridcolor": "#506784",
"startlinecolor": "#A2B1C6"
},
"baxis": {
"endlinecolor": "#A2B1C6",
"gridcolor": "#506784",
"linecolor": "#506784",
"minorgridcolor": "#506784",
"startlinecolor": "#A2B1C6"
},
"type": "carpet"
}
],
"choropleth": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "choropleth"
}
],
"contour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "contour"
}
],
"contourcarpet": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "contourcarpet"
}
],
"heatmap": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmap"
}
],
"heatmapgl": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "heatmapgl"
}
],
"histogram": [
{
"marker": {
"pattern": {
"fillmode": "overlay",
"size": 10,
"solidity": 0.2
}
},
"type": "histogram"
}
],
"histogram2d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2d"
}
],
"histogram2dcontour": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "histogram2dcontour"
}
],
"mesh3d": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"type": "mesh3d"
}
],
"parcoords": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "parcoords"
}
],
"pie": [
{
"automargin": true,
"type": "pie"
}
],
"scatter": [
{
"marker": {
"line": {
"color": "#283442"
}
},
"type": "scatter"
}
],
"scatter3d": [
{
"line": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatter3d"
}
],
"scattercarpet": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattercarpet"
}
],
"scattergeo": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattergeo"
}
],
"scattergl": [
{
"marker": {
"line": {
"color": "#283442"
}
},
"type": "scattergl"
}
],
"scattermapbox": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermapbox"
}
],
"scatterpolar": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolar"
}
],
"scatterpolargl": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterpolargl"
}
],
"scatterternary": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scatterternary"
}
],
"surface": [
{
"colorbar": {
"outlinewidth": 0,
"ticks": ""
},
"colorscale": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"type": "surface"
}
],
"table": [
{
"cells": {
"fill": {
"color": "#506784"
},
"line": {
"color": "rgb(17,17,17)"
}
},
"header": {
"fill": {
"color": "#2a3f5f"
},
"line": {
"color": "rgb(17,17,17)"
}
},
"type": "table"
}
]
},
"layout": {
"annotationdefaults": {
"arrowcolor": "#f2f5fa",
"arrowhead": 0,
"arrowwidth": 1
},
"autotypenumbers": "strict",
"coloraxis": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"colorscale": {
"diverging": [
[
0,
"#8e0152"
],
[
0.1,
"#c51b7d"
],
[
0.2,
"#de77ae"
],
[
0.3,
"#f1b6da"
],
[
0.4,
"#fde0ef"
],
[
0.5,
"#f7f7f7"
],
[
0.6,
"#e6f5d0"
],
[
0.7,
"#b8e186"
],
[
0.8,
"#7fbc41"
],
[
0.9,
"#4d9221"
],
[
1,
"#276419"
]
],
"sequential": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
],
"sequentialminus": [
[
0,
"#0d0887"
],
[
0.1111111111111111,
"#46039f"
],
[
0.2222222222222222,
"#7201a8"
],
[
0.3333333333333333,
"#9c179e"
],
[
0.4444444444444444,
"#bd3786"
],
[
0.5555555555555556,
"#d8576b"
],
[
0.6666666666666666,
"#ed7953"
],
[
0.7777777777777778,
"#fb9f3a"
],
[
0.8888888888888888,
"#fdca26"
],
[
1,
"#f0f921"
]
]
},
"colorway": [
"#636efa",
"#EF553B",
"#00cc96",
"#ab63fa",
"#FFA15A",
"#19d3f3",
"#FF6692",
"#B6E880",
"#FF97FF",
"#FECB52"
],
"font": {
"color": "#f2f5fa"
},
"geo": {
"bgcolor": "rgb(17,17,17)",
"lakecolor": "rgb(17,17,17)",
"landcolor": "rgb(17,17,17)",
"showlakes": true,
"showland": true,
"subunitcolor": "#506784"
},
"hoverlabel": {
"align": "left"
},
"hovermode": "closest",
"mapbox": {
"style": "dark"
},
"paper_bgcolor": "rgb(17,17,17)",
"plot_bgcolor": "rgb(17,17,17)",
"polar": {
"angularaxis": {
"gridcolor": "#506784",
"linecolor": "#506784",
"ticks": ""
},
"bgcolor": "rgb(17,17,17)",
"radialaxis": {
"gridcolor": "#506784",
"linecolor": "#506784",
"ticks": ""
}
},
"scene": {
"xaxis": {
"backgroundcolor": "rgb(17,17,17)",
"gridcolor": "#506784",
"gridwidth": 2,
"linecolor": "#506784",
"showbackground": true,
"ticks": "",
"zerolinecolor": "#C8D4E3"
},
"yaxis": {
"backgroundcolor": "rgb(17,17,17)",
"gridcolor": "#506784",
"gridwidth": 2,
"linecolor": "#506784",
"showbackground": true,
"ticks": "",
"zerolinecolor": "#C8D4E3"
},
"zaxis": {
"backgroundcolor": "rgb(17,17,17)",
"gridcolor": "#506784",
"gridwidth": 2,
"linecolor": "#506784",
"showbackground": true,
"ticks": "",
"zerolinecolor": "#C8D4E3"
}
},
"shapedefaults": {
"line": {
"color": "#f2f5fa"
}
},
"sliderdefaults": {
"bgcolor": "#C8D4E3",
"bordercolor": "rgb(17,17,17)",
"borderwidth": 1,
"tickwidth": 0
},
"ternary": {
"aaxis": {
"gridcolor": "#506784",
"linecolor": "#506784",
"ticks": ""
},
"baxis": {
"gridcolor": "#506784",
"linecolor": "#506784",
"ticks": ""
},
"bgcolor": "rgb(17,17,17)",
"caxis": {
"gridcolor": "#506784",
"linecolor": "#506784",
"ticks": ""
}
},
"title": {
"x": 0.05
},
"updatemenudefaults": {
"bgcolor": "#506784",
"borderwidth": 0
},
"xaxis": {
"automargin": true,
"gridcolor": "#283442",
"linecolor": "#506784",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "#283442",
"zerolinewidth": 2
},
"yaxis": {
"automargin": true,
"gridcolor": "#283442",
"linecolor": "#506784",
"ticks": "",
"title": {
"standoff": 15
},
"zerolinecolor": "#283442",
"zerolinewidth": 2
}
}
},
"title": {
"text": "OHLC Chart with Predictions (Right/Wrong)"
},
"xaxis": {
"range": [
"2023-11-01T14:00:00-04:00",
"2023-11-03T15:30:00-04:00"
],
"rangebreaks": [
{
"bounds": [
"sat",
"mon"
]
},
{
"bounds": [
16,
9.5
],
"pattern": "hour"
}
],
"rangeslider": {
"visible": true
},
"title": {
"text": "Date"
}
},
"yaxis": {
"range": [
4172.02001953125,
4373.6201171875
],
"title": {
"text": "Price"
}
}
}
}
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"import plotly.graph_objs as go\n",
"import yfinance as yf\n",
"\n",
"spx = yf.Ticker('^GSPC')\n",
"df = spx.history(interval='30m')\n",
"\n",
"# plot_data = perf_daily.merge(data[['Open','High','Low','Close']], left_index=True, right_index=True)\n",
"\n",
"# df = plot_data.copy()\n",
"\n",
"y_min = df['Low'].tail(30).min() - 30\n",
"y_max = df['High'].tail(30).max()\n",
"\n",
"increasing_color = '#3399ff' # Blue\n",
"decreasing_color = '#ff5f5f' # Red \n",
"\n",
"# Create a candlestick trace\n",
"candlestick_trace = go.Candlestick(\n",
" x=df.index,\n",
" open=df['Open'],\n",
" high=df['High'],\n",
" low=df['Low'],\n",
" close=df['Close'],\n",
" increasing_fillcolor=increasing_color, # Color for increasing candles\n",
" increasing_line_color=increasing_color, # Color for increasing candles\n",
" decreasing_fillcolor=decreasing_color, # Color for decreasing candles\n",
" decreasing_line_color=decreasing_color, # Color for decreasing candles\n",
" name='OHLC Chart'\n",
")\n",
"\n",
"# Create a layout with initial x-axis range for the last 30 candles\n",
"layout = go.Layout(\n",
" title='OHLC Chart with Predictions (Right/Wrong)',\n",
" xaxis=dict(title='Date', range=[df.index[-30], df.index[-1]]), # Set initial range to last 30 data points\n",
" yaxis=dict(title='Price', range=[y_min, y_max]),\n",
" xaxis_rangeslider_visible=True,\n",
" template='plotly_dark'\n",
")\n",
"\n",
"# Create a figure\n",
"fig = go.Figure(data=[candlestick_trace], layout=layout)\n",
"\n",
"fig.update_xaxes(\n",
" rangebreaks=[\n",
" # NOTE: Below values are bound (not single values), ie. hide x to y\n",
" dict(bounds=[\"sat\", \"mon\"]), # hide weekends, eg. hide sat to before mon\n",
" dict(bounds=[16, 9.5], pattern=\"hour\"), # hide hours outside of 9.30am-4pm\n",
" # dict(values=[\"2019-12-25\", \"2020-12-24\"]) # hide holidays (Christmas and New Year's, etc)\n",
" ]\n",
" )\n",
"\n",
"\n",
"# Show the figure (you can also save it as an HTML file)\n",
"fig.show()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"XXX"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "'Unrecognized kwarg=\"figcolor\"'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32md:\\Projects\\gamedayspx\\troubleshoot_day_model.ipynb Cell 32\u001b[0m line \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 9\u001b[0m decreasing_color \u001b[39m=\u001b[39m \u001b[39m'\u001b[39m\u001b[39m#ff5f5f\u001b[39m\u001b[39m'\u001b[39m \u001b[39m# Red for decreasing candles\u001b[39;00m\n\u001b[0;32m 11\u001b[0m \u001b[39m# Create a custom marketcolors configuration\u001b[39;00m\n\u001b[1;32m---> 12\u001b[0m mc \u001b[39m=\u001b[39m mpf\u001b[39m.\u001b[39;49mmake_marketcolors(\n\u001b[0;32m 13\u001b[0m up\u001b[39m=\u001b[39;49mincreasing_color,\n\u001b[0;32m 14\u001b[0m down\u001b[39m=\u001b[39;49mdecreasing_color,\n\u001b[0;32m 15\u001b[0m figcolor\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39m#000000\u001b[39;49m\u001b[39m'\u001b[39;49m,\n\u001b[0;32m 16\u001b[0m inherit\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m\n\u001b[0;32m 17\u001b[0m )\n\u001b[0;32m 19\u001b[0m \u001b[39m# Create a custom style configuration\u001b[39;00m\n\u001b[0;32m 20\u001b[0m s \u001b[39m=\u001b[39m mpf\u001b[39m.\u001b[39mmake_mpf_style(marketcolors\u001b[39m=\u001b[39mmc)\n",
"File \u001b[1;32mc:\\Users\\WINSTON-ITX\\anaconda3\\envs\\py39\\lib\\site-packages\\mplfinance\\_styles.py:299\u001b[0m, in \u001b[0;36mmake_marketcolors\u001b[1;34m(**kwargs)\u001b[0m\n\u001b[0;32m 282\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mmake_marketcolors\u001b[39m(\u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs):\n\u001b[0;32m 283\u001b[0m \u001b[39m \u001b[39m\u001b[39m'''\u001b[39;00m\n\u001b[0;32m 284\u001b[0m \u001b[39m Create a 'marketcolors' dict that is structured as expected\u001b[39;00m\n\u001b[0;32m 285\u001b[0m \u001b[39m by mplfinance._styles code:\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 296\u001b[0m \u001b[39m if volume == \"inherit\" then use up/down colors.\u001b[39;00m\n\u001b[0;32m 297\u001b[0m \u001b[39m '''\u001b[39;00m\n\u001b[1;32m--> 299\u001b[0m config \u001b[39m=\u001b[39m _process_kwargs(kwargs, _valid_make_marketcolors_kwargs())\n\u001b[0;32m 301\u001b[0m \u001b[39mif\u001b[39;00m config[\u001b[39m'\u001b[39m\u001b[39mbase_mpf_style\u001b[39m\u001b[39m'\u001b[39m] \u001b[39mis\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mNone\u001b[39;00m:\n\u001b[0;32m 302\u001b[0m style \u001b[39m=\u001b[39m _get_mpfstyle(config[\u001b[39m'\u001b[39m\u001b[39mbase_mpf_style\u001b[39m\u001b[39m'\u001b[39m])\n",
"File \u001b[1;32mc:\\Users\\WINSTON-ITX\\anaconda3\\envs\\py39\\lib\\site-packages\\mplfinance\\_arg_validators.py:339\u001b[0m, in \u001b[0;36m_process_kwargs\u001b[1;34m(kwargs, vkwargs)\u001b[0m\n\u001b[0;32m 337\u001b[0m \u001b[39mfor\u001b[39;00m key \u001b[39min\u001b[39;00m kwargs\u001b[39m.\u001b[39mkeys():\n\u001b[0;32m 338\u001b[0m \u001b[39mif\u001b[39;00m key \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m vkwargs:\n\u001b[1;32m--> 339\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(\u001b[39m'\u001b[39m\u001b[39mUnrecognized kwarg=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m'\u001b[39m\u001b[39m+\u001b[39m\u001b[39mstr\u001b[39m(key)\u001b[39m+\u001b[39m\u001b[39m'\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 340\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 341\u001b[0m value \u001b[39m=\u001b[39m kwargs[key]\n",
"\u001b[1;31mKeyError\u001b[0m: 'Unrecognized kwarg=\"figcolor\"'"
]
}
],
"source": [
"import yfinance as yf\n",
"import mplfinance as mpf\n",
"\n",
"spx = yf.Ticker('^GSPC')\n",
"df = spx.history(interval='30m')\n",
"\n",
"# Define colors\n",
"increasing_color = '#3399ff' # Blue for increasing candles\n",
"decreasing_color = '#ff5f5f' # Red for decreasing candles\n",
"\n",
"# Create a custom marketcolors configuration\n",
"mc = mpf.make_marketcolors(\n",
" up=increasing_color,\n",
" down=decreasing_color,\n",
" figcolor='#000000',\n",
" inherit=True\n",
")\n",
"\n",
"# Create a custom style configuration\n",
"s = mpf.make_mpf_style(marketcolors=mc)\n",
"\n",
"# Define the time frame for the last 30 candles\n",
"df1 = df.tail(30)"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [],
"source": [
"\n",
"up_lines = pd.DataFrame(index=df1.index)\n",
"down_lines = pd.DataFrame(index=df1.index)\n",
"up_lines['H2'] = float(df_levels.loc['H2','Level'])\n",
"up_lines['H1'] = float(df_levels.loc['H1','Level'])\n",
"down_lines['L1'] = float(df_levels.loc['L1','Level'])\n",
"down_lines['L2'] = float(df_levels.loc['L2','Level'])\n"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"ename": "KeyError",
"evalue": "'Unrecognized kwarg=\"figcolor\"'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mKeyError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32md:\\Projects\\gamedayspx\\troubleshoot_day_model.ipynb Cell 34\u001b[0m line \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[39m# Create an OHLC chart with mplfinance\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m mpf\u001b[39m.\u001b[39;49mplot(\n\u001b[0;32m 3\u001b[0m df1,\n\u001b[0;32m 4\u001b[0m \u001b[39mtype\u001b[39;49m\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39mcandle\u001b[39;49m\u001b[39m'\u001b[39;49m, \u001b[39m# Candlestick chart type\u001b[39;49;00m\n\u001b[0;32m 5\u001b[0m \u001b[39m# style='nightclouds', # Use the custom style\u001b[39;49;00m\n\u001b[0;32m 6\u001b[0m figcolor\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39m#000000\u001b[39;49m\u001b[39m'\u001b[39;49m,\n\u001b[0;32m 7\u001b[0m title\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39mOHLC 30 Minute\u001b[39;49m\u001b[39m'\u001b[39;49m,\n\u001b[0;32m 8\u001b[0m ylabel\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39mPrice\u001b[39;49m\u001b[39m'\u001b[39;49m,\n\u001b[0;32m 9\u001b[0m volume\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m, \u001b[39m# Disable volume bars\u001b[39;49;00m\n\u001b[0;32m 10\u001b[0m xrotation\u001b[39m=\u001b[39;49m\u001b[39m0\u001b[39;49m, \u001b[39m# Rotate x-axis labels if needed\u001b[39;49;00m\n\u001b[0;32m 11\u001b[0m figratio\u001b[39m=\u001b[39;49m(\u001b[39m8\u001b[39;49m, \u001b[39m4\u001b[39;49m), \u001b[39m# Adjust the figure size as needed\u001b[39;49;00m\n\u001b[0;32m 12\u001b[0m addplot\u001b[39m=\u001b[39;49m[\n\u001b[0;32m 13\u001b[0m mpf\u001b[39m.\u001b[39;49mmake_addplot(down_lines, color\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39m#3399ff\u001b[39;49m\u001b[39m'\u001b[39;49m, linestyle\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39msolid\u001b[39;49m\u001b[39m'\u001b[39;49m, width\u001b[39m=\u001b[39;49m\u001b[39m1\u001b[39;49m, secondary_y\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m),\n\u001b[0;32m 14\u001b[0m mpf\u001b[39m.\u001b[39;49mmake_addplot(up_lines, color\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39m#ff5f5f\u001b[39;49m\u001b[39m'\u001b[39;49m, linestyle\u001b[39m=\u001b[39;49m\u001b[39m'\u001b[39;49m\u001b[39msolid\u001b[39;49m\u001b[39m'\u001b[39;49m, width\u001b[39m=\u001b[39;49m\u001b[39m1\u001b[39;49m, secondary_y\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m),\n\u001b[0;32m 15\u001b[0m ]\n\u001b[0;32m 16\u001b[0m )\n",
"File \u001b[1;32mc:\\Users\\WINSTON-ITX\\anaconda3\\envs\\py39\\lib\\site-packages\\mplfinance\\plotting.py:412\u001b[0m, in \u001b[0;36mplot\u001b[1;34m(data, **kwargs)\u001b[0m\n\u001b[0;32m 402\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mplot\u001b[39m( data, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs ):\n\u001b[0;32m 403\u001b[0m \u001b[39m \u001b[39m\u001b[39m\"\"\"\u001b[39;00m\n\u001b[0;32m 404\u001b[0m \u001b[39m Given a Pandas DataFrame containing columns Open,High,Low,Close and optionally Volume\u001b[39;00m\n\u001b[0;32m 405\u001b[0m \u001b[39m with a DatetimeIndex, plot the data.\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 409\u001b[0m \u001b[39m Also provide ability to plot trading signals, and/or addtional user-defined data.\u001b[39;00m\n\u001b[0;32m 410\u001b[0m \u001b[39m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 412\u001b[0m config \u001b[39m=\u001b[39m _process_kwargs(kwargs, _valid_plot_kwargs())\n\u001b[0;32m 414\u001b[0m \u001b[39m# translate alias types:\u001b[39;00m\n\u001b[0;32m 415\u001b[0m config[\u001b[39m'\u001b[39m\u001b[39mtype\u001b[39m\u001b[39m'\u001b[39m] \u001b[39m=\u001b[39m _get_valid_plot_types(config[\u001b[39m'\u001b[39m\u001b[39mtype\u001b[39m\u001b[39m'\u001b[39m])\n",
"File \u001b[1;32mc:\\Users\\WINSTON-ITX\\anaconda3\\envs\\py39\\lib\\site-packages\\mplfinance\\_arg_validators.py:339\u001b[0m, in \u001b[0;36m_process_kwargs\u001b[1;34m(kwargs, vkwargs)\u001b[0m\n\u001b[0;32m 337\u001b[0m \u001b[39mfor\u001b[39;00m key \u001b[39min\u001b[39;00m kwargs\u001b[39m.\u001b[39mkeys():\n\u001b[0;32m 338\u001b[0m \u001b[39mif\u001b[39;00m key \u001b[39mnot\u001b[39;00m \u001b[39min\u001b[39;00m vkwargs:\n\u001b[1;32m--> 339\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mKeyError\u001b[39;00m(\u001b[39m'\u001b[39m\u001b[39mUnrecognized kwarg=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m'\u001b[39m\u001b[39m+\u001b[39m\u001b[39mstr\u001b[39m(key)\u001b[39m+\u001b[39m\u001b[39m'\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m 340\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[0;32m 341\u001b[0m value \u001b[39m=\u001b[39m kwargs[key]\n",
"\u001b[1;31mKeyError\u001b[0m: 'Unrecognized kwarg=\"figcolor\"'"
]
}
],
"source": [
"\n",
"# Create an OHLC chart with mplfinance\n",
"mpf.plot(\n",
" df1,\n",
" type='candle', # Candlestick chart type\n",
" # style='nightclouds', # Use the custom style\n",
" figcolor='#000000',\n",
" title='OHLC 30 Minute',\n",
" ylabel='Price',\n",
" volume=False, # Disable volume bars\n",
" xrotation=0, # Rotate x-axis labels if needed\n",
" figratio=(8, 4), # Adjust the figure size as needed\n",
" addplot=[\n",
" mpf.make_addplot(down_lines, color='#3399ff', linestyle='solid', width=1, secondary_y=False),\n",
" mpf.make_addplot(up_lines, color='#ff5f5f', linestyle='solid', width=1, secondary_y=False),\n",
" ]\n",
")\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mpf.available_fonts()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"perf_daily1 = perf_daily.merge(data['ClosePct'], left_index=True, right_index=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"res2 = res1.merge(data[['ClosePct','HighPct','LowPct']], left_index=True, right_index=True)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"int_labels = ['(-∞, .20]', '(.20, .40]', '(.40, .60]', '(.60, .80]', '(.80, ∞]']\n",
"df_probas = res2.groupby(pd.qcut(res2['Predicted'],7)).agg({'True':[np.mean,len,np.sum],'ClosePct':[np.mean, np.std], 'HighPct':[np.mean], 'LowPct':[np.mean]})\n",
"# df_probas = res2.groupby(pd.cut(res2['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)).agg({'True':[np.mean,len,np.sum],'ClosePct':[np.mean], 'HighPct':[np.mean], 'LowPct':[np.mean]})\n",
"df_probas.columns = ['PctGreen','NumObs','NumGreen','AvgPerf','PerfStD','AvgHigh','AvgLow']"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"df_probas"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"mean_predicted_value"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"res2['Quantile'] = pd.cut(res2['Predicted'], bins = [-np.inf, 0.2, 0.4, 0.6, 0.8, np.inf], labels = int_labels)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Assuming you have a DataFrame 'res2' with the columns 'Quantile' and 'ClosePct'\n",
"# Assuming you have a list 'int_labels' containing the unique values for 'Quantile'\n",
"\n",
"# Create a 2x3 grid of subplots\n",
"fig, axs = plt.subplots(2, 3, figsize=(15, 8))\n",
"\n",
"# Loop through the 'int_labels' and plot the histograms in each subplot\n",
"for i, lbl in enumerate(int_labels):\n",
" # Get the subplot position based on the index i\n",
" row = i // 3\n",
" col = i % 3\n",
" \n",
" # Filter the DataFrame based on the specified value\n",
" data_subset = res2.loc[res2['Quantile'] == lbl, 'LowPct']\n",
" \n",
" # Plot the histogram in the corresponding subplot\n",
" axs[row, col].hist(data_subset)\n",
" axs[row, col].set_title(lbl)\n",
"\n",
"# Add some space between the subplots\n",
"plt.tight_layout()\n",
"\n",
"# Show the plot\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Investigate EM\n",
"data['VIX_EM'] = data['Close'] * (data['Close_VIX']/100) * (np.sqrt( 1 ) / np.sqrt(252))\n",
"data['VIX_EM_High'] = data['Close'] + data['VIX_EM']\n",
"data['VIX_EM_Low'] = data['Close'] - data['VIX_EM']\n",
"\n",
"data['VIX_EM_125'] = data['VIX_EM'] * 1.25\n",
"data['VIX_EM_125_High'] = data['Close'] + data['VIX_EM_125']\n",
"data['VIX_EM_125_Low'] = data['Close'] - data['VIX_EM_125']\n",
"\n",
"data['VIX_EM_15'] = data['VIX_EM'] * 1.5\n",
"data['VIX_EM_15_High'] = data['Close'] + data['VIX_EM_15']\n",
"data['VIX_EM_15_Low'] = data['Close'] - data['VIX_EM_15']\n",
"\n",
"data['VIX_EM'] = data['VIX_EM'].shift(1)\n",
"data['VIX_EM_High'] = data['VIX_EM_High'].shift(1)\n",
"data['VIX_EM_Low'] = data['VIX_EM_Low'].shift(1)\n",
"\n",
"data['VIX_EM_15'] = data['VIX_EM_15'].shift(1)\n",
"data['VIX_EM_15_High'] = data['VIX_EM_15_High'].shift(1)\n",
"data['VIX_EM_15_Low'] = data['VIX_EM_15_Low'].shift(1)\n",
"\n",
"data['VIX_EM_125'] = data['VIX_EM_125'].shift(1)\n",
"data['VIX_EM_125_High'] = data['VIX_EM_125_High'].shift(1)\n",
"data['VIX_EM_125_Low'] = data['VIX_EM_125_Low'].shift(1)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"data[['VIX_EM','VIX_EM_15','VIX_EM_15_High','Close']]"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# How often did price close within EM?\n",
"len(data.query('Close <= VIX_EM_High & Close >= VIX_EM_Low')) / len(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# How often was EM tested?\n",
"len(data.query('High > VIX_EM_High | Low < VIX_EM_Low')) / len(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# How often did price close within EM?\n",
"len(data.query('Close <= VIX_EM_125_High & Close >= VIX_EM_125_Low')) / len(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# How often was EM tested?\n",
"len(data.query('High > VIX_EM_125_High | Low < VIX_EM_125_Low')) / len(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# How often did price close within EM?\n",
"len(data.query('Close <= VIX_EM_15_High & Close >= VIX_EM_15_Low')) / len(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# How often was EM tested?\n",
"len(data.query('High > VIX_EM_15_High | Low < VIX_EM_15_Low')) / len(data)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "py39",
"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.9.12"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}
| | | |