1
0
Files
leopard-analysis/backtest.ipynb

954 lines
114 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"metadata": {
"SqlCellData": {
"data_source_name": "leopard_dev@81.71.3.24",
"variableName$1": "dailies_df"
},
"ExecuteTime": {
"end_time": "2026-01-20T06:18:47.059850Z",
"start_time": "2026-01-20T06:18:40.058469Z"
}
},
"cell_type": "code",
"source": [
"%%sql\n",
"select trade_date, open * factor as Open, close * factor as Close, high * factor as High, low * factor as Low, volume as Volume, coalesce(factor, 1.0) as factor\n",
"from leopard_daily daily\n",
" left join leopard_stock stock on stock.id = daily.stock_id\n",
"where stock.code = '000001.SZ'\n",
" and daily.trade_date between '2024-01-01 00:00:00' and '2025-12-31 23:59:59'\n",
"order by daily.trade_date"
],
"id": "93e66142c88e4d2f",
"outputs": [
{
"data": {
"text/plain": [
" trade_date open close high low \\\n",
"0 2024-01-02 1095.935070 1074.926730 1099.436460 1074.926730 \n",
"1 2024-01-03 1072.592470 1073.759600 1076.093860 1067.923950 \n",
"2 2024-01-04 1072.592470 1063.255430 1072.592470 1059.754040 \n",
"3 2024-01-05 1062.088300 1081.929510 1101.770720 1058.586910 \n",
"4 2024-01-08 1077.260990 1067.923950 1085.430900 1063.255430 \n",
".. ... ... ... ... ... \n",
"425 2025-10-09 1493.155774 1502.380920 1503.698798 1485.248506 \n",
"426 2025-10-10 1498.427286 1506.334554 1514.241822 1497.109408 \n",
"427 2025-10-13 1491.837896 1502.380920 1510.288188 1486.566384 \n",
"428 2025-10-14 1501.063042 1524.784846 1528.738480 1497.109408 \n",
"429 2025-10-15 1526.130396 1534.205160 1536.896748 1515.364044 \n",
"\n",
" volume factor \n",
"0 1158366.45 116.7130 \n",
"1 733610.31 116.7130 \n",
"2 864193.99 116.7130 \n",
"3 1991622.16 116.7130 \n",
"4 1121156.19 116.7130 \n",
".. ... ... \n",
"425 1047469.06 131.7878 \n",
"426 1087947.75 131.7878 \n",
"427 1168801.73 131.7878 \n",
"428 1843428.36 131.7878 \n",
"429 1271061.03 134.5794 \n",
"\n",
"[430 rows x 7 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>trade_date</th>\n",
" <th>open</th>\n",
" <th>close</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>volume</th>\n",
" <th>factor</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2024-01-02</td>\n",
" <td>1095.935070</td>\n",
" <td>1074.926730</td>\n",
" <td>1099.436460</td>\n",
" <td>1074.926730</td>\n",
" <td>1158366.45</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2024-01-03</td>\n",
" <td>1072.592470</td>\n",
" <td>1073.759600</td>\n",
" <td>1076.093860</td>\n",
" <td>1067.923950</td>\n",
" <td>733610.31</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2024-01-04</td>\n",
" <td>1072.592470</td>\n",
" <td>1063.255430</td>\n",
" <td>1072.592470</td>\n",
" <td>1059.754040</td>\n",
" <td>864193.99</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2024-01-05</td>\n",
" <td>1062.088300</td>\n",
" <td>1081.929510</td>\n",
" <td>1101.770720</td>\n",
" <td>1058.586910</td>\n",
" <td>1991622.16</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2024-01-08</td>\n",
" <td>1077.260990</td>\n",
" <td>1067.923950</td>\n",
" <td>1085.430900</td>\n",
" <td>1063.255430</td>\n",
" <td>1121156.19</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>425</th>\n",
" <td>2025-10-09</td>\n",
" <td>1493.155774</td>\n",
" <td>1502.380920</td>\n",
" <td>1503.698798</td>\n",
" <td>1485.248506</td>\n",
" <td>1047469.06</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>426</th>\n",
" <td>2025-10-10</td>\n",
" <td>1498.427286</td>\n",
" <td>1506.334554</td>\n",
" <td>1514.241822</td>\n",
" <td>1497.109408</td>\n",
" <td>1087947.75</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>427</th>\n",
" <td>2025-10-13</td>\n",
" <td>1491.837896</td>\n",
" <td>1502.380920</td>\n",
" <td>1510.288188</td>\n",
" <td>1486.566384</td>\n",
" <td>1168801.73</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>428</th>\n",
" <td>2025-10-14</td>\n",
" <td>1501.063042</td>\n",
" <td>1524.784846</td>\n",
" <td>1528.738480</td>\n",
" <td>1497.109408</td>\n",
" <td>1843428.36</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>429</th>\n",
" <td>2025-10-15</td>\n",
" <td>1526.130396</td>\n",
" <td>1534.205160</td>\n",
" <td>1536.896748</td>\n",
" <td>1515.364044</td>\n",
" <td>1271061.03</td>\n",
" <td>134.5794</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>430 rows × 7 columns</p>\n",
"</div>"
]
},
"execution_count": 110,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 110
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:18:47.288743Z",
"start_time": "2026-01-20T06:18:47.107554Z"
}
},
"cell_type": "code",
"source": [
"import pandas as pd\n",
"\n",
"dailies_df.rename(\n",
" columns={'open': 'Open', 'close': 'Close', 'high': 'High', 'low': 'Low', 'volume': 'Volume'}, inplace=True\n",
")\n",
"dailies_df['trade_date'] = pd.to_datetime(dailies_df['trade_date'], format='%Y-%m-%d')\n",
"dailies_df.set_index('trade_date', inplace=True)\n",
"dailies_df"
],
"id": "c0ed078ffd5b57fd",
"outputs": [
{
"data": {
"text/plain": [
" Open Close High Low Volume \\\n",
"trade_date \n",
"2024-01-02 1095.935070 1074.926730 1099.436460 1074.926730 1158366.45 \n",
"2024-01-03 1072.592470 1073.759600 1076.093860 1067.923950 733610.31 \n",
"2024-01-04 1072.592470 1063.255430 1072.592470 1059.754040 864193.99 \n",
"2024-01-05 1062.088300 1081.929510 1101.770720 1058.586910 1991622.16 \n",
"2024-01-08 1077.260990 1067.923950 1085.430900 1063.255430 1121156.19 \n",
"... ... ... ... ... ... \n",
"2025-10-09 1493.155774 1502.380920 1503.698798 1485.248506 1047469.06 \n",
"2025-10-10 1498.427286 1506.334554 1514.241822 1497.109408 1087947.75 \n",
"2025-10-13 1491.837896 1502.380920 1510.288188 1486.566384 1168801.73 \n",
"2025-10-14 1501.063042 1524.784846 1528.738480 1497.109408 1843428.36 \n",
"2025-10-15 1526.130396 1534.205160 1536.896748 1515.364044 1271061.03 \n",
"\n",
" factor \n",
"trade_date \n",
"2024-01-02 116.7130 \n",
"2024-01-03 116.7130 \n",
"2024-01-04 116.7130 \n",
"2024-01-05 116.7130 \n",
"2024-01-08 116.7130 \n",
"... ... \n",
"2025-10-09 131.7878 \n",
"2025-10-10 131.7878 \n",
"2025-10-13 131.7878 \n",
"2025-10-14 131.7878 \n",
"2025-10-15 134.5794 \n",
"\n",
"[430 rows x 6 columns]"
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Volume</th>\n",
" <th>factor</th>\n",
" </tr>\n",
" <tr>\n",
" <th>trade_date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2024-01-02</th>\n",
" <td>1095.935070</td>\n",
" <td>1074.926730</td>\n",
" <td>1099.436460</td>\n",
" <td>1074.926730</td>\n",
" <td>1158366.45</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-01-03</th>\n",
" <td>1072.592470</td>\n",
" <td>1073.759600</td>\n",
" <td>1076.093860</td>\n",
" <td>1067.923950</td>\n",
" <td>733610.31</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-01-04</th>\n",
" <td>1072.592470</td>\n",
" <td>1063.255430</td>\n",
" <td>1072.592470</td>\n",
" <td>1059.754040</td>\n",
" <td>864193.99</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-01-05</th>\n",
" <td>1062.088300</td>\n",
" <td>1081.929510</td>\n",
" <td>1101.770720</td>\n",
" <td>1058.586910</td>\n",
" <td>1991622.16</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2024-01-08</th>\n",
" <td>1077.260990</td>\n",
" <td>1067.923950</td>\n",
" <td>1085.430900</td>\n",
" <td>1063.255430</td>\n",
" <td>1121156.19</td>\n",
" <td>116.7130</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-09</th>\n",
" <td>1493.155774</td>\n",
" <td>1502.380920</td>\n",
" <td>1503.698798</td>\n",
" <td>1485.248506</td>\n",
" <td>1047469.06</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-10</th>\n",
" <td>1498.427286</td>\n",
" <td>1506.334554</td>\n",
" <td>1514.241822</td>\n",
" <td>1497.109408</td>\n",
" <td>1087947.75</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-13</th>\n",
" <td>1491.837896</td>\n",
" <td>1502.380920</td>\n",
" <td>1510.288188</td>\n",
" <td>1486.566384</td>\n",
" <td>1168801.73</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-14</th>\n",
" <td>1501.063042</td>\n",
" <td>1524.784846</td>\n",
" <td>1528.738480</td>\n",
" <td>1497.109408</td>\n",
" <td>1843428.36</td>\n",
" <td>131.7878</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-15</th>\n",
" <td>1526.130396</td>\n",
" <td>1534.205160</td>\n",
" <td>1536.896748</td>\n",
" <td>1515.364044</td>\n",
" <td>1271061.03</td>\n",
" <td>134.5794</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>430 rows × 6 columns</p>\n",
"</div>"
]
},
"execution_count": 111,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 111
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:18:47.649279Z",
"start_time": "2026-01-20T06:18:47.592859Z"
}
},
"cell_type": "code",
"source": [
"dailies_df['sma10'] = dailies_df['Close'].rolling(10).mean()\n",
"dailies_df['sma30'] = dailies_df['Close'].rolling(30).mean()\n",
"dailies_df['sma60'] = dailies_df['Close'].rolling(60).mean()\n",
"dailies_df['sma120'] = dailies_df['Close'].rolling(120).mean()\n",
"dailies_df.tail()"
],
"id": "c558d68773d228c1",
"outputs": [
{
"data": {
"text/plain": [
" Open Close High Low Volume \\\n",
"trade_date \n",
"2025-10-09 1493.155774 1502.380920 1503.698798 1485.248506 1047469.06 \n",
"2025-10-10 1498.427286 1506.334554 1514.241822 1497.109408 1087947.75 \n",
"2025-10-13 1491.837896 1502.380920 1510.288188 1486.566384 1168801.73 \n",
"2025-10-14 1501.063042 1524.784846 1528.738480 1497.109408 1843428.36 \n",
"2025-10-15 1526.130396 1534.205160 1536.896748 1515.364044 1271061.03 \n",
"\n",
" factor sma10 sma30 sma60 sma120 \n",
"trade_date \n",
"2025-10-09 131.7878 1504.094161 1546.925196 1593.490219 1544.474925 \n",
"2025-10-10 131.7878 1504.357737 1543.762289 1589.646408 1545.431305 \n",
"2025-10-13 131.7878 1503.698798 1540.862958 1586.329749 1546.312145 \n",
"2025-10-14 131.7878 1506.202766 1536.997182 1583.232735 1547.358386 \n",
"2025-10-15 134.5794 1507.803737 1533.840781 1580.841843 1548.429886 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Volume</th>\n",
" <th>factor</th>\n",
" <th>sma10</th>\n",
" <th>sma30</th>\n",
" <th>sma60</th>\n",
" <th>sma120</th>\n",
" </tr>\n",
" <tr>\n",
" <th>trade_date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2025-10-09</th>\n",
" <td>1493.155774</td>\n",
" <td>1502.380920</td>\n",
" <td>1503.698798</td>\n",
" <td>1485.248506</td>\n",
" <td>1047469.06</td>\n",
" <td>131.7878</td>\n",
" <td>1504.094161</td>\n",
" <td>1546.925196</td>\n",
" <td>1593.490219</td>\n",
" <td>1544.474925</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-10</th>\n",
" <td>1498.427286</td>\n",
" <td>1506.334554</td>\n",
" <td>1514.241822</td>\n",
" <td>1497.109408</td>\n",
" <td>1087947.75</td>\n",
" <td>131.7878</td>\n",
" <td>1504.357737</td>\n",
" <td>1543.762289</td>\n",
" <td>1589.646408</td>\n",
" <td>1545.431305</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-13</th>\n",
" <td>1491.837896</td>\n",
" <td>1502.380920</td>\n",
" <td>1510.288188</td>\n",
" <td>1486.566384</td>\n",
" <td>1168801.73</td>\n",
" <td>131.7878</td>\n",
" <td>1503.698798</td>\n",
" <td>1540.862958</td>\n",
" <td>1586.329749</td>\n",
" <td>1546.312145</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-14</th>\n",
" <td>1501.063042</td>\n",
" <td>1524.784846</td>\n",
" <td>1528.738480</td>\n",
" <td>1497.109408</td>\n",
" <td>1843428.36</td>\n",
" <td>131.7878</td>\n",
" <td>1506.202766</td>\n",
" <td>1536.997182</td>\n",
" <td>1583.232735</td>\n",
" <td>1547.358386</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-15</th>\n",
" <td>1526.130396</td>\n",
" <td>1534.205160</td>\n",
" <td>1536.896748</td>\n",
" <td>1515.364044</td>\n",
" <td>1271061.03</td>\n",
" <td>134.5794</td>\n",
" <td>1507.803737</td>\n",
" <td>1533.840781</td>\n",
" <td>1580.841843</td>\n",
" <td>1548.429886</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"execution_count": 112,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 112
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:18:48.525845Z",
"start_time": "2026-01-20T06:18:48.288567Z"
}
},
"cell_type": "code",
"source": [
"# 指标计算完成后截取后面指标的完整的部份使用\n",
"dailies_df = dailies_df.loc['2025-01-01':'2025-12-31']\n",
"dailies_df.tail()"
],
"id": "b6f5da567c935aa",
"outputs": [
{
"data": {
"text/plain": [
" Open Close High Low Volume \\\n",
"trade_date \n",
"2025-10-09 1493.155774 1502.380920 1503.698798 1485.248506 1047469.06 \n",
"2025-10-10 1498.427286 1506.334554 1514.241822 1497.109408 1087947.75 \n",
"2025-10-13 1491.837896 1502.380920 1510.288188 1486.566384 1168801.73 \n",
"2025-10-14 1501.063042 1524.784846 1528.738480 1497.109408 1843428.36 \n",
"2025-10-15 1526.130396 1534.205160 1536.896748 1515.364044 1271061.03 \n",
"\n",
" factor sma10 sma30 sma60 sma120 \n",
"trade_date \n",
"2025-10-09 131.7878 1504.094161 1546.925196 1593.490219 1544.474925 \n",
"2025-10-10 131.7878 1504.357737 1543.762289 1589.646408 1545.431305 \n",
"2025-10-13 131.7878 1503.698798 1540.862958 1586.329749 1546.312145 \n",
"2025-10-14 131.7878 1506.202766 1536.997182 1583.232735 1547.358386 \n",
"2025-10-15 134.5794 1507.803737 1533.840781 1580.841843 1548.429886 "
],
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Open</th>\n",
" <th>Close</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Volume</th>\n",
" <th>factor</th>\n",
" <th>sma10</th>\n",
" <th>sma30</th>\n",
" <th>sma60</th>\n",
" <th>sma120</th>\n",
" </tr>\n",
" <tr>\n",
" <th>trade_date</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2025-10-09</th>\n",
" <td>1493.155774</td>\n",
" <td>1502.380920</td>\n",
" <td>1503.698798</td>\n",
" <td>1485.248506</td>\n",
" <td>1047469.06</td>\n",
" <td>131.7878</td>\n",
" <td>1504.094161</td>\n",
" <td>1546.925196</td>\n",
" <td>1593.490219</td>\n",
" <td>1544.474925</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-10</th>\n",
" <td>1498.427286</td>\n",
" <td>1506.334554</td>\n",
" <td>1514.241822</td>\n",
" <td>1497.109408</td>\n",
" <td>1087947.75</td>\n",
" <td>131.7878</td>\n",
" <td>1504.357737</td>\n",
" <td>1543.762289</td>\n",
" <td>1589.646408</td>\n",
" <td>1545.431305</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-13</th>\n",
" <td>1491.837896</td>\n",
" <td>1502.380920</td>\n",
" <td>1510.288188</td>\n",
" <td>1486.566384</td>\n",
" <td>1168801.73</td>\n",
" <td>131.7878</td>\n",
" <td>1503.698798</td>\n",
" <td>1540.862958</td>\n",
" <td>1586.329749</td>\n",
" <td>1546.312145</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-14</th>\n",
" <td>1501.063042</td>\n",
" <td>1524.784846</td>\n",
" <td>1528.738480</td>\n",
" <td>1497.109408</td>\n",
" <td>1843428.36</td>\n",
" <td>131.7878</td>\n",
" <td>1506.202766</td>\n",
" <td>1536.997182</td>\n",
" <td>1583.232735</td>\n",
" <td>1547.358386</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2025-10-15</th>\n",
" <td>1526.130396</td>\n",
" <td>1534.205160</td>\n",
" <td>1536.896748</td>\n",
" <td>1515.364044</td>\n",
" <td>1271061.03</td>\n",
" <td>134.5794</td>\n",
" <td>1507.803737</td>\n",
" <td>1533.840781</td>\n",
" <td>1580.841843</td>\n",
" <td>1548.429886</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 113
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:23:39.497068Z",
"start_time": "2026-01-20T06:23:39.478960Z"
}
},
"cell_type": "code",
"source": [
"from backtesting import Strategy\n",
"from backtesting.lib import crossover\n",
"\n",
"\n",
"class SmaCross(Strategy):\n",
" def init(self):\n",
" self.sma10 = self.I(lambda x: x, self.data.sma10)\n",
" self.sma30 = self.I(lambda x: x, self.data.sma30)\n",
" # self.sma60 = self.I(lambda x: x, self.data.sma60)\n",
" # self.sma120 = self.I(lambda x: x, self.data.sma120)\n",
"\n",
" def next(self):\n",
" if crossover(self.data.sma10, self.data.sma30):\n",
" self.position.close()\n",
" self.buy()\n",
" elif crossover(self.data.sma30, self.data.sma10):\n",
" self.position.close()\n",
" self.sell()"
],
"id": "b56aaaf4cad7bc7d",
"outputs": [],
"execution_count": 127
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:18:49.016553Z",
"start_time": "2026-01-20T06:18:49.003517Z"
}
},
"cell_type": "code",
"source": [
"def stats_print(stats):\n",
" indicator_name_mapping = {\n",
" # 'Start': '回测开始时间',\n",
" # 'End': '回测结束时间',\n",
" # 'Duration': '回测持续时长',\n",
" # 'Exposure Time [%]': '持仓时间占比(%',\n",
" 'Equity Final [$]': '最终收益',\n",
" 'Equity Peak [$]': '峰值收益',\n",
" 'Return [%]': '总收益率(%',\n",
" 'Buy & Hold Return [%]': '买入并持有收益率(%',\n",
" 'Return (Ann.) [%]': '年化收益率(%',\n",
" 'Volatility (Ann.) [%]': '年化波动率(%',\n",
" # 'CAGR [%]': '复合年均增长率(%',\n",
" # 'Sharpe Ratio': '夏普比率',\n",
" 'Sortino Ratio': '索提诺比率',\n",
" 'Calmar Ratio': '卡尔玛比率',\n",
" # 'Alpha [%]': '阿尔法系数(%',\n",
" # 'Beta': '贝塔系数',\n",
" 'Max. Drawdown [%]': '最大回撤(%',\n",
" 'Avg. Drawdown [%]': '平均回撤(%',\n",
" 'Max. Drawdown Duration': '最大回撤持续时长',\n",
" 'Avg. Drawdown Duration': '平均回撤持续时长',\n",
" '# Trades': '总交易次数',\n",
" 'Win Rate [%]': '胜率(%',\n",
" # 'Best Trade [%]': '最佳单笔交易收益率(%',\n",
" # 'Worst Trade [%]': '最差单笔交易收益率(%',\n",
" # 'Avg. Trade [%]': '平均单笔交易收益率(%',\n",
" # 'Max. Trade Duration': '单笔交易最长持有时长',\n",
" # 'Avg. Trade Duration': '单笔交易平均持有时长',\n",
" # 'Profit Factor': '盈利因子',\n",
" # 'Expectancy [%]': '期望收益(%',\n",
" 'SQN': '系统质量数',\n",
" # 'Kelly Criterion': '凯利准则',\n",
" }\n",
" for k, v in stats.items():\n",
" if k in indicator_name_mapping:\n",
" cn_name = indicator_name_mapping.get(k, k)\n",
" if isinstance(v, (int, float)):\n",
" if \"%\" in cn_name or k in ['Sharpe Ratio', 'Sortino Ratio', 'Calmar Ratio', 'Profit Factor']:\n",
" formatted_value = f\"{v:.2f}\"\n",
" elif \"$\" in cn_name:\n",
" formatted_value = f\"{v:.2f}\"\n",
" elif \"次数\" in cn_name:\n",
" formatted_value = f\"{v:.0f}\"\n",
" else:\n",
" formatted_value = f\"{v:.4f}\"\n",
" else:\n",
" formatted_value = str(v)\n",
" print(f'{cn_name}: {formatted_value}')"
],
"id": "a23e811212958477",
"outputs": [],
"execution_count": 115
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:23:41.360832Z",
"start_time": "2026-01-20T06:23:41.286075Z"
}
},
"cell_type": "code",
"source": [
"from backtesting import Backtest\n",
"\n",
"bt = Backtest(dailies_df, SmaCross, cash=100000, commission=.002, finalize_trades=True)\n",
"stats = bt.run()\n",
"stats_print(stats)"
],
"id": "afc750727129ff2e",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"最终收益: 107164.5540\n",
"峰值收益: 110089.8234\n",
"总收益率(%: 7.16\n",
"买入并持有收益率(%: 5.04\n",
"年化收益率(%: 9.72\n",
"年化波动率(%: 18.21\n",
"索提诺比率: 0.91\n",
"卡尔玛比率: 0.97\n",
"最大回撤(%: -10.05\n",
"平均回撤(%: -5.17\n",
"最大回撤持续时长: 155 days 00:00:00\n",
"平均回撤持续时长: 55 days 00:00:00\n",
"总交易次数: 5\n",
"胜率(%: 40.00\n",
"系统质量数: 0.5772\n"
]
}
],
"execution_count": 128
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2026-01-20T06:23:44.380577Z",
"start_time": "2026-01-20T06:23:43.872193Z"
}
},
"cell_type": "code",
"source": "bt.plot()",
"id": "d3e3b4d4836ab51b",
"outputs": [
{
"data": {
"text/html": [
"\n",
" <div id=\"a3a32bc0-6443-4c14-9057-65a7c6c54893\" data-root-id=\"p3636\" style=\"display: contents;\"></div>\n"
]
},
"metadata": {},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
},
{
"data": {
"application/javascript": "(function(root) {\n function embed_document(root) {\n const docs_json = {\"be2eb0cd-ab07-4c39-8fa9-57b588170ef0\":{\"version\":\"3.8.2\",\"title\":\"Bokeh Application\",\"config\":{\"type\":\"object\",\"name\":\"DocumentConfig\",\"id\":\"p3638\",\"attributes\":{\"notifications\":{\"type\":\"object\",\"name\":\"Notifications\",\"id\":\"p3639\"}}},\"roots\":[{\"type\":\"object\",\"name\":\"GridPlot\",\"id\":\"p3636\",\"attributes\":{\"rows\":null,\"cols\":null,\"sizing_mode\":\"stretch_width\",\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3635\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3622\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p3360\",\"attributes\":{\"dimensions\":\"width\"}},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p3460\",\"attributes\":{\"dimensions\":\"width\"}},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p3313\",\"attributes\":{\"dimensions\":\"width\"}},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p3518\",\"attributes\":{\"dimensions\":\"width\"}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3623\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p3361\",\"attributes\":{\"dimensions\":\"width\",\"renderers\":\"auto\",\"maintain_focus\":false}},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p3461\",\"attributes\":{\"dimensions\":\"width\",\"renderers\":\"auto\",\"maintain_focus\":false}},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p3314\",\"attributes\":{\"dimensions\":\"width\",\"renderers\":\"auto\",\"maintain_focus\":false}},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p3519\",\"attributes\":{\"dimensions\":\"width\",\"renderers\":\"auto\",\"maintain_focus\":false}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3624\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"WheelPanTool\",\"id\":\"p3362\"},{\"type\":\"object\",\"name\":\"WheelPanTool\",\"id\":\"p3462\"},{\"type\":\"object\",\"name\":\"WheelPanTool\",\"id\":\"p3315\"},{\"type\":\"object\",\"name\":\"WheelPanTool\",\"id\":\"p3520\"}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3625\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p3363\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p3364\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p3370\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p3369\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p3463\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p3464\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p3470\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p3469\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p3316\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p3317\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p3323\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p3322\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p3521\",\"attributes\":{\"dimensions\":\"both\",\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p3522\",\"attributes\":{\"syncable\":false,\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5,\"level\":\"overlay\",\"visible\":false,\"left\":{\"type\":\"number\",\"value\":\"nan\"},\"right\":{\"type\":\"number\",\"value\":\"nan\"},\"top\":{\"type\":\"number\",\"value\":\"nan\"},\"bottom\":{\"type\":\"number\",\"value\":\"nan\"},\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"top_units\":\"canvas\",\"bottom_units\":\"canvas\",\"handles\":{\"type\":\"object\",\"name\":\"BoxInteractionHandles\",\"id\":\"p3528\",\"attributes\":{\"all\":{\"type\":\"object\",\"name\":\"AreaVisuals\",\"id\":\"p3527\",\"attributes\":{\"fill_color\":\"white\",\"hover_fill_color\":\"lightgray\"}}}}}}}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3626\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"UndoTool\",\"id\":\"p3371\"},{\"type\":\"object\",\"name\":\"UndoTool\",\"id\":\"p3471\"},{\"type\":\"object\",\"name\":\"UndoTool\",\"id\":\"p3324\"},{\"type\":\"object\",\"name\":\"UndoTool\",\"id\":\"p3529\"}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3627\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"RedoTool\",\"id\":\"p3372\"},{\"type\":\"object\",\"name\":\"RedoTool\",\"id\":\"p3472\"},{\"type\":\"object\",\"name\":\"RedoTool\",\"id\":\"p3325\"},{\"type\":\"object\",\"name\":\"RedoTool\",\"id\":\"p3530\"}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3628\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p3373\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p3473\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p3326\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p3531\"}]}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3629\"},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3630\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p3396\",\"attributes\":{\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3393\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3328\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3329\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3330\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/w3DB1cOAAAAwC9KKlsD2StR2UpJmdkyUiqkECLKKqNEyiwzhGhZobISf87dexcIBAJBDnGowYY4zFCHG2a4EY5wpKMc7RjHOs7xRhpltDFOcKKTjHWyU5zqNKc7w5nOcrZznGuc84x3vgtMMNEkF7rIxS5xqctc7gqTTXGlqaa5ynRXm2Gma1zrOte7wY1mucnNbnGr29zuDnea7S53u8e95rjPXPPcb74FFnrAgx6yyMMWW+IRj3rMUo97wpOWecrTlnvGs1ZY6TnPe8GLXrLKai97xates8Zar1vnDW9a7y0bbPS2d7zrPe/7wCabfegjH/vEpz6zxee+8KWtvvK1b2zzre9st8NOu+z2vR/86Cc/2+MXv/rNXvvs97s//OkvfzvgHwf96z//A0NX/L7wAgAA\"},\"shape\":[188],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Open\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2VUbVBUZRRmEdQoZGFQBkQI8QNnYLWGUQqUB5JA240wChOGkQzEhbAkCEJxEZDPViT2vveugCG2iBAltHwoZOJGpCANICyKjLLgiDLD56IijPWjyzuDv5455zznvOec59wbHqD1KYkiaKsvT4noZbDqS3nslXoGQ9P6oy7tDFKM/jxlPkNxfot3wnQzg9qp+W6/eAZTWR67LofQvJ0xJ1f/aEYQcrFz1UFjspB3VbnEKLWfwX6H2HChkoH1kKj5Cwm1+Xye/+5fstHwcgai8jsxJ6ponH9/wqJwVthK+5SvjTLVjzMw1vqWiTYR4Olw28x3BGbHJT2RpwiSv1/nFRlGwPz9lcfmIIIHxz4RpbkRbPvoflGjJYEqtG5540NmoW97y4JzejuCyNaEgt0GNM7bi+s0Oh5Q9/kS+Oc6c6kmZKEPw7CyvekFBDPegrslHOXzdZQwz9E+YRD30M5C9ILOwc+3WA+HHNeJ4hoGr/k/0vc20f0U113qS5FRXaI9rXVTBQyeDG61kc0oEH9+9tbYHgXeWdG4LzlaATZD/Hy8SoGcQ6ok098UcEqMk0/0K/Bh18Flhe0KeKuvZdV3Un+DtNhx0oTW61Q9tmswYF7xL7Z5XBPcIVwxSOsPaPIKC1/QuEJYedHXhsF6w9uefn4MDC4MthQFMUhLCh+4nM1A2+P/clcnnZ+/g8XI3xl/h/xd837+vhbryuvG61Qptx0R1xNkV9z4/YMQgvD/v5Mjh5Ovp0VQnp2g33mgnaBFpfB+05QFk1hR5dhFoO863mPry+JY8K+BvV4scqXmAeJtLOqI6/sVViweaezulAWw2CCQSq1TWORJtWMjeSzchPnGzv+w8LdP8exP4PCt+J6i6CWL6sywjK9vszgqPu/q/hmH6O3vubUc4BAqGnQPiOHgNLluxGaSg7tAkubipcScRjB9xVyJTPFzoWWEErNqfZf9pjPQqZYqD8uUyBX/8culq0rsFlbJzm1VokQ6Ld3/lIO17vroT3McXu/+fHzLMuVCXXlwW4fkAoe7qoQQ1/ZX3+fjvD2i7ttb3sxBJHhWFuhKcUl3d7X+Yw5Lu88E/PAzh0KpS1tzEQeZOKpLW82hIXNMU5lJefweWGmEy/qdHGoznTaYbeYW9lEgPSvPeEz3w+9vXFNppTPikB68I99Cz2Klbk6yvJTDtCa2VhbKYfVkxxvew5TP4w1VyIOmCBajmuEEnwqqm4Og9GbSRhZvCY1ax20pKhOPSK45szDS3e887cGiT9107+0QqnO3emaHwpCFThPkbvLsv//i9o1N/vMEJpM1p28mE8QFr7UqlBM4CeOz1YcImlW3Sk/UEMwN7lF8mkVgI1gpxzcE+YlDZicTKc9H5JZ6NpDabepIwT5/yl8Tk3EyXUvwL/dyRfrgBQAA\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"High\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/3VUa1BUZRjmmolTuxKXuAxMxhAoLlgEzOTigxYOsismGjRgg0JckhiCILC4mEqECirs+c45XBVZQGgyaXNRN4KQi0Jxi0VIEYiQiKJVQKEk+vFxZpzp1zPve773eb/3ed7zvXJrS8BzmQQBJ1y4IyYEPNYeH5hiEHqhxyLKmGAkba/kqBfBYaPreWvnGNR9si+rdITBhZ+Cgt79mME/bltTHjQxsDcrODdrR2A6N+1g6kDwelyWTZmIILotpWCHHkEDb2h05GcGgYadEy6lQt3qgHuzWg3zv+cp0v7Kdy4/fe1XBgP9AUt+PUIdRVGGvD86j8CvZGrRbYTAYH9l8LECAsyPd8wdIkg/6eATvZ+AaY/f7BpEVu5tPLC9UuIszFs+YXHFdDeB5667xdfMBP4vjTWeczKCnJob3/qHCjw0v1B/1tlfQqCubYp0qyP4zH19/LlWgucdA43LZ4VzVG+qM62j83eoqw9HaoU5Kf5lWrQgbhP0s3g/N/GqmkHqvoYwbZ7wner6hexhxbNiBucrdMl91QpoRrwTCksV2Kpq/Fzdo0CU6GuD8O8VqH+v5EWdCQOx1Dl//YQCd5pPFRUtKpCtM94YYc9Ar2q0pTiIgX9oq1rnxeCsZLfTBnOB/8mY8vUof7Or1xN4p0Y9rDPnhH6U3+oXSVOEnMGQfEZ+P1LYE+o39Z/qQPMU6d5Rv6iftI7q/eS+UP+pT7W5tpMytRBbFd8PlOUQyM1P7BhMIiiLTz4YoyGIe3j7w6FugsvE3bfGkgWfmiBvdGEx25vRb7udxavim5G5ySzuNdsNVr7JIi3k4h6tD4tt9i7hhrEsEmUW80sVLPZK9jw2v8qiPFXv+N/DLDJlB3sHLnHw0M8az5vgMKLyt4kTcYiVbvNqCefwsn6Dr+4kh5rU3DbPfA5d5M7j0E08smWPxGaRPFKlrFlpPI+d4iR7nOJRINs5/XtCITaMDUfZhhdi9fW3ugrsCjGh7PR6ZpBHXartU4m+PIaVWxa7HXm8pi8/utGHR7C9KM3ShYeTzmHSWschPyQ/bkqfx5AyJdS9k0NuSMeP8ipuJZ5U3QqubuKwpu/AjNsqHp3EMqxBK9y7nexqfCGdwwdSE224hsMBSfXgH61CPUU6V332n8212QKOq0yvrInh8E22k6PIlcNMc63lmBGHYyHeZ0xn2RX8b98eWQm6UV7aV6v8SsMkcvhIdltRvMRCKn77fLszBy/xGWOXLhYRUtVCzkXBF6Oxuz2nNwv+Uh8pUr9vKENHNJGC79XZvX4e61hsEhu1zdiykEtavhtcxaJPNeetMGDRpPyh/NPl92F4+T+LLVl+t3SH3GIGCHS9as+MaSGfFLLOsiiXIEgaZnepnMBJnJyjiiEw0dWdvplO0K1yLZuvIoiSNVq/xBHojVm5PxglMMy3eYMxZPEvJpUInuAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Low\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/3VSbUyTVxSmAhGmHcUIrNu0qOgKluIYi4wEPRTkY6PiwImD6mDlswoRmKSIcziGFogQN9573/fdAIlahrqZ6IoIVNSVDw3sg4+BikYoDHEkQlsgQ5D5Y29vwrJfT8495zz3nPM8jlFPpvv1CKR19zO//BHBA/mk3JyCYF2p31TVVQQLW2Rqy20EAe0FE8l1CE4zKxRVRQg0JnvvJBECm++H2ypjSb92/zWH5j8RjFimj3p3kf6EdTnJApb0CUekt5Pk5D/XjLKcpgYEMbZdY5JqBHn7WhL6yxEc3C40misIPzdX2OgmVcQ5wj/wR9RiRDeCkMwTb5xxwgCzo50zRzCcHXNtXBWNoSPI8R29DFvzW3c9rmxejeHq0X0nqofI3Fx83K613HkGQQtra1c4iKCzoe54Sj8CFpxLB/5CYD8QViv1xFbkeNM61BXv2xB+cRPzu08RhhkZ70ENQ/7jeLi4bP0B/vQkAsd/9eD2W7o3pwOXv9AXG5ucT+5Yb17oDc8l98tYsFTrJiqg/HHo3fpwyop3FkeeHWMp0A9ty/62moKdPanLv+uiINXpp2XKnymIm+IXfdFBgUx3q7ihm4JWTUhNnz0CQaDnN15jFNiJCl3CJihrPGvzECunCK6J/1Xw6jAF4rzDZVODFOR4xxWE3iC4tK9GGi3e7ILgA0V7g8kfga97vn5zMNmH88f/+YG7G6cT5wfOH5wfufxSXRUXul1T7YlezRuUunth//XPsVMeQWmJGISV5pjIEgwBoqqNHQ0Y1vIGJY+6XuqLM2r5NzC8LbDrmHyThl7dzDZqGQ2KwLf0UQsY5NK2m/eX01b8UHrqE3UiDfd0+oe+Cho+ku5+4dJEw2IPf/XeORqe94QebjxDwxVN4smsPhrqNeJNTj4MOBvfvayKYMC2t/fKdAwDYpPH+OsmBgojfbNzV7Iwb+BZmpxZWGMsKQ3ew0IfPl85V8KCSrr1Na98FvaKnD53k7CQFfhKv1LPwG5R+KO8bsLThd0SWvoZsBhy6gv2M+BinJc7nGXgYGCwf5uSvHM4qlvVuCKdYKDg43N3PBmYNFxyM9ox0IaL13/lQea+rnlmuKRhIEjgHpxaSJBWpXhvDCF7cft2a5+u/VvIgIOxNssH0RAmMvNqWmn4RbuhIP4mDROGUfWOi+SdiytU1WUnn9JWPn/B1/aS32jIiXSdXTxP6u9qFUP6FKIHm5ctvyWhwcYo9LMMYzgQqbluMBH92rSUzJ1PW3Xm8Br2C73oRlvr8+LHde89weBkOrIlfQBDjWbHyueZL30myC3RpRPs1KXx4qIwzA9HU3uKMVzGWodDSeT9UHy8+oUfhk8j5/KLt5OYqxvv8ZoLDiCxf4S5/bMfMPwDTI5TiOAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Close\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/11Ua1CUVRhGYFFQ5BLoRMWCIG4BKxIBA66+IhcRGASHKAUEidtmjMXosEG4pNACgnj5zvm+DwM2ahNXISXkujLUSkQyBAtyyUSuYeAAG6ATmPGjwzfTr2fe97zX53nnDDwIfRnYg2DLR0VpTfUI7tdXZif2Izg1aW0uXEaQrX/vgtkSghcuPukLPyCQRLfE9l9A8Ffe7sDGKC6PBbOCgWkEjq5eNoOvYmhh9fTPPkQwvrCY6dyJ4LBe5x9OZQgye49VS+0RxNqmJZiyCAImHMSBXyNQxNRtaJ5EYFvgNl9ag0BYOZT6eRVXf+C/OUk9gmQ+39Tc18pNMAiamO6dORh04759L+cKhqxC+33JcRia7eJrBwMwrLb/rlyEwXzpqb25PV7rm9yefuWgDoanJcvKpLcxRF3v2ZLEw2s8ECR1Rj6LEJ7zxFDNU3ksBXP1/m6QvxkkxNA9tfn4s2sYfjeoHR6qwCCS+mWFTOK1eYu2fWi8OMf1JTbZ6/97E9swdGqxX4XA6yfpTEIlgut9kZEJGQhK624NZks5/giv0clVGkE0BT+/HJ/NYikY9d417VdMQZLJ97rxP1KQ5nxE6n+XAp/a1rz6HgoEklNF8w8pmB51t5IuUSAXhgscLRFsapP5Zocj6FH8ad2gg6BBXGqnNULwSF189eoyBfdkvvI+HmeTfH3+WcuAGQqOzBvnnGmn4I2jXaabR7l4mZbn/AEfgatNhspxP4Ltun17DxxAcC4j4VFjPrc/2ZvwQPYkfnJ/5A5qMqNzy0Y4Pgm/RFfy7nHo8ZfNFty9EL2IrvnKjrtBUdwdkTiib5uC8rExpsFE+6lLygCGRc2ZB68H0HBebBYW7EGD/tjjnou7aajDbv7KrTSECQuPpcfRUCwemH1SzOFtWdwXH/fR4LquxV9byEAQv7F8D5+Bt9btMqwbokGvt/f24mEGFtRpd6QxDMQIR73DUhkQaO2fWGkZ+EbcZPjPIRYShScl521ZkIhoi7KTLGSLHMKH7EpgVT55DsWCRe+c84lGFg6aVkm/cmdhY+/xOZf1LFRLIpL6ZhgYVuxd7nZgQS5eEMc+Y+C52ivCup6B3xTpUW6dXF+CRUfvd4VcY2Ci1rxxYwoXf0cmcDDZyYDZ2DvV4kBmbX6D3pKwyze5PGI3yGbVN2Rc3AnRfs+2eAb4WqQc3sPxUSHRKVgZpteQ8EZ4mlPf2Dqmz6z5LcdWQjZUMNCvuKVCaZyf5HuaXuI5/UrDTRk7pcmgYUY9ke6npOEV7b4uA1caWMknIa1ONFTKNIHu2zgdyTvRt0MRNaJK5OKiRDtUoS8wjKkjvY2ec2ikrbn4S9bqP6OZp0cuY5DL/DYtp2Lw4pdub6/HkBTcarWDwXBJMm6SK+FQYHo6vzYFg0qxnjfxPudfGQ2n3s3jbCRRVtlpMHTknbbsWe33L6cvQPHgBQAA\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Volume\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/yVUfUyUdRy/YULdpJYhy6WHeC/cc6/Pc8/dyXH3JL9TkLW2hhpsQQXTu6aYgRkwHNqGNxiWVGh2UUzlZWoTGaVcOuwGohOO5qHGXNR2gQ7CIdg4nYPqvp/769k993u+n9fvb6ytfCk04GTysbby6laBjYRCb5Z8wTOuuKn//KiGngmPbTz71u/3R2c1bGtAsbysSMsGFrTFexoMzOv1Ptil45gUG/D9ATPr2hJ5ltSuY76Z/MDNFWr63p21k2MpsT921evpfabjqJXm5JxZu4EFFL6ykt8MLAZ38WqzQPO82/o4JpPJPu3kjOxhfqD1uRob4Y1L280sqi1+6dYgx5r6F84kG02YY75iJdyaZT1GzPu8ciOLyal1V73ORFH859hTgbWXS42vzmWQzrn0n42sQpIXNiwZ6L08b0mPZ9GFOK7zNnAVwWhc33whR/w+efueCj7l1PLA+eW6jnSVnjrEgZ/oVgGn9fh66MjtcNF3to8TrfS7U8jLomdib1M+4cjOHcwkHVOpQ1biK3lGePLn6WGZDfzSBwXkML9PQ/4q/23RUD4h+cQ6ymN1W5cSvv+RJND5scVhFfnh21RpYGm+mXBzpxJzQ2Wb4O+PBXb6fsWQhDxXT1XooPtoOB06v1rMIL/Ewy9qgP9ZgIP/f6o49GI/r2GRmhRTnkyguX3Cu3Hda++nI+dbz6uR+939wO27dkKJ3M/+qgS/40eA16hYpUOvDpoF5OhJ45FLT50J+NPb9cB9IIksL1JzzNHtgK4Gvxk8y//W45z0PodeetqV0PP1Zity624xoWedJUaarzUWqNmBGJFotRY4ialxn5ZeNlCf3iplAuHcMV/ORv6Fo9BXe3tEQN8joyr0PdmfAf/bhmzwXf4T8qp+eEGkuXxuL48+ds4I5FNXARfve8K4ivLIn/VwyCX5mYi+7rPYgP/hExFz9jQ5wCPzRDbpeyWodKM3YtRO71M856zw8bV8C3QMO7XUwx8mU52kr35v2I7+nO3gkdew10I8B+pm3aQr+KjdTT7d+6/ZBdwdJ52Ux1Dvbgm6Eu4YSOeayjkL/H9cycO/2noJff1m2kr8v7x0X0JuummecG/8NWmBT+1TJuTxuz6LzmdHbjqodwsXJ0zYk4k6M3Iz5cbvmbSVauQmf0EDX25sjffsdJ0B5+eCKvQ1JxX7+0b4kQX7XHBFIn7vrZyyAL9qox76T8t44DY2g8/gRKoD+j9ybiFd33WtsSHfcKmL8pnd5nQgp5wjTvBvKXJB18x1O/IPjuOeWn5tQESvWpZxyEFhN2A/om4d8AO8Fv3v3W2Evv4eA877Ojjchydb1NiTioYM3AvdGhvuk0vV8Xtzp7gePYlWWdGDQzsE7M2GWN+I7/lF7N3e0LyA3K9+gL1UvPPEjFyH/TzhXD51V0BPJ9e5iFfSKo/I/gcp0ihx4AUAAA==\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"datetime\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/yXKeUzPcRzH8c9MY46cs5BF1LLcOcYyn1VKjg5+ilRKqRQSJUn5hEgXUspKblZqTBbN9XFP05grOXLLtJqWo9Wcz+9fjz3f75cQ6peLU4KTEDIkH1VutjPd/gZFkIPLf/WtVFT2z4z2vz+Tvj7Mlb1dLIrs26hbLdxom96z6PRlqL6eQ+nTxZ3/pcUom7xm0ymT57H/lIZq7gujkx560O9HeLJ3j0dx+i7q/pZetGs/b/rUclR9LqCM7zaf/yt/lOamBXTsCdR1bahmzDHxP34A1dPchbRjA4ojU33Yd8lEtare6OInvnRnu0XsIzeieHAP9SSrxXT4AD/6XgSqCRdRFvRcwv/3UpRjff3pvBLU7R2ogjwC+N8+hOpnfiAd8AXFDcel7O12GV59FsTOxj6YXUYSipb7qH2sl9FpA0PopihUC66grOodyt8qBKWX33K6sgz14D+oUrzD+DccRWVRGE4nN6H4MCOCu+uYSO5lCkXfR6jjbaLoEsuVtHk0qthrKJ/3W8VfhqGMCVhN155G7dgpmv0RE8quJ42eWryGPvgVhZlzDPvIPFQPGgzDx69jV7MVhcNT1AV2sXS1VRw9di2qvJsoOwas5x+8AmVOUDzddhZ1gNkG9jd8UY4sNdrvcAKtW1HYum5kn1GAquWL0dbvEum0iZvYN29HYapDXWWfRDdaJ9Necagq76C0HLSZ/5aVKCtCFD2wEnVy1xT2H/xQzi43OvHYFvrtDxRu7lvZlxWi6ttstPPHbXTJlFT2vdJRxL1E/XzMdrqH7Q46ZgOq2mqU04ek8T8ajfJx2E56WhXqg93T2ZsFoow6Y3TRyQy6UzuKiLmZ7GuKUTm0GB36OYuunpbNflwWin2vUXeM30WPHrmbzklE1VaDMnDoHv4316L8viKHXnIJtTbfy942GGVmhdGXS3Pp4b9Q7PTMY998GJXpm9Gpjfvoxun57L13ozj/DrXlpALaY9R+uiIZlVtoEfvySlT15QdoF1HMvnT+P/8CpqEma+AFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"inc\",{\"type\":\"ndarray\",\"array\":[\"0\",\"0\",\"1\",\"1\",\"1\",\"0\",\"0\",\"0\",\"1\",\"1\",\"1\",\"0\",\"0\",\"0\",\"0\",\"1\",\"1\",\"1\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"0\",\"0\",\"0\",\"0\",\"0\",\"1\",\"1\",\"0\",\"0\",\"1\",\"1\",\"0\",\"1\",\"0\",\"1\",\"1\",\"1\",\"1\",\"0\",\"0\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"1\",\"0\",\"1\",\"1\",\"1\",\"1\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"0\",\"1\",\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"1\",\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"0\",\"0\",\"1\",\"1\",\"0\",\"1\",\"1\",\"1\",\"0\",\"1\",\"0\",\"1\",\"1\",\"1\",\"0\",\"1\",\"0\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\",\"0\",\"1\",\"1\",\"0\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\",\"0\",\"1\",\"0\",\"1\",\"1\",\"0\",\"1\",\"0\",\"1\",\"1\",\"1\",\"0\",\"1\",\"0\",\"0\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\",\"1\",\"1\",\"0\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\",\"1\",\"0\",\"0\",\"0\",\"0\",\"1\",\"1\",\"1\",\"0\",\"0\",\"0\",\"1\",\"0\",\"1\",\"0\",\"1\",\"0\",\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"1\",\"1\",\"1\"],\"shape\":[188],\"dtype\":\"object\",\"order\":\"little\"}],[\"equity\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/41Ue1SMaRzuahWzZ1SGJGw3yinX1LHlEYUwcglb0Y6VrCZ1sjKpKFuRLiO3cU03HbVtx05s0QUrcmYrZYrUOJuySPW93/uxp1YlO/vH7Pfvvv885/f8nvf5nfN7zvvq6f17KPT+JwozvzeItaJ4V1osnQCK4TVN9/VHWYhNxVRdzmKnwbjQ+wdYXK4QqJwbWPSGPM5L7WIRtmisokFIkd9n+tEtlGLtplmVQRYUxyx7ojwFFGbeme5cDYuu+8eMswwoajuvOU4fw/vbzZYHhHXwfjp8qGj4VlHEgolOHxhNZgGfupgVXQRTJxec/ZESOFeHKJNKCVzlPjDKIHgSlzPhymGCdnFizrTtBEc7L2XeHk9wWFD12d2FIGLPx1duUQS/iOSi/oUEYqOenpSZPOp8cvc1DPXKCELPTd5ScYr3WyJxaEwOI3jlwdJ141goF0ztuGTEYlFJi8HNIBZWwxZq9QyCXs6ravoUfq6ulivjrRb3MVBlzL23t5nBb5V+8xmOQZI44oPnWwayrIGiwpcMfkp+qh4zzMDaaVzUjkUEwr2nHVRzCE6avvF8xjCo8BJb5+gT9Cd7VCmvsdhYlOMp/4aF1OaE+s4u7f7udr2rt2UxGB+wMMSJRW1qrKmhkEXJl+nRagNtXtsX6rdr92jN7lq2spIgxUz1wFZKsOGVd3hRK4Hbns1tskcEwbnV5Us1BN4OjV8JH/O17n5Sm63ChCX4wyAsZ4E1i+wN5rMXj/B64+gDpSJtPsW+c6/2a3O5knErwD+GYPB9wcnzNgTLL09K8K5jUPX+uKw6k8F1VzNnu2MM8mIudqcn8vyc83cnTlIxSK01nu41yEA0rTnxTRWDbkduS0oeA4/NbpLrTQwifEVpwl6+fzbx0J72TwyeDrhcv5VPMOKskB8pJ7DJzb8csoJgVZtJvHMgweYzR+oeSsh/OpM+QbtlDYGPe0mV/xIWS9MkHeuHCJSDokb74ywO1d7wuLOfRXdra3h6HAvzIMaKXcPixrrqmpkl2jz6XkcE9/D46I0vDZlB4Xcuo1J6jkIhmeelv54iNjIwtd6W4kLFs3mG+7TvUDW4ozmGYspORyejJIq86jpDk+cUCKA3MZEDTQvadnWA4ofMTT7XHDn4/poiW5nNYdvqR3ujvTj4fPG1YnkAhzul2dVLjDhEdo4NKXhNwSwol+a3UhSYh/9lOkTh79N2KVJD0fdCGJdbRnH780bN4nv8XB02L+ssCy+i2N0x+VR2Aq9XDn1n4hpIIZBntQRq/4nC+MiCTHcK2ZOfLeI+sYjkQm3sDPj6qv3vZekiXpfR7akJcKHYn6M0nLWCorjF4swJrZ+Zh+ZmcBKPB8Ujf85Oo6h70Lf24VEKp4TdGVlSnreNlVWmGVNErRpv7mDH87r7zs/GHzqVSRGyY+LocC2FxenEQkkhhatmZN35DxQ9OwVvR7X79It2mdTwiaL8qN/KC9q96fqNKs20+n6KeclbgxVPeJ3b/Hxc1ObRW1nWpmfJo6nhnCPuuzl4vOyfcUWbg122xDc8ioO/7cG/m7T5pG59keq2hUNNOixzwnh8bh/Vpd7P4f3d/OIxCTxfwAk2SCV83SJz0Guay2GUWV0fbc/hH0s/5bngBQAA\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"\\u03bb(sma10)_0_0\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WUa1SNaRTHc3JJ6aLGHNJFiaXJFGlCaP6tVBRJ5ZQJKWqsHFHJJYmpSR2VOuV9nvc5LrlUckI1CF0MFSFplNQ6BlFEExOTVMS8H2ZWn/bae699++299i8eJVv8oinuVUzPPBRGEZdm4bQhiELN/kaypYQisOnCy0pnipEtbqesLQX/+QS19DEUoZod6wO6CPSNlrbPqSc4WP3GaqCKoKTu6DjzWgJX7+2aJfcIiq7WSorqCAIPVI3YXU1wc/4+8+RCgrC3zT4RBQRknE1Z7FkC3TVlFxaXETgffKG6WUpwxaQ1J+cCwVELUcxbJcFIueTmq9ND0vq0Kjz+HMGtAbH39qqhPvRqtVaUvCCYwG9xFn8kMA9pmrlDg2JQs+1ynZhCKWMt4ikUwVN7o12+p1gtnnyp0YbCqz92brcdhZB1s/48CudHD8vGOFDUZrpX/jidortr/rxOI4reT7oDAYYUWUcPSBvHD+n/ywkjrrclmFFINLz6gmwpmgILi44toLivE25m4itwdOHdDvlQhBd3ZXHeFEvz5yk3eVBYZe+/5rKQwr3zdEzcbAqyatLhSqGu6/TxHumTKTpMW5bItChMTjmLZD0EDTWxaHlAUPFnxIOsWwSOifpGKyoIvH5L8VdeJAh+Opz7KnA1N2n3spURKPpNlZlSgnivBJ3AJQSSmE32D2cRcHpnlG6GBDYf+Df1wwlkiRdTP/Zw0FtgmfVdB4ewOhdb72YOxTNeH7So52AedqJ+z1MOx68PS77aycF3WUpozAcOygOh20w/c/hhuPSMk0jYc/LC400jCKa9vGG9ZhSB2j2nfdWCXburQz1/kIPphCAMCnEvGtcF6PRzyNmTdensFw6Z3oa7/EcK89z/Q3HCgCCnq83P0JIgTxmdNHoBwTbbxxm7lhNoRrtd/LKBwOGnGUv64whEjdWknxuae/SyVx+aK4bu8Yjc2zCgiUAedebwdpXApe9XudYTgshpac8dOwjCmz18ygcJZnu1Hin/hsLH/eqtSBMKGLukGk+lMG+Y0tAu7NMi49KwB64UN7prTjqspBBpfuhhURQrbayuuKVSXPl71PtOJYW+31NN2zIK8Rsi236HwmPcw+byJ1Tg8rpD1UfxzIQ7YyfmMbrx5duIGTyyY5umxHny0JPmpfZv5TEocY3L53h45r8z2pjDQ2WbGPX8Go/IxTEVrY95xLc4yizUGMZL7e7YTWMw7KJMfQVD0Z40lcFuhtVWriLbPAY1jyP2t+8x+JsXlNj3MJzs9HOwsVBAuaV0ospBAav3fyVd9lDA02DsykB/BW6mtKpyVisw4BhafM5XAQ3PmrOT3RXI9P9od3euAvndkiVaOgqoe6rp7utmyHhkk23UxFCa6JOSdo1BffnhRbmXGbyz23UKchkkuW2TktIZWgsN8m32MNyiXtfN4hi2VuVOiIhhGOE7J756L4OT3iTnnxMY9i4bpd0n2KP+86+xfj5veTiDw/6KoHIpwyJmsmZmMINjRnkUL2HwMjfe+QkMO+8iRDqdodddtz9tIsOqYsO846MZ9F/efyUby2C/v7fSxIDBhfn9nqXBcF7jhgQihvT1x2ILBI7Kr8HSU7083LMl9ze/51FjPCVE/oxHS2FiWE8tD8dv5WKNUh4XdAZvx2XyaCwUHlskj20NxXO11/FYu+BtwBsJjwabgM9JLjyKdOytns3hMS7aqaVnKg/5Fr1108x4iNbtVq/S5VFxZJZ/0jAeDkairvxu4a6SHHVk7RTn5OHczAcU6f8sqttRTqEdKQ5SFFCUTpJWNh+mWH5pcP6oNApr0rJx7V4Kt3OHvMN/odB6f15eGyf8Kcm74/XJFCHWpSNnp1P8C8ypq5LgBQAA\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"\\u03bb(sma30)_1_0\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0WTeTSWWRzHyzqEGuRlireot0ExNZVKyzdvGFFpcUqUl5RiKkXZTqERerWoyb3PjaYcSZQWWqWFoci+lNJiyTJJmYbQKOaeOZ3TX9/zPL/1fu73Dm9pyJ83gWK7h2p5+jgK1/mSzA0mFHodLmqKphRRi7XnvJ9METBL6anBFIqciLkyP/7dUzjbdi2PKz+1T7PgKvqav9rkdnWzGYXd95n+WuYUHfmDyX0SCmvTl2mTx1Mo/HA9aMFoiorBXnOpFoWjUHD1mDLFmznSSepKvO6Me2XyML5PnePK3C8E9vceZhh/IljfeK5kcy/BHYf8wGHdBPUhu1fdfEewTGmHEWkneHw6ZPEvTQSeUzvWvm0giHJRER/nOkl1jfOe5wTblsU/La8nGKrZXOb1iiB+zcL8Xp7vZixKCmkmcBylNieVa4iVLPlyC0GCU/rZ9jYCSVVkYlgHgWpy2e0/uwjEaVKFAz0EBoK/VNRH4Pv69baSfoLANiNtiwEC0yM6Jb6DBEmvrRrtVCn2CPoSLV0KTYVojBdTfGw8I37OOVTnxrpNM6YozbyWdJ/zf/OVU0roA4OzkygGajWUSiXf/luOsDJz4NpVVSXbwvOXWL9VG8771Lc96JmgTyG/fjflA+f5YuzJdIkaxQgPj7dZihS7hss7L3JeN/wLfeP5eZzMA3UlnEd03IuahEqCfVkNxRMLCBLfmxd23uKcmhfM8rpM0BGmmXcljUDhpmtu8EkC3dbq/rIEzjVs46scOYHdOr8ut0gCD3ajwziIoM9r9kqzLQQp84sNVdwIbERGtuGLCSryP1mmLCQoqDf1ybMioOXz6mdaEORqFgbLJASagSl7E8YRnNZpX5IxliBowCt1lD6f90eTKFaP17ukH5kpIjiguUO1leuN6UXb/jYgUIuwPnFmDEGrm/jJANcP69eGrDciMPG42PFs8rd5B0Lz0pbbEEQ6/6bl4cTjpYNyu9UE+7VGz18q4/d/P6cxy5eg5jv7+vBggoiYL5+K93PfaDvNMDnM+dgeMb3FCLrkjeEmqdwfraHPC7IIGsd82nnnPoF2eWT/hmoCWaKGXSD3T6O+JOgg92l9XJjKshEUz2Kaw7z5vcfdNryjOZXCpO525opF/J2NbpIMrKZI3qirEOxHcX5oWbJKOMXBfpG6K+H+qP1sk55BYYp9zi9yKcQlcxJtaygS6lKTr7yhuKb9QXPsEIXMbfe9WyIBVx0eZKnNEHDK8ZY0YLmAhbG90qXbBbhj87zAYwKOHFL7VyNLwOwnhVsnVwmIWan+6ky7gDavVSeUP/N6lxt/+WozWEUMWcw1Y0jTn/rFCQwJM7ZUH1rB/n9Ptd4M8w79rHzCn+Ehdc4bv5chsmJPWvsBBt0N0dn6xxlmRJ2PuneawdMiN3VkBoPP9HOdj67wft3Kyx1vMkSUNm0tymMoFSUXVhQxtFh6X3hZzCB/LF3jWcYwV3V/n18Vg/3vbR3/cP0pzESptZKh+6611KacYbe011BcyJAV7rOomve7puCz5H4mg1m/w9FZfG6TpdxGfJih8ZLOOctwHldWjGnYxevsUo09tjM0ZyXpWWzk+24yfmflzpATFzdY4sxAfTdNmbiI72XYqWhpzXC0RdEpdArDhwLmlG/M0GPPXC6LGPR+tU9wUWeoTQ841DckIDt2aa5zt4CCExPdUzoFHPbOti9tFjBNPtZVVicg3mfu9UdFApICJo30yhFgK1Ypy0sTsLP0lPsoKiBDObGhNVqAN5ZPzwgWUJZeHZXoK2CmzqrHB90FVF5w62bOAtblDDcat0iANXvhFGIlYJ/npU3Z5gJkkCdoiAWstvrxfICOgMXmzoZfFAWIg459dO+j+A+/j/z+4AUAAA==\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"ohlc_low\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/12Te1RNaRjG3Srh5MglDYoykVXRWqU0E49SWE4il+i4RDcdNKgxXZiOXLrRcWl/397HpZVVmcNgiVNionKcQRLViBiqU7qwltLFJdXsNWuOvdb89Vvv973Pu/d+nncb+zZ3VRcSOKhqIhIuEbzwafPpCCWYkurUfuYqQe8sj+jOEgK3P+XvQlQEx7jh684cJEj6YGAfbEkw4Ld67Wl/QZ9XdmasVSlBQ2fXHvsyQR84JTJErBR05g0OJcE+wvPGbU+LvHmdYMXgsia7DIKY9bcDqxUE2+aZ6zrSCQyPrdY2qwQubLSRLc4S5ptO9GlwLSfY5Nga8PY1wYFVhpbpPKcZrVm29wVBhO/RZ49qCPort5RtfkVwdM38ku46gqt71h/K4LlEbOyWXS/UjESV0/SG4LZy8JD9LwkeXlftC60mUGJU6rO3/PuzOzzNPhLIdLqI0k8EUW8sTB16CGwVo0tlfQSndC613kYUe9nxNiZjKESDDmGKJf02Xz9HX6dZbRV1tREY/5eH/vv0vurz0Oegvz//l79/SJzgY15Hb9Wi3YJ/23s7M9Tv0qGo9X6Qt4j5xvv9De9/VTIorJu762QGg6WVYUanyhiEjbw2KOgOg4B20cH4eww81MXJ1ysYXJnVkj61nIGV7Gx5/GsGmcUDk261MhC7256Y0cTg44C/aVC7wEnScrFJPYPpMT+ntb9kEGkfIPe+JfD/uqz4E/kX+xgc9/subo0hwdwnj5VnRxOUr1IpZpsRJIt2GjXyzHe6F9Fmzvsk/0GZNYGgUWr5tIdn+4aAmA0WBNYbL7U+tyPQ1NiGFbvwutjic8s9CPYt22+yUcLfP+xL8eb39aDJ2LlLAwmkRTdqc2UElUMX1sRHE8gTez/f5/d7mqnE2TqNIMFLYVvAEbxPqY23zuZ9bYx9ocklqJ3weVdhEb93j/Z9Cqrg9/vkCO8ofn9qx9v8criboCY1ztB3OMXzxPq4YD731JuTCkWOFNbVNy/6LaBYO7bOpsefIjNkzKDorRQX+n0zDeMpDn8yG7aWUFRUffVQnaewRcKyl39QWJa6nfSqpGCqszOvtFCoTdtFE/spAqW7bxeYsbi2WJtr7MwiY0mBZ+RyFvOTuj2X/sRiHba4Rx1noThi/GVELos5T+9ut3vCInHFsFdZTSzebF6pNPjK61flN8tMObjI+x1+nMHh3HjHXgk4MM7hFUf8uH//p6pgDtvcPV21QRw6NZF58g0CG9WmN4aHC3QXr826b8uhTfO7mW4IBy1NtjowlcMonfNl2WIOUXeyzXfGcjBY6ZqgkXOYL57sGbafAysLtf9+AYfBVVW5XSs45CVNtxk5k0NFTqvFZ3MOQ3Xnds4kLBZadgzMvMviUY61XFrE4p2mMdrrgnCur9NlGWmJrSxmp3SXWIzm4Co+bmD3mEWkZNzH/myh/0HOurrCUBbLHY5sjN7EQhmzy6fYjsUAnblTZz3FVklSgeYDhY+DtqjGiIU2h/GYLGLhKB5yr22iwHzq5H2Bz0PfHyNtUc9pphj5IXZW+DM+7ySvET0RFNPFu1PU4QIfqrcMDPCl+Frvx6xOprhMc4buCBbOd0il0X1OFJslX+KS5wm1vq+lcsYXTzehDnG4YeiioPgHxKqtJeAFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}],[\"ohlc_high\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2WSfzjVdxTH6aaSiVBqiSbZuMKauTyod/n14JKG0rqFahQlS4naolbquUoi38/nc2WS5me/UJGo3McthZISXZVqYYmlFGlL+/4x88f+ej2f83zO+5zzPuebBwsW6yYQ3KqySM0IJ9h50GThuhACFVvFfrOlBEHN5zrlzgTRdmNbp88lqEhwDI6wIHirsHf93oxArdU9z5KnfneAuoDnstmXmp6ZE7hNPhU1SUjQLR/OHjQlcDB7lGfxBcGYzy9sWzCF4PbwgNB5EoEXrTmXqkbgEpk445gWn3dC0pitQrCpxcuv8iMH9yvXC42HOKx6kl+3boBDlYd8i0o/B2VcjH95L/df3gi14r3vrztE4PHry7+sn/L1QvIC9x4hwGBH/cD20fm4G1GOVssIVurPLrtrReA79JN9nw2BMnL3Jh0HgpyuqRU63xHUpXrKF/Dz9vU4OnQbEJxRqxINiAmkRTcve0lGdUbiHy5mm3lZEpSflIdalxLsszGPOn6dYJqpn1rOO4JxrtQ9w48gsrgnLZ3X9853KNzoRSDMkl51dSHw7C7YvlPE60pmHZXzdV/865+Vhsjcg+erO3eC15vweQ4v1VV5P5Wd196aTOP7uXA55zXv50ODzAJTdQKNoKCXJQKCrarSntO8X2VRivCUTg5i4RY90zYOiUkP76Y3cthd0n5jTg2HjD+Fip6LHCKfLbBbfZZD9w7N6uI8DmPKl1fGZnLQ62h635DOYc+OHx5XSDm4rYx4tWIXhyBW1m28jcPgans/8/UccubfmDluBYdF+oau8Z4cbsuHrHIWcqhRmoVViziQW05KW0sOlZqK2GBTDppbcnamz+Iw/bmlfK03hzbvPu/+UA5+goYuiywOuavKJlTyfe8aqzg0md9/6/3FnzyaRuMj1BnoNdHhfRH5Psms1Bu9y5G8xQcs2C8Tyf/uxUjvyPF3hqN7Opls8EJcPvqentnvJ5byfk854KncSnAsKiZifRW/v/ePtrTdISgjNm5F+hSyuM3e1RYU7+7G3zdwp/hWuy40OYbijxpDZd4Sip9XnPVvWUjhbGSxRrCBIlo8dfDTbxQBlv7DUy5R5MSpJP3dTpEgjrjbWsJgq5rYcaiL4el5rxmRWgwbnJztrq1hmKd6xe3NQYaiuORaURpDI3k8LPlahv3iIW29UBninKheVpQMPtpbjZAiwxGxT2/P5gwIf28PM1iTAXXF0sYjhhnoym2w01TKIHzzcl+5F/9fd/LyoEAZriU9UZ5YKcOH+aHFp/1lmOBz/dRsTxlSAwdt6u1lyO9bKtaYJIPAR0UrsY8hpc0qy6CZ4cX5B4EFcgaNe6v7rMfL0ED0g6+0MITZ5PfcLGbI61db4lXOkFD/dGNtNUO9frbidi1DW26sxKaBQdrsHBjC03H83sGIOwzuaZ3db3ha75g9tqORof+yg/OiWwwxzgMzjRQMJfFhLk283vkxYd5XTzGYv/c4bHeM98tKusgomeHJGd18q/hR/R+dJrasqWJoyS2u4qIZ9EKNe0UShoqkpOE6XwYSHjp3jgvf18wegZUDw+HnAvH2uQyva5hYbszw1p0FnNVnmLrBPT1gIsO9guiDg58oSvf7VPr2U9TI5khyeiiS15a61z+jmCc1WB7cQpES5njhZi3F0egvtVZXULgajWuozqPYXJ8l0SYUhWoZ7R2JFGuxxKYwlqKhoGlPRjiFra5/8wEJRePJFf3Ml2JlharhLBcKB/ZQHCei2B1yJrRUSBEMafpnRhTLRF8VRetSeAp9Z34UUAjSZrhyPP8BJbR9++AFAAA=\"},\"shape\":[188],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3394\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3395\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3390\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"equity\"},\"line_color\":\"#1f77b4\",\"line_width\":1.5}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3391\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"equity\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1,\"line_width\":1.5}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3392\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"equity\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2,\"line_width\":1.5}}}}],\"tooltips\":[[\"Date\",\"@datetime{%c}\"],[\"Equity\",\"@equity{+0,0.[000]%}\"]],\"formatters\":{\"type\":\"map\",\"entries\":[[\"@datetime\",\"datetime\"]]},\"sort_by\":null,\"mode\":\"vline\",\"point_policy\":\"follow_mouse\"}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3631\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p3495\",\"attributes\":{\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3492\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3331\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3332\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3333\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/5NmYGAwBeJQIO4B4t1ADAA3Rx88FAAAAA==\"},\"shape\":[5],\"dtype\":\"int32\",\"order\":\"little\"}],[\"datetime\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2NgOLA6NbDSiYHhwK/fMSDa4ZZwLph/S68NRDOsCppX6QQARDe4fCgAAAA=\"},\"shape\":[5],\"dtype\":\"float64\",\"order\":\"little\"}],[\"size\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/9vz//9/BwYGhoNA2h5KAwDz1kCgFAAAAA==\"},\"shape\":[5],\"dtype\":\"int32\",\"order\":\"little\"}],[\"returns_positive\",{\"type\":\"ndarray\",\"array\":[\"0\",\"0\",\"0\",\"1\",\"1\"],\"shape\":[5],\"dtype\":\"object\",\"order\":\"little\"}],[\"returns\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wEoANf/K4TumK4/or8E6o6iNNKgv/RscEFV+nO/uxoGFVOnuT9Ch/+5M5upP/+Qo70oAAAA\"},\"shape\":[5],\"dtype\":\"float64\",\"order\":\"little\"}],[\"marker_size\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2NgAAETh7NnQEDFAcxlUMCgAd7gEagoAAAA\"},\"shape\":[5],\"dtype\":\"float64\",\"order\":\"little\"}],[\"lines\",[[6,27],[27,53],[53,85],[85,140],[140,187]]],[\"triangles\",{\"type\":\"ndarray\",\"array\":[\"inverted_triangle\",\"triangle\",\"inverted_triangle\",\"triangle\",\"inverted_triangle\"],\"shape\":[5],\"dtype\":\"object\",\"order\":\"little\"}],[\"position_lines_xs\",[[6,27],[27,53],[53,85],[85,140],[140,187]]],[\"position_lines_ys\",[[1456.73874,1502.741016],[1502.741016,1459.294422],[1459.294422,1460.572263],[1460.572263,1613.082672],[1613.082672,1526.1303959999998]]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3493\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3494\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3489\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"returns\"},\"size\":{\"type\":\"field\",\"field\":\"marker_size\"},\"fill_color\":{\"type\":\"field\",\"field\":\"returns_positive\",\"transform\":{\"type\":\"object\",\"name\":\"CategoricalColorMapper\",\"id\":\"p3335\",\"attributes\":{\"palette\":[\"tomato\",\"lime\"],\"factors\":[\"0\",\"1\"]}}},\"marker\":{\"type\":\"field\",\"field\":\"triangles\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3490\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"returns\"},\"size\":{\"type\":\"field\",\"field\":\"marker_size\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"field\",\"field\":\"returns_positive\",\"transform\":{\"id\":\"p3335\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1},\"marker\":{\"type\":\"field\",\"field\":\"triangles\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3491\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"returns\"},\"size\":{\"type\":\"field\",\"field\":\"marker_size\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"field\",\"field\":\"returns_positive\",\"transform\":{\"id\":\"p3335\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2},\"marker\":{\"type\":\"field\",\"field\":\"triangles\"}}}}}],\"tooltips\":[[\"Date\",\"@datetime{%c}\"],[\"Size\",\"@size{0,0}\"],[\"P/L\",\"@returns{+0.[000]%}\"]],\"formatters\":{\"type\":\"map\",\"entries\":[[\"@datetime\",\"datetime\"]]},\"sort_by\":null,\"point_policy\":\"follow_mouse\"}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3632\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p3617\",\"attributes\":{\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3583\",\"attributes\":{\"data_source\":{\"id\":\"p3328\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3584\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3585\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3580\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"value\",\"value\":0.8},\"bottom\":{\"type\":\"field\",\"field\":\"Close\"},\"top\":{\"type\":\"field\",\"field\":\"Open\"},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"type\":\"object\",\"name\":\"CategoricalColorMapper\",\"id\":\"p3334\",\"attributes\":{\"palette\":[\"tomato\",\"lime\"],\"factors\":[\"0\",\"1\"]}}}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3581\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"value\",\"value\":0.8},\"bottom\":{\"type\":\"field\",\"field\":\"Close\"},\"top\":{\"type\":\"field\",\"field\":\"Open\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3582\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"value\",\"value\":0.8},\"bottom\":{\"type\":\"field\",\"field\":\"Close\"},\"top\":{\"type\":\"field\",\"field\":\"Open\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"tooltips\":[[\"Date\",\"@datetime{%c}\"],[\"x, y\",\"$index\\u00a0\\u00a0\\u00a0\\u00a0$y{0,0.0[0000]}\"],[\"OHLC\",\"@Open{0,0.0[0000]}\\u00a0\\u00a0\\u00a0\\u00a0@High{0,0.0[0000]}\\u00a0\\u00a0\\u00a0\\u00a0@Low{0,0.0[0000]}\\u00a0\\u00a0\\u00a0\\u00a0@Close{0,0.0[0000]}\"],[\"Volume\",\"@Volume{0,0}\"],[\"\\u03bb(sma10)\",\"@{\\u03bb(sma10)_0_0}{0,0.0[0000]}\"],[\"\\u03bb(sma30)\",\"@{\\u03bb(sma30)_1_0}{0,0.0[0000]}\"]],\"formatters\":{\"type\":\"map\",\"entries\":[[\"@datetime\",\"datetime\"]]},\"sort_by\":null,\"mode\":\"vline\",\"point_policy\":\"follow_mouse\"}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3633\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"HoverTool\",\"id\":\"p3542\",\"attributes\":{\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3539\",\"attributes\":{\"data_source\":{\"id\":\"p3328\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3540\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3541\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3536\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"value\",\"value\":0.8},\"top\":{\"type\":\"field\",\"field\":\"Volume\"},\"line_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"hatch_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3537\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"value\",\"value\":0.8},\"top\":{\"type\":\"field\",\"field\":\"Volume\"},\"line_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3538\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"value\",\"value\":0.8},\"top\":{\"type\":\"field\",\"field\":\"Volume\"},\"line_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3334\"}},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"tooltips\":[[\"Date\",\"@datetime{%c}\"],[\"Volume\",\"@Volume{0.00 a}\"]],\"formatters\":{\"type\":\"map\",\"entries\":[[\"@datetime\",\"datetime\"]]},\"sort_by\":null,\"mode\":\"vline\",\"point_policy\":\"follow_mouse\"}}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p3634\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"CrosshairTool\",\"id\":\"p3621\",\"attributes\":{\"overlay\":[{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3619\",\"attributes\":{\"line_dash\":[2,4]}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3620\",\"attributes\":{\"dimension\":\"height\",\"line_dash\":[2,4]}}],\"line_color\":\"lightgrey\"}},{\"id\":\"p3621\"},{\"id\":\"p3621\"},{\"id\":\"p3621\"}]}}],\"logo\":null,\"active_drag\":{\"id\":\"p3622\"},\"active_scroll\":{\"id\":\"p3623\"}}},\"toolbar_location\":\"right\",\"children\":[[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3339\",\"attributes\":{\"width\":null,\"height\":100,\"sizing_mode\":\"stretch_width\",\"x_range\":{\"type\":\"object\",\"name\":\"Range1d\",\"id\":\"p3291\",\"attributes\":{\"js_property_callbacks\":{\"type\":\"map\",\"entries\":[[\"change:end\",[{\"type\":\"object\",\"name\":\"CustomJS\",\"id\":\"p3618\",\"attributes\":{\"args\":{\"type\":\"map\",\"entries\":[[\"ohlc_range\",{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3294\"}],[\"source\",{\"id\":\"p3328\"}],[\"volume_range\",{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3499\"}]]},\"code\":\"if (!window._bt_scale_range) {\\n window._bt_scale_range = function (range, min, max, pad) {\\n \\\"use strict\\\";\\n if (min !== Infinity && max !== -Infinity) {\\n pad = pad ? (max - min) * .03 : 0;\\n range.start = min - pad;\\n range.end = max + pad;\\n } else console.error('backtesting: scale range error:', min, max, range);\\n };\\n}\\n\\nclearTimeout(window._bt_autoscale_timeout);\\n\\nwindow._bt_autoscale_timeout = setTimeout(function () {\\n /**\\n * @variable cb_obj `fig_ohlc.x_range`.\\n * @variable source `ColumnDataSource`\\n * @variable ohlc_range `fig_ohlc.y_range`.\\n * @variable volume_range `fig_volume.y_range`.\\n */\\n \\\"use strict\\\";\\n\\n let i = Math.max(Math.floor(cb_obj.start), 0),\\n j = Math.min(Math.ceil(cb_obj.end), source.data['ohlc_high'].length);\\n\\n let max = Math.max.apply(null, source.data['ohlc_high'].slice(i, j)),\\n min = Math.min.apply(null, source.data['ohlc_low'].slice(i, j));\\n _bt_scale_range(ohlc_range, min, max, true);\\n\\n if (volume_range) {\\n max = Math.max.apply(null, source.data['Volume'].slice(i, j));\\n _bt_scale_range(volume_range, 0, max * 1.03, false);\\n }\\n\\n}, 50);\\n\"}}]]]},\"end\":187,\"bounds\":[-9.35,196.35],\"min_interval\":10}},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3341\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3348\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3349\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3346\"},\"outline_line_color\":\"#666666\",\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3384\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3375\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3376\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3377\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/y3U+TeUYRjG8UmyJyFbsiUhISRJkuxJSJJkz5YkSZI0JNkJSZJkDyEk6Z/r2znXnPP5Zc7M+z7PvVwGg8FwACY4CFMcghnMYQFLWMEaNjgMWxyBHY7CHg5wxDE4wRkucIUbjsMdJ+ABT3jBGz44CV+cgh9Owx8BCMQZBOEsghGCUJxDGMIRgfOIxAVE4SKicQkxuIxYXEEcriIe15CARCQhGSlIRRquIx03kIGbyEQWsnELObiNXNxBHu4iH/dQgPsoRBGKUYJSlKEcD1CBSlShGjV4iFo8Qh0eox5P0ICnaMQzNOE5mvECLXiJVrxCG17DiHZ04A068RZdeIdu9KAXfejHAAYxhGG8xwhGMYYPGMdHTOATJvEZU/iCaXzFDL5hFnOYxwIWsYRlfMcKVrGGH1jHBjbxE1vYxg5+YRe/sYc/2Mdf2dd3e/rNrv6zo2ds6Zmbese63rmmM6zoTMs646LOPK87zOpOM7rjtO48pRpMqiYTqtG4ajamGo6opsOq8aBq3q8e9Kon3epRl3rWqR52qKdG9bhNPW/VDLRoJpo1I02amUbNUINmql4zVqeZq9UM1mgmqzSjFZrZcs1wqWa6WDNeqJkv0A7kayfytCO52pkc7VC2dipTO5ahnUvXDqZpJ1O0o0na2QTtcLx2Ok47Hqudj1EGRCsTopQRkcqMCGVImDIlVBkTrMwJUgYFKpP8lVF+yixfZZiPMs1LGeehzHNXBropE12UkU7KTEdlqL0y1U4Za6vMtVEGWymTLZTRZspsU2W4iTL9/+cfw4a7rOAFAAA=\"},\"shape\":[376],\"dtype\":\"int32\",\"order\":\"little\"}],[\"equity_dd\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/+2WazSVWRjHOWiizqwTUpJq3IoWXcVq6J+iUkkX1aDMaTppQixNOkLRoORy0u10lVtWjLEaaiiXalJaBtGhhNaIphLe/e63ZjEhzZkP77wf5sv0eewvv/U8+9nPXuv5r/3sR0Pj70Wh8R8pSflWFGFC8aYgL3AcKAZX1d/VHGbhoedBVcUstovG+N/dx+JiibjatpZFt+xhZkIHi4AFo5W1EoqsHr33Dv4UqzfMKPU1pDhi3BXqLKbQd01x5CpYdNw9opMqoqhsv2I9dZSQ32KmwjugVcjH876y9mtlLgsmLKlvOI4F3KrCl3UQTJ6Yffp7SmBbLiuMLSCwV7hBO5ngUWT6uEsHCVo8YtKnbCU43H4h5eZYgoPiso+OdgTBu96/cAgl+MlIYdQ7n8BDu6srfrpAPk/GntqBbjmB/5mJm0pOCPkWSa3q4gIIXjixdM0YFoXzJrde0GaxIL9RdN2XhcmgoUo1jaCbcymbOkm4l7cVhVEmC3sYVCfPvrO7gcEvpZ5zGY5BrEfwO+fXDOSpfbk5zxn8EPdYNWqQganNmNBtCwgku09aVc8iOK73yvkJw6DExcM0XZOgN86prPAKi/W56c6Kr1gEmh1T3dqhrt/tjjc15iz6o7zny2xYVCZE6GlJWOR/nhSmEqn12jpfs0VdR1N2x5LlpQTx+tX3zAMJ1r1wDcptInDYtbFZ/oDAL6O8eHEbgatV3ReSh4LNn49tNlfqsgS/iQLS55mySFtnMHPhkBCvE7avwEitT5777Mu9al0uJd/w9gon6H+bffysGcHSixOiXasYlL09Ki9PYXDVXt/W4giDzPDznUkxgn/W2dvjJ1QzSKjUmerSz8BoSkPMqzIGndbcpvhMBk4bHaRX6xkEuxslSrqF/dMxB3a1fGDwuM/u6o0sgiFbpeJQMYFZRtZF2TKCFc26UbY+BBtPHaq6LyX/xOn2iFuMKwjcHPPLvBaxWJwobV07QFDYb1RneZTFgcprTrf2suhsagpKimRh4MuYsKtYXFtTXjE9X61Hz8tgvy6BD165U9k0Cs8zyaWBZyiU0jkummspIkJ8EmrMKc6VPJmjtUf9Dqv7tzWEU0zabm2jHUuRWV6lpfuUAt70OsZzoIm+Wy73UXyXssHtijUH95/j5cvTOGxZ+WB3mAsHt8++VC715nCrIK18kTaHkPbRsuyXFMy84sCsJopsg6A/9AYovNyaL4S0UfQ8k0RmFFHc/Li+beEd4V6eDUvai4JyKXa2TjyRFi3EFw58o2vvQyFWpDb6qPtETlRIdoojhfzRj4aRH1iEcP5mFiLBvmz5a1GSkRCX3Onc5m1HsTe9UGvGMoq8RsNTx9T59J3arvvFCtzvMfT7zESKqns9q+8fprCJ3pmcGij4zSPkpYk6FKErxhpYWQh+/rztk7EHTqRQyLaNHx6spDA8GZMjzaGwbxtac/YdRdd28ethdT09w+wm1H6gKD7sufycum78fl1125SaXoo5cZv9lI+EOIe5WTiv1qO7tKhZw1igntasQ447OTg97512Sa2DRZrUPSiUg5f5/j/r1fokbH6W4LCJQ0USjNMDBD61DO1Q7eXw9nZW3qhowZ/NidcFSgW7UW6lUT+bwzCzsibMUtB/hP9P8n2A7w88+b7B95v/Sv7/HuEIR/hv8nPxp5KfqzU+cR7/C95iQxLACwAA\"},\"shape\":[376],\"dtype\":\"float64\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3385\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3386\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Patch\",\"id\":\"p3381\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"equity_dd\"},\"line_color\":\"#ffcb66\",\"fill_color\":\"#ffffea\"}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Patch\",\"id\":\"p3382\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"equity_dd\"},\"line_color\":\"#ffcb66\",\"line_alpha\":0.1,\"fill_color\":\"#ffffea\",\"fill_alpha\":0.1,\"hatch_alpha\":0.1}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Patch\",\"id\":\"p3383\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"equity_dd\"},\"line_color\":\"#ffcb66\",\"line_alpha\":0.2,\"fill_color\":\"#ffffea\",\"fill_alpha\":0.2,\"hatch_alpha\":0.2}}}},{\"id\":\"p3393\"},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3404\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3398\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3399\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3400\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3405\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3406\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3401\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":124},\"y\":{\"type\":\"value\",\"value\":1.10089823425672},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"fill_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"cyan\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3402\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":124},\"y\":{\"type\":\"value\",\"value\":1.10089823425672},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3403\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":124},\"y\":{\"type\":\"value\",\"value\":1.10089823425672},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"cyan\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3415\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3409\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3410\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3411\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3416\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3417\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3412\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":187},\"y\":{\"type\":\"value\",\"value\":1.0716455403443201},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"blue\"},\"fill_color\":{\"type\":\"value\",\"value\":\"blue\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"blue\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3413\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":187},\"y\":{\"type\":\"value\",\"value\":1.0716455403443201},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"blue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"blue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"blue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3414\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":187},\"y\":{\"type\":\"value\",\"value\":1.0716455403443201},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"blue\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"blue\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"blue\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3425\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3419\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3420\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3421\"},\"data\":{\"type\":\"map\"}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3426\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3427\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3422\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":87},\"y\":{\"type\":\"value\",\"value\":0.9219417024467199},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"red\"},\"fill_color\":{\"type\":\"value\",\"value\":\"red\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"red\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3423\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":87},\"y\":{\"type\":\"value\",\"value\":0.9219417024467199},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"red\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"red\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"red\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Scatter\",\"id\":\"p3424\",\"attributes\":{\"x\":{\"type\":\"value\",\"value\":87},\"y\":{\"type\":\"value\",\"value\":0.9219417024467199},\"size\":{\"type\":\"value\",\"value\":8},\"line_color\":{\"type\":\"value\",\"value\":\"red\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"red\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"red\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3435\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3429\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3430\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3431\"},\"data\":{\"type\":\"map\",\"entries\":[[\"x\",[14,113.58662851039456]]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3436\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3437\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3432\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"value\",\"value\":1.0249557235936},\"line_color\":\"red\",\"line_width\":2}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3433\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"value\",\"value\":1.0249557235936},\"line_color\":\"red\",\"line_alpha\":0.1,\"line_width\":2}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3434\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"x\"},\"y\":{\"type\":\"value\",\"value\":1.0249557235936},\"line_color\":\"red\",\"line_alpha\":0.2,\"line_width\":2}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3347\",\"attributes\":{\"tools\":[{\"id\":\"p3360\"},{\"id\":\"p3361\"},{\"id\":\"p3362\"},{\"id\":\"p3363\"},{\"id\":\"p3371\"},{\"id\":\"p3372\"},{\"id\":\"p3373\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3374\"},{\"id\":\"p3396\"},{\"id\":\"p3621\"}],\"active_drag\":{\"id\":\"p3360\"},\"active_scroll\":{\"id\":\"p3361\"}}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3355\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3356\",\"attributes\":{\"desired_num_ticks\":3,\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"NumeralTickFormatter\",\"id\":\"p3397\",\"attributes\":{\"format\":\"0,0.[00]%\"}},\"axis_label\":\"Equity\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3358\"},\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3350\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3351\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3352\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3353\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3354\",\"attributes\":{\"axis\":{\"id\":\"p3350\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3359\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p3355\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p3407\",\"attributes\":{\"location\":\"top_left\",\"border_line_color\":\"#333333\",\"background_fill_alpha\":0.9,\"click_policy\":\"hide\",\"label_text_font_size\":\"8pt\",\"margin\":0,\"padding\":5,\"spacing\":0,\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3408\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Peak (110%)\"},\"renderers\":[{\"id\":\"p3404\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3418\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Final (107%)\"},\"renderers\":[{\"id\":\"p3415\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3428\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Max Drawdown (-10.1%)\"},\"renderers\":[{\"id\":\"p3425\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3438\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Max Dd Dur. (155 days)\"},\"renderers\":[{\"id\":\"p3435\"}]}}]}}],\"min_border_top\":3,\"min_border_bottom\":6,\"min_border_left\":0,\"min_border_right\":10}},0,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3439\",\"attributes\":{\"width\":null,\"height\":80,\"sizing_mode\":\"stretch_width\",\"x_range\":{\"id\":\"p3291\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p3441\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3448\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3449\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3446\"},\"outline_line_color\":\"#666666\",\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3483\",\"attributes\":{\"data_source\":{\"id\":\"p3331\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3484\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3485\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"MultiLine\",\"id\":\"p3480\",\"attributes\":{\"xs\":{\"type\":\"field\",\"field\":\"lines\"},\"ys\":{\"type\":\"field\",\"field\":\"returns\",\"transform\":{\"type\":\"object\",\"name\":\"CustomJSTransform\",\"id\":\"p3476\",\"attributes\":{\"v_func\":\"return [...xs].map(i => [0, i]);\"}}},\"line_color\":{\"type\":\"value\",\"value\":\"#999\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"MultiLine\",\"id\":\"p3481\",\"attributes\":{\"xs\":{\"type\":\"field\",\"field\":\"lines\"},\"ys\":{\"type\":\"field\",\"field\":\"returns\",\"transform\":{\"id\":\"p3476\"}},\"line_color\":{\"type\":\"value\",\"value\":\"#999\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"MultiLine\",\"id\":\"p3482\",\"attributes\":{\"xs\":{\"type\":\"field\",\"field\":\"lines\"},\"ys\":{\"type\":\"field\",\"field\":\"returns\",\"transform\":{\"id\":\"p3476\"}},\"line_color\":{\"type\":\"value\",\"value\":\"#999\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"id\":\"p3492\"}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3447\",\"attributes\":{\"tools\":[{\"id\":\"p3460\"},{\"id\":\"p3461\"},{\"id\":\"p3462\"},{\"id\":\"p3463\"},{\"id\":\"p3471\"},{\"id\":\"p3472\"},{\"id\":\"p3473\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3474\"},{\"id\":\"p3495\"},{\"id\":\"p3621\"}],\"active_drag\":{\"id\":\"p3460\"},\"active_scroll\":{\"id\":\"p3461\"}}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3455\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3456\",\"attributes\":{\"desired_num_ticks\":3,\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"NumeralTickFormatter\",\"id\":\"p3496\",\"attributes\":{\"format\":\"0.[00]%\"}},\"axis_label\":\"Profit / Loss\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3458\"},\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3450\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3451\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3452\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3453\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3454\",\"attributes\":{\"axis\":{\"id\":\"p3450\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3459\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p3455\"}}},{\"type\":\"object\",\"name\":\"Span\",\"id\":\"p3475\",\"attributes\":{\"level\":\"underlay\",\"location\":0,\"line_color\":\"#666666\",\"line_dash\":[6]}}],\"min_border_top\":3,\"min_border_bottom\":6,\"min_border_left\":0,\"min_border_right\":10}},1,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3292\",\"attributes\":{\"width\":null,\"height\":400,\"sizing_mode\":\"stretch_width\",\"x_range\":{\"id\":\"p3291\"},\"y_range\":{\"id\":\"p3294\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3301\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3302\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3299\"},\"outline_line_color\":\"#666666\",\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3553\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p3544\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p3545\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p3546\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/2NgAAFFBzDVYAWhGdwh9IEAKB0KoRdEQeUToOJJELogFUIrpDsAAP3gVHBQAAAA\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Open\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wFQAK//ZVHYRaFrl0CBBMWPEfaWQGjIeJRKAJdAnrex2YGAlkBO02cHnM2VQE+MLJmDCpdAsohhh3HVmEAuAfinVDSZQDgQkgUs0JhARS44g59Ul0B1eejnUAAAAA==\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"High\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wFQAK//M9k/TxOAl0BJnuv7MOGXQBgmUwWj9ZdA8RKc+hDIlkAF2EenLimXQDYBhuWP55lAlExO7exym0DbpnhcNM2ZQDgQkgUs0JhAA5MbRZYDmEDWRuX+UAAAAA==\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Low\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/+v4xKqbIj/NoTJ2f8L1/mkOq66Gh6dWT3PI/ftl/tY3UxyKdaMa3PZNdYhZdUksnXW6w6aOxPbCqzMcOB4vL9SfNsOhIDq64p/JdDgNADo2/nBQAAAA\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Close\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wFQAK//pl63CLzmlkBcqtIWZwWXQKrVV1dle5ZAWvENhX/IlUA3UOCdvBSXQCoBMQm32phAtogoJg8vmUA4EJIFLNCYQL2mBwXlWZdAyol2FdL4l0CjwjkwUAAAAA==\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Volume\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/wFQAK//9ihcS3accUE9CtdfpRlzQRSuRzG8UHhBSOF6vH/WcUGamZlddu9xQVyPwsUS/3hBAAAAHKSRgEHsUbgiOOB5QQrXo6RhbXVBuB6F+0R8WEFJJFnFUAAAAA==\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"_width\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"H4sIAAEAAAAC/0tLA4Jnhg5pKLQJGm0EpY2htBmavKnDrJkgIOwAAPJD/ylQAAAA\"},\"shape\":[10],\"dtype\":\"float64\",\"order\":\"little\"}],[\"inc\",{\"type\":\"ndarray\",\"array\":[\"0\",\"1\",\"0\",\"0\",\"1\",\"1\",\"1\",\"0\",\"0\",\"1\"],\"shape\":[10],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3554\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3555\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p3550\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"index\"},\"y0\":{\"type\":\"field\",\"field\":\"High\"},\"x1\":{\"type\":\"field\",\"field\":\"index\"},\"y1\":{\"type\":\"field\",\"field\":\"Low\"},\"line_color\":{\"type\":\"value\",\"value\":\"#bbbbbb\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p3551\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"index\"},\"y0\":{\"type\":\"field\",\"field\":\"High\"},\"x1\":{\"type\":\"field\",\"field\":\"index\"},\"y1\":{\"type\":\"field\",\"field\":\"Low\"},\"line_color\":{\"type\":\"value\",\"value\":\"#bbbbbb\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p3552\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"index\"},\"y0\":{\"type\":\"field\",\"field\":\"High\"},\"x1\":{\"type\":\"field\",\"field\":\"index\"},\"y1\":{\"type\":\"field\",\"field\":\"Low\"},\"line_color\":{\"type\":\"value\",\"value\":\"#bbbbbb\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3563\",\"attributes\":{\"data_source\":{\"id\":\"p3544\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3564\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3565\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3560\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"field\",\"field\":\"_width\"},\"bottom\":{\"type\":\"field\",\"field\":\"Close\"},\"top\":{\"type\":\"field\",\"field\":\"Open\"},\"line_color\":{\"type\":\"value\",\"value\":null},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"type\":\"object\",\"name\":\"CategoricalColorMapper\",\"id\":\"p3556\",\"attributes\":{\"palette\":[\"rgb(254, 220, 214)\",\"rgb(214, 254, 214)\"],\"factors\":[\"0\",\"1\"]}}}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3561\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"field\",\"field\":\"_width\"},\"bottom\":{\"type\":\"field\",\"field\":\"Close\"},\"top\":{\"type\":\"field\",\"field\":\"Open\"},\"line_color\":{\"type\":\"value\",\"value\":null},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3556\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"VBar\",\"id\":\"p3562\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"width\":{\"type\":\"field\",\"field\":\"_width\"},\"bottom\":{\"type\":\"field\",\"field\":\"Close\"},\"top\":{\"type\":\"field\",\"field\":\"Open\"},\"line_color\":{\"type\":\"value\",\"value\":null},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"field\",\"field\":\"inc\",\"transform\":{\"id\":\"p3556\"}},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3572\",\"attributes\":{\"data_source\":{\"id\":\"p3328\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3573\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3574\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p3569\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"index\"},\"y0\":{\"type\":\"field\",\"field\":\"High\"},\"x1\":{\"type\":\"field\",\"field\":\"index\"},\"y1\":{\"type\":\"field\",\"field\":\"Low\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p3570\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"index\"},\"y0\":{\"type\":\"field\",\"field\":\"High\"},\"x1\":{\"type\":\"field\",\"field\":\"index\"},\"y1\":{\"type\":\"field\",\"field\":\"Low\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Segment\",\"id\":\"p3571\",\"attributes\":{\"x0\":{\"type\":\"field\",\"field\":\"index\"},\"y0\":{\"type\":\"field\",\"field\":\"High\"},\"x1\":{\"type\":\"field\",\"field\":\"index\"},\"y1\":{\"type\":\"field\",\"field\":\"Low\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"id\":\"p3583\"},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3592\",\"attributes\":{\"data_source\":{\"id\":\"p3331\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3593\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3594\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"MultiLine\",\"id\":\"p3589\",\"attributes\":{\"xs\":{\"type\":\"field\",\"field\":\"position_lines_xs\"},\"ys\":{\"type\":\"field\",\"field\":\"position_lines_ys\"},\"line_color\":{\"type\":\"field\",\"field\":\"returns_positive\",\"transform\":{\"type\":\"object\",\"name\":\"CategoricalColorMapper\",\"id\":\"p3336\",\"attributes\":{\"palette\":[\"rgb(178, 27, 0)\",\"rgb(0, 178, 0)\"],\"factors\":[\"0\",\"1\"]}}},\"line_width\":{\"type\":\"value\",\"value\":8},\"line_dash\":{\"type\":\"value\",\"value\":\"dotted\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"MultiLine\",\"id\":\"p3590\",\"attributes\":{\"xs\":{\"type\":\"field\",\"field\":\"position_lines_xs\"},\"ys\":{\"type\":\"field\",\"field\":\"position_lines_ys\"},\"line_color\":{\"type\":\"field\",\"field\":\"returns_positive\",\"transform\":{\"id\":\"p3336\"}},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"line_width\":{\"type\":\"value\",\"value\":8},\"line_dash\":{\"type\":\"value\",\"value\":\"dotted\"}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"MultiLine\",\"id\":\"p3591\",\"attributes\":{\"xs\":{\"type\":\"field\",\"field\":\"position_lines_xs\"},\"ys\":{\"type\":\"field\",\"field\":\"position_lines_ys\"},\"line_color\":{\"type\":\"field\",\"field\":\"returns_positive\",\"transform\":{\"id\":\"p3336\"}},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"line_width\":{\"type\":\"value\",\"value\":8},\"line_dash\":{\"type\":\"value\",\"value\":\"dotted\"}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3602\",\"attributes\":{\"data_source\":{\"id\":\"p3328\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3603\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3604\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3599\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"\\u03bb(sma10)_0_0\"},\"line_color\":\"#1f77b4\",\"line_width\":1.5}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3600\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"\\u03bb(sma10)_0_0\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.1,\"line_width\":1.5}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3601\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"\\u03bb(sma10)_0_0\"},\"line_color\":\"#1f77b4\",\"line_alpha\":0.2,\"line_width\":1.5}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p3612\",\"attributes\":{\"data_source\":{\"id\":\"p3328\"},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p3613\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p3614\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3609\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"\\u03bb(sma30)_1_0\"},\"line_color\":\"#ff7f0e\",\"line_width\":1.5}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3610\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"\\u03bb(sma30)_1_0\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.1,\"line_width\":1.5}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Line\",\"id\":\"p3611\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"index\"},\"y\":{\"type\":\"field\",\"field\":\"\\u03bb(sma30)_1_0\"},\"line_color\":\"#ff7f0e\",\"line_alpha\":0.2,\"line_width\":1.5}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3300\",\"attributes\":{\"tools\":[{\"id\":\"p3313\"},{\"id\":\"p3314\"},{\"id\":\"p3315\"},{\"id\":\"p3316\"},{\"id\":\"p3324\"},{\"id\":\"p3325\"},{\"id\":\"p3326\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3327\"},{\"id\":\"p3617\"},{\"id\":\"p3621\"}],\"active_drag\":{\"id\":\"p3313\"},\"active_scroll\":{\"id\":\"p3314\"}}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3308\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3309\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p3310\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3311\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3303\",\"attributes\":{\"visible\":false,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3304\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"CustomJSTickFormatter\",\"id\":\"p3338\",\"attributes\":{\"args\":{\"type\":\"map\",\"entries\":[[\"axis\",{\"id\":\"p3303\"}],[\"formatter\",{\"type\":\"object\",\"name\":\"DatetimeTickFormatter\",\"id\":\"p3337\",\"attributes\":{\"days\":\"%a, %d %b\"}}],[\"source\",{\"id\":\"p3328\"}]]},\"code\":\"\\nthis.labels = this.labels || formatter.doFormat(ticks\\n .map(i => source.data.datetime[i])\\n .filter(t => t !== undefined));\\nreturn this.labels[index] || \\\"\\\";\\n \"}},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3306\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3307\",\"attributes\":{\"axis\":{\"id\":\"p3303\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3312\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p3308\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p3575\",\"attributes\":{\"location\":\"top_left\",\"border_line_color\":\"#333333\",\"background_fill_alpha\":0.9,\"click_policy\":\"hide\",\"label_text_font_size\":\"8pt\",\"margin\":0,\"padding\":5,\"spacing\":0,\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3576\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"OHLC\"},\"renderers\":[{\"id\":\"p3572\"},{\"id\":\"p3583\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3595\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Trades (5)\"},\"renderers\":[{\"id\":\"p3592\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3605\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"\\u03bb(sma10)\"},\"renderers\":[{\"id\":\"p3602\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p3615\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"\\u03bb(sma30)\"},\"renderers\":[{\"id\":\"p3612\"}]}}]}},{\"type\":\"object\",\"name\":\"Label\",\"id\":\"p3616\",\"attributes\":{\"text\":\"Created with Backtesting.py: http://kernc.github.io/backtesting.py\",\"text_color\":\"silver\",\"text_alpha\":0.09,\"x\":10,\"y\":15,\"x_units\":\"screen\",\"y_units\":\"screen\"}}],\"min_border_top\":3,\"min_border_bottom\":6,\"min_border_left\":0,\"min_border_right\":10}},2,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p3497\",\"attributes\":{\"width\":null,\"height\":70,\"sizing_mode\":\"stretch_width\",\"x_range\":{\"id\":\"p3291\"},\"y_range\":{\"id\":\"p3499\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3506\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p3507\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p3504\"},\"outline_line_color\":\"#666666\",\"renderers\":[{\"id\":\"p3539\"}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p3505\",\"attributes\":{\"tools\":[{\"id\":\"p3518\"},{\"id\":\"p3519\"},{\"id\":\"p3520\"},{\"id\":\"p3521\"},{\"id\":\"p3529\"},{\"id\":\"p3530\"},{\"id\":\"p3531\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p3532\"},{\"id\":\"p3542\"},{\"id\":\"p3621\"}],\"active_drag\":{\"id\":\"p3518\"},\"active_scroll\":{\"id\":\"p3519\"}}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3513\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3514\",\"attributes\":{\"desired_num_ticks\":3,\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"NumeralTickFormatter\",\"id\":\"p3543\",\"attributes\":{\"format\":\"0 a\"}},\"axis_label\":\"Volume\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3516\"},\"minor_tick_line_color\":null}}],\"below\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p3508\",\"attributes\":{\"visible\":true,\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p3509\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"id\":\"p3338\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p3511\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3512\",\"attributes\":{\"axis\":{\"id\":\"p3508\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p3517\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p3513\"}}}],\"min_border_top\":3,\"min_border_bottom\":6,\"min_border_left\":0,\"min_border_right\":10}},3,0]]}}],\"callbacks\":{\"type\":\"map\",\"entries\":[[\"document_ready\",[{\"type\":\"object\",\"name\":\"CustomJS\",\"id\":\"p3290\",\"attributes\":{\"code\":\"(function() { var i = document.createElement('iframe'); i.style.display='none';i.width=i.height=1;i.loading='eager';i.src='https://kernc.github.io/backtesting.py/plx.gif.html?utm_source='+location.origin;document.body.appendChild(i);})();\"}}]]]}}};\n const render_items = [{\"docid\":\"be2eb0cd-ab07-4c39-8fa9-57b588170ef0\",\"roots\":{\"p3636\":\"a3a32bc0-6443-4c14-9057-65a7c6c54893\"},\"root_ids\":[\"p3636\"]}];\n void root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n }\n if (root.Bokeh !== undefined) {\n embed_document(root);\n } else {\n let attempts = 0;\n const timer = setInterval(function(root) {\n if (root.Bokeh !== undefined) {\n clearInterval(timer);\n embed_document(root);\n } else {\n attempts++;\n if (attempts > 100) {\n clearInterval(timer);\n console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n }\n }\n }, 10, root)\n }\n})(window);",
"application/vnd.bokehjs_exec.v0+json": ""
},
"metadata": {
"application/vnd.bokehjs_exec.v0+json": {
"id": "p3636"
}
},
"output_type": "display_data",
"jetTransient": {
"display_id": null
}
},
{
"data": {
"text/plain": [
"GridPlot(id='p3636', ...)"
],
"text/html": [
"<div style=\"display: table;\"><div style=\"display: table-row;\"><div style=\"display: table-cell;\"><b title=\"bokeh.models.plots.GridPlot\">GridPlot</b>(</div><div style=\"display: table-cell;\">id&nbsp;=&nbsp;'p3636', <span id=\"p3667\" style=\"cursor: pointer;\">&hellip;)</span></div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">align&nbsp;=&nbsp;'auto',</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">aspect_ratio&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">children&nbsp;=&nbsp;[(figure(id='p3339', ...), 0, 0), (figure(id='p3439', ...), 1, 0), (figure(id='p3292', ...), 2, 0), (figure(id='p3497', ...), 3, 0)],</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">cols&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">context_menu&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">css_classes&nbsp;=&nbsp;[],</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">css_variables&nbsp;=&nbsp;{},</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">disabled&nbsp;=&nbsp;False,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">elements&nbsp;=&nbsp;[],</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">flow_mode&nbsp;=&nbsp;'block',</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">height&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">height_policy&nbsp;=&nbsp;'auto',</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">html_attributes&nbsp;=&nbsp;{},</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">html_id&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">js_event_callbacks&nbsp;=&nbsp;{},</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">js_property_callbacks&nbsp;=&nbsp;{},</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">margin&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">max_height&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">max_width&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">min_height&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">min_width&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">name&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">resizable&nbsp;=&nbsp;False,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">rows&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">sizing_mode&nbsp;=&nbsp;'stretch_width',</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">spacing&nbsp;=&nbsp;0,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">styles&nbsp;=&nbsp;{},</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">stylesheets&nbsp;=&nbsp;[],</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">subscribed_events&nbsp;=&nbsp;PropertyValueSet(),</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">syncable&nbsp;=&nbsp;True,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">tags&nbsp;=&nbsp;[],</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">toolbar&nbsp;=&nbsp;Toolbar(id='p3635', ...),</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">toolbar_location&nbsp;=&nbsp;'right',</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">visible&nbsp;=&nbsp;True,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">width&nbsp;=&nbsp;None,</div></div><div class=\"p3666\" style=\"display: none;\"><div style=\"display: table-cell;\"></div><div style=\"display: table-cell;\">width_policy&nbsp;=&nbsp;'auto')</div></div></div>\n",
"<script>\n",
"(function() {\n",
" let expanded = false;\n",
" const ellipsis = document.getElementById(\"p3667\");\n",
" ellipsis.addEventListener(\"click\", function() {\n",
" const rows = document.getElementsByClassName(\"p3666\");\n",
" for (let i = 0; i < rows.length; i++) {\n",
" const el = rows[i];\n",
" el.style.display = expanded ? \"none\" : \"table-row\";\n",
" }\n",
" ellipsis.innerHTML = expanded ? \"&hellip;)\" : \"&lsaquo;&lsaquo;&lsaquo;\";\n",
" expanded = !expanded;\n",
" });\n",
"})();\n",
"</script>\n"
]
},
"execution_count": 129,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 129
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}