Files
NewQuant/main2.ipynb

444 lines
1.3 MiB
Plaintext
Raw Normal View History

2025-07-10 15:07:31 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"id": "initial_id",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-05T16:56:41.480753Z",
"start_time": "2025-07-05T16:56:41.457887Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"from datetime import datetime\n",
"%load_ext autoreload\n",
"%autoreload 2\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "a559dfcf",
"metadata": {
"ExecuteTime": {
"end_time": "2025-07-05T16:56:42.438942Z",
"start_time": "2025-07-05T16:56:41.494423Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"初始化数据管理器...\n",
"数据加载成功: /mnt/d/PyProject/NewQuant/data/data/KQ_m@CZCE_MA/KQ_m@CZCE_MA_min60.csv\n",
"数据范围从 2021-12-31 14:00:00 到 2025-07-10 09:00:00\n",
"总计 5904 条记录。\n",
"\n",
"初始化回测引擎...\n",
"模拟器初始化:初始资金=100000.00, 滑点率=0.0, 佣金率=0.0001\n",
"\n",
"--- 回测引擎初始化完成 ---\n",
" 策略: SimpleLimitBuyStrategy\n",
" 初始资金: 100000.00\n",
" 换月模式: 启用\n",
"\n",
"开始运行回测...\n",
"\n",
"--- 回测开始 ---\n",
"SimpleLimitBuyStrategy 策略初始化回调被调用。\n",
"开始将 DataFrame 转换为 Bar 对象流...\n",
"Bar 对象流生成完毕。\n",
"\n",
"--- 回测结束,检查并平仓所有剩余持仓 ---\n",
"--- 回测结束 ---\n",
"总计处理了 1671 根K线。\n",
"总计发生了 63 笔交易。\n",
"最终总净值: 100744.27\n",
"总收益率: 0.74%\n",
"\n",
"回测运行完毕。\n",
"\n",
"--- 结果分析器初始化完成 ---\n",
"\n",
"--- 交易明细 ---\n",
" 2024-07-16 10:00:00 | SELL | CZCE.MA409 | Vol: 1 | Price: 2567.00 | Comm: 0.26\n",
" 2024-07-17 13:00:00 | CLOSE_SHORT | CZCE.MA409 | Vol: 1 | Price: 2552.00 | Comm: 0.26 | Indicators:{'rsi_5': 54.065209557879136, 'rsi_10': 51.72603048892884, 'rsi_15': 52.22722830612864, 'rsi_20': 52.625794911978794, 'rsi_25': 52.851674338136746, 'rsi_30': 52.95626095916324, 'rsi_35': 52.968417399930075, 'rsi_40': 52.90742632028734, 'range_1': 22.0, 'range_8': 19.0, 'range_15': 14.0, 'range_21': 29.0} | PnL: 15.00\n",
" 2024-07-25 21:00:00 | SELL | CZCE.MA409 | Vol: 1 | Price: 2502.00 | Comm: 0.25\n",
" 2024-07-29 11:00:00 | CLOSE_SHORT | CZCE.MA409 | Vol: 1 | Price: 2479.00 | Comm: 0.25 | Indicators:{'rsi_5': 53.626004698586804, 'rsi_10': 49.848310790366334, 'rsi_15': 47.850622400930654, 'rsi_20': 46.475977387482295, 'rsi_25': 45.70586632706525, 'rsi_30': 45.35361862329593, 'rsi_35': 45.25035857868273, 'rsi_40': 45.281578636217695, 'range_1': 16.0, 'range_8': 15.0, 'range_15': 14.0, 'range_21': 9.0} | PnL: 23.00\n",
" 2024-07-29 13:00:00 | SELL | CZCE.MA409 | Vol: 1 | Price: 2496.00 | Comm: 0.25\n",
" 2024-07-29 22:00:00 | CLOSE_SHORT | CZCE.MA409 | Vol: 1 | Price: 2475.00 | Comm: 0.25 | Indicators:{'rsi_5': 50.645899849238816, 'rsi_10': 47.42882538080237, 'rsi_15': 46.99004216028481, 'rsi_20': 46.53180163606193, 'rsi_25': 46.16167989599333, 'rsi_30': 45.937258392101185, 'rsi_35': 45.83789458816951, 'rsi_40': 45.82391062634012, 'range_1': 13.0, 'range_8': 6.0, 'range_15': 12.0, 'range_21': 7.0} | PnL: 21.00\n",
" 2024-08-01 22:00:00 | BUY | CZCE.MA409 | Vol: 1 | Price: 2503.00 | Comm: 0.25\n",
" 2024-08-05 11:00:00 | CLOSE_LONG | CZCE.MA409 | Vol: 1 | Price: 2478.00 | Comm: 0.25 | Indicators:{'rsi_5': 49.68521813080819, 'rsi_10': 53.73287059979439, 'rsi_15': 52.947437517474185, 'rsi_20': 51.76183528051731, 'rsi_25': 50.75060255158634, 'rsi_30': 49.967701546210364, 'rsi_35': 49.38244637287542, 'rsi_40': 48.95053059030809, 'range_1': 23.0, 'range_8': 17.0, 'range_15': 18.0, 'range_21': 11.0} | PnL: -25.00\n",
" 2024-08-05 13:00:00 | BUY | CZCE.MA409 | Vol: 1 | Price: 2470.00 | Comm: 0.25\n",
" 2024-08-08 22:00:00 | CLOSE_LONG | CZCE.MA409 | Vol: 1 | Price: 2443.00 | Comm: 0.24 | Indicators:{'rsi_5': 23.71627174125895, 'rsi_10': 33.966374741210345, 'rsi_15': 38.98603286683697, 'rsi_20': 41.356804983837534, 'rsi_25': 42.574698683454606, 'rsi_30': 43.271867848920046, 'rsi_35': 43.72184839236377, 'rsi_40': 44.04661546935425, 'range_1': 7.0, 'range_8': 11.0, 'range_15': 7.0, 'range_21': 15.0} | PnL: -27.00\n",
" 2024-08-09 09:00:00 | SELL | CZCE.MA409 | Vol: 1 | Price: 2460.00 | Comm: 0.25\n",
" 2024-08-09 22:00:00 | CLOSE_SHORT | CZCE.MA409 | Vol: 1 | Price: 2422.00 | Comm: 0.24 | Indicators:{'rsi_5': 48.038616310559995, 'rsi_10': 44.386184452710744, 'rsi_15': 43.564832680996304, 'rsi_20': 43.519493945686975, 'rsi_25': 43.662363125683825, 'rsi_30': 43.82984184947362, 'rsi_35': 43.989308797798934, 'rsi_40': 44.138636641902224, 'range_1': 11.0, 'range_8': 9.0, 'range_15': 16.0, 'range_21': 12.0} | PnL: 38.00\n",
" 2024-08-15 10:00:00 | SELL | CZCE.MA409 | Vol: 1 | Price: 2423.00 | Comm: 0.24\n",
" 2024-09-09 14:00:00 | SELL | CZCE.MA501 | Vol: 1 | Price: 2370.00 | Comm: 0.24\n",
" 2024-09-10 21:00:00 | CLOSE_SHORT | CZCE.MA501 | Vol: 1 | Price: 2321.00 | Comm: 0.23 | Indicators:{'rsi_5': 53.51801883734878, 'rsi_10': 44.23955062416102, 'rsi_15': 39.939749224050566, 'rsi_20': 37.87111017414301, 'rsi_25': 37.060643961674, 'rsi_30': 36.947943506771125, 'rsi_35': 37.20337934009921, 'rsi_40': 37.63748256395828, 'range_1': 23.0, 'range_8': 13.0, 'range_15': 14.0, 'range_21': 17.0} | PnL: 49.00\n",
" 2024-09-10 22:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2294.00 | Comm: 0.23\n",
" 2024-09-11 13:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2330.00 | Comm: 0.23 | Indicators:{'rsi_5': 21.914909697071973, 'rsi_10': 27.12490098762447, 'rsi_15': 28.70165763675733, 'rsi_20': 29.395264461287557, 'rsi_25': 30.06580448249775, 'rsi_30': 30.84456133921035, 'rsi_35': 31.69538054775901, 'rsi_40': 32.56424990138594, 'range_1': 21.0, 'range_8': 12.0, 'range_15': 13.0, 'range_21': 19.0} | PnL: 36.00\n",
" 2024-09-18 09:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2368.00 | Comm: 0.24\n",
" 2024-09-19 21:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2410.00 | Comm: 0.24 | Indicators:{'rsi_5': 50.813709622785865, 'rsi_10': 56.794984662450474, 'rsi_15': 54.524920882407635, 'rsi_20': 51.93622143757284, 'rsi_25': 49.91901821190163, 'rsi_30': 48.47343815715233, 'rsi_35': 47.4676044732338, 'rsi_40': 46.7768995894759, 'range_1': 8.0, 'range_8': 14.0, 'range_15': 22.0, 'range_21': 21.0} | PnL: 42.00\n",
" 2024-09-20 11:00:00 | SELL | CZCE.MA501 | Vol: 1 | Price: 2402.00 | Comm: 0.24\n",
" 2024-09-20 22:00:00 | CLOSE_SHORT | CZCE.MA501 | Vol: 1 | Price: 2360.00 | Comm: 0.24 | Indicators:{'rsi_5': 43.3368978800008, 'rsi_10': 50.094914860269256, 'rsi_15': 51.62401353096898, 'rsi_20': 51.40316440554111, 'rsi_25': 50.66915786259084, 'rsi_30': 49.88612348342257, 'rsi_35': 49.20165775821443, 'rsi_40': 48.64515399188845, 'range_1': 20.0, 'range_8': 27.0, 'range_15': 21.0, 'range_21': 24.0} | PnL: 42.00\n",
" 2024-10-08 10:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2576.00 | Comm: 0.26\n",
" 2024-10-08 22:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2546.00 | Comm: 0.25 | Indicators:{'rsi_5': 73.37545567079853, 'rsi_10': 76.58148895884459, 'rsi_15': 75.8472216656552, 'rsi_20': 74.21116688164746, 'rsi_25': 72.3770291684878, 'rsi_30': 70.58524893848391, 'rsi_35': 68.92643402883294, 'rsi_40': 67.42865982847792, 'range_1': 48.0, 'range_8': 27.0, 'range_15': 17.0, 'range_21': 12.0} | PnL: -30.00\n",
" 2024-10-14 13:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2489.00 | Comm: 0.25\n",
" 2024-10-15 14:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2463.00 | Comm: 0.25 | Indicators:{'rsi_5': 36.53301698412939, 'rsi_10': 43.03208737978571, 'rsi_15': 46.51576454060912, 'rsi_20': 48.9180136557997, 'rsi_25': 50.510654289057754, 'rsi_30': 51.53833757112618, 'rsi_35': 52.184247151091355, 'rsi_40': 52.57527832983704, 'range_1': 8.0, 'range_8': 13.0, 'range_15': 14.0, 'range_21': 17.0} | PnL: -26.00\n",
" 2024-10-21 09:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2394.00 | Comm: 0.24\n",
" 2024-10-23 13:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2422.00 | Comm: 0.24 | Indicators:{'rsi_5': 11.424435366775088, 'rsi_10': 22.35499857458316, 'rsi_15': 28.066846213345936, 'rsi_20': 32.20791821085964, 'rsi_25': 35.40426982454629, 'rsi_30': 37.87297727438685, 'rsi_35': 39.77883407002768, 'rsi_40': 41.2570561446261, 'range_1': 9.0, 'range_8': 9.0, 'range_15': 11.0, 'range_21': 20.0} | PnL: 28.00\n",
" 2024-11-01 14:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2477.00 | Comm: 0.25\n",
" 2024-11-05 13:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2498.00 | Comm: 0.25 | Indicators:{'rsi_5': 40.6937685480552, 'rsi_10': 50.07679900516268, 'rsi_15': 52.26149195246074, 'rsi_20': 52.97826374705008, 'rsi_25': 53.1478233042013, 'rsi_30': 53.089850263416885, 'rsi_35': 52.948805612563646, 'rsi_40': 52.78790324868395, 'range_1': 11.0, 'range_8': 11.0, 'range_15': 7.0, 'range_21': 13.0} | PnL: 21.00\n",
" 2024-11-06 14:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2476.00 | Comm: 0.25\n",
" 2024-11-07 13:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2498.00 | Comm: 0.25 | Indicators:{'rsi_5': 19.072656605871835, 'rsi_10': 37.95975194737454, 'rsi_15': 45.157729976309234, 'rsi_20': 48.257078153097, 'rsi_25': 49.76895520868274, 'rsi_30': 50.55825878192998, 'rsi_35': 50.98747265335422, 'rsi_40': 51.22671727954064, 'range_1': 8.0, 'range_8': 9.0, 'range_15': 7.0, 'range_21': 21.0} | PnL: 22.00\n",
" 2024-12-04 11:00:00 | BUY | CZCE.MA501 | Vol: 1 | Price: 2523.00 | Comm: 0.25\n",
" 2024-12-09 11:00:00 | CLOSE_LONG | CZCE.MA501 | Vol: 1 | Price: 2552.00 | Comm: 0.26 | Indicators:{'rsi_5': 21.37855896704723, 'rsi_10': 31.072430011821066, 'rsi_15': 34.69492350992181, 'rsi_20': 37.07479938391539, 'rsi_25': 39.03307971838543, 'rsi_30': 40.71871639886908, 'rsi_35': 42.17025085579484, 'rsi_40': 43.41344520900014, 'range_1': 14.0, 'range_8': 8.0, 'range_15': 7.0, 'range_21': 11.0} | PnL: 29.00\n",
" 2024-12-18 13:00:00 | SELL | CZCE.MA505 | Vol: 1 | Price: 2613.00 | Comm: 0.26\n",
" 2024-12-19 11:00:00 | CLOSE_SHORT | CZCE.MA505 | Vol: 1 | Price: 2595.00 | Comm: 0.26 | Indicators:{'rsi_5': 52.542308524852054, 'rsi_10': 48.30789741922741, 'rsi_15': 50.14369298385598, 'rsi_20': 51.9130494813197, 'rsi_25': 52.99905686297577, 'rsi_30': 53.608044860672045, 'rsi_35': 53.94461881067085, 'rsi_40': 54.13157125559083, 'range_1': 8.0, 'range_8': 6.0, 'range_15': 7.0, 'range_21': 10.0} | PnL: 18.00\n",
" 2025-01-16 22:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2586.00 | Comm: 0.26\n",
" 2025-01-21 14:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2603.00 | Comm: 0.26 | Indicators:{'rsi_5': 12.850250317050941, 'rsi_10': 24.838868746087027, 'rsi_15': 32.48594943070964, 'rsi_20': 36.89274308454256, 'rsi_25': 39.5388756934466, 'rsi_30': 41.27730050281178, 'rsi_35': 42.52412676241828, 'rsi_40': 43.48236916300353, 'range_1': 20.0, 'range_8': 15.0, 'range_15': 17.0, 'range_21': 12.0} | PnL: 17.00\n",
" 2025-01-27 11:00:00 | SELL | CZCE.MA505 | Vol: 1 | Price: 2561.00 | Comm: 0.26\n",
" 2025-02-06 21:00:00 | CLOSE_SHORT | CZCE.MA505 | Vol: 1 | Price: 2598.00 | Comm: 0.26 | Indicators:{'rsi_5': 52.70045069342063, 'rsi_10': 47.19299820265871, 'rsi_15': 45.08976297426874, 'rsi_20': 44.255005499531165, 'rsi_25': 43.988968128416644, 'rsi_30': 43.986217365513816, 'rsi_35': 44.113431381685906, 'rsi_40': 44.30826032300437, 'range_1': 9.0, 'range_8': 11.0, 'range_15': 17.0, 'range_21': 11.0} | PnL: -37.00\n",
" 2025-02-26 09:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2523.00 | Comm: 0.25\n",
" 2025-02-26 22:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2548.00 | Comm: 0.25 | Indicators:{'rsi_5': 9.088019383650645, 'rsi_10': 23.031068059686227, 'rsi_15': 30.818118205430086, 'rsi_20': 35.01389250612135, 'rsi_25': 37.53099139538857, 'rsi_30': 39.192141162360386, 'rsi_35': 40.369423435833475, 'rsi_40': 41.24974083125059, 'range_1': 6.0, 'range_8': 4.0, 'range_15': 28.0, 'range_21': 11.0} | PnL: 25.00\n",
" 2025-03-04 13:00:00 | SELL | CZCE.MA505 | Vol: 1 | Price: 2606.00 | Comm: 0.26\n",
" 2025-03-04 22:00:00 | CLOSE_SHORT | CZCE.MA505 | Vol: 1 | Price: 2595.00 | Comm: 0.26 | Indicators:{'rsi_5': 54.572595655406985, 'rsi_10': 57.938804884474884, 'rsi_15': 59.14335482399375, 'rsi_20': 59.07331811330352, 'rsi_25': 58.5807249771136, 'rsi_30': 57.95889703788967, 'rsi_35': 57.31583164195256, 'rsi_40': 56.69519162505904, 'range_1': 15.0, 'range_8': 7.0, 'range_15': 10.0, 'range_21': 17.0} | PnL: 11.00\n",
" 2025-03-10 13:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2594.00 | Comm: 0.26\n",
" 2025-03-12 11:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2557.00 | Comm: 0.26 | Indicators:{'rsi_5': 38.7290417255922, 'rsi_10': 47.75429908486068, 'rsi_15': 49.720026988032174, 'rsi_20': 50.637583511561125, 'rsi_25': 51.18438448033351, 'rsi_30': 51.508589248106695, 'rsi_35': 51.68305525061263, 'rsi_40': 51.75599632331427, 'range_1': 12.0, 'range_8': 12.0, 'range_15': 10.0, 'range_21': 11.0} | PnL: -37.00\n",
" 2025-03-12 14:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2529.00 | Comm: 0.25\n",
" 2025-03-14 11:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2561.00 | Comm: 0.26 | Indicators:{'rsi_5': 5.824223475184294, 'rsi_10': 17.0744314663323, 'rsi_15': 24.93895077039436, 'rsi_20': 30.23528460992869, 'rsi_25': 33.931050898588396, 'rsi_30': 36.59500232816152, 'rsi_35': 38.56950438387562, 'rsi_40': 40.06902047466147, 'range_1': 12.0, 'range_8': 11.0, 'range_15': 23.0, 'range_21': 11.0} | PnL: 32.00\n",
" 2025-03-18 13:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2522.00 | Comm: 0.25\n",
" 2025-03-19 22:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2544.00 | Comm: 0.25 | Indicators:{'rsi_5': 11.02722534094745, 'rsi_10': 25.10573730917448, 'rsi_15': 31.837203765057165, 'rsi_20': 35.45887308868638, 'rsi_25': 37.80098720634075, 'rsi_30': 39.488587053314326, 'rsi_35': 40.77565919514872, 'rsi_40': 41.789232480950915, 'range_1': 10.0, 'range_8': 13.0, 'range_15': 16.0, 'range_21': 13.0} | PnL: 22.00\n",
" 2025-03-28 10:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2533.00 | Comm: 0.25\n",
" 2025-03-31 10:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2495.00 | Comm: 0.25 | Indicators:{'rsi_5': 15.397474574614503, 'rsi_10': 28.425447473923477, 'rsi_15': 34.85183554423606, 'rsi_20': 38.44465598780541, 'rsi_25': 40.64843906574204, 'rsi_30': 42.11153926571917, 'rsi_35': 43.1501235019396, 'rsi_40': 43.927208444256095, 'range_1': 24.0, 'range_8': 16.0, 'range_15': 10.0, 'range_21': 21.0} | PnL: -38.00\n",
" 2025-04-07 21:00:00 | SELL | CZCE.MA505 | Vol: 1 | Price: 2411.00 | Comm: 0.24\n",
" 2025-04-08 11:00:00 | CLOSE_SHORT | CZCE.MA505 | Vol: 1 | Price: 2390.00 | Comm: 0.24 | Indicators:{'rsi_5': 33.81994863460485, 'rsi_10': 28.106735015532657, 'rsi_15': 27.47506128021215, 'rsi_20': 27.969431894568654, 'rsi_25': 28.85958221340823, 'rsi_30': 29.879083745491947, 'rsi_35': 30.913039105329194, 'rsi_40': 31.910201447241104, 'range_1': 25.0, 'range_8': 8.0, 'range_15': 8.0, 'range_21': 17.0} | PnL: 21.00\n",
" 2025-04-09 09:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2324.00 | Comm: 0.23\n",
" 2025-04-10 11:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2415.00 | Comm: 0.24 | Indicators:{'rsi_5': 16.98128552873005, 'rsi_10': 20.79387361780216, 'rsi_15': 22.369400068959983, 'rsi_20': 23.62571178208281, 'rsi_25': 24.831551542229384, 'rsi_30': 26.008111790726595, 'rsi_35': 27.141258200134715, 'rsi_40': 28.21800531894512, 'range_1': 22.0, 'range_8': 18.0, 'range_15': 13.0, 'range_21': 15.0} | PnL: 91.00\n",
" 2025-04-11 14:00:00 | BUY | CZCE.MA505 | Vol: 1 | Price: 2379.00 | Comm: 0.24\n",
" 2025-04-15 10:00:00 | CLOSE_LONG | CZCE.MA505 | Vol: 1 | Price: 2356.00 | Comm: 0.24 | Indicators:{'rsi_5': 44.82815896442343, 'rsi_10': 48.47159863353117, 'rsi_15': 47.27548169077328, 'rsi_20': 45.781322280125195, 'rsi_25': 44.607096320901135, 'rsi_30': 43.76561289312478, 'rsi_35': 43.18581442077558, 'rsi_40': 42.79996933933156, 'range_1': 13.0, 'range_8': 20.0, 'range_15': 19.0, 'range_21': 16.0} | PnL: -23.00\n",
" 2025-05-06 21:00:00 | SELL | CZCE.MA509 | Vol: 1 | Price: 2244.00 | Comm: 0.22\n",
" 2025-05-07 22:00:00 | CLOSE_SHORT | CZCE.MA509 | Vol: 1 | Price: 2228.00 | Comm: 0.22 | Indicators:{'rsi_5': 53.54512492012308, 'rsi_10': 41.84846206383418, 'rsi_15': 40.371797754903696, 'rsi_20': 40.66540362809689, 'rsi_25': 41.089178502795534, 'rsi_30': 41.371832460535636, 'rsi_35': 41.52163072391532, 'rsi_40': 41.586321661479055, 'range_1': 17.0, 'range_8': 7.0, 'range_15': 12.0, 'range_21': 9.0} | PnL: 16.00\n",
" 2025-05-21 11:00:00 | BUY | CZCE.MA509 | Vol: 1 | Price: 2266.00 | Comm: 0.23\n",
" 2025-05-22 13:00:00 | CLOSE_LONG | CZCE.MA509 | Vol: 1 | Price: 2242.00 | Comm: 0.22 | Indicators:{'rsi_5': 49.88923947665141, 'rsi_10': 45.50579024283407, 'rsi_15': 44.66608253871823, 'rsi_20': 45.30687476308752, 'rsi_25': 46.08522283925901, 'rsi_30': 46.68333667263876, 'rsi_35': 47.072500953046465, 'rsi_40': 47.29010271608558, 'range_1': 16.0, 'range_8': 15.0, 'range_15': 17.0, 'range_21': 16.0} | PnL: -24.00\n",
" 2025-05-23 21:00:00 | SELL | CZCE.MA509 | Vol: 1 | Price: 2241.00 | Comm: 0.22\n",
" 2025-05-26 13:00:00 | CLOSE_SHORT | CZCE.MA509 | Vol: 1 | Price: 2223.00 | Comm: 0.22 | Indicators:{'rsi_5': 55.697553590587255, 'rsi_10': 47.96940681796906, 'rsi_15': 45.422577087334176, 'rsi_20': 44.81162193144032, 'rsi_25': 44.90912152506967, 'rsi_30': 45.19866668086927, 'rsi_35': 45.4881295684009, 'rsi_40': 45.71667462590743, 'range_1': 17.0, 'range_8': 9.0, 'range_15': 12.0, 'range_21': 8.0} | PnL: 18.00\n",
"正在计算绩效指标...\n",
"total_return: 0.007442666000000431, annualized_return:0.0051896155406649935, 252 / total_days:0.6980609418282548\n",
"绩效指标计算完成。\n",
"\n",
"--- 回测绩效报告 ---\n",
"初始资金 : 100000.00\n",
"最终资金 : 100744.27\n",
"总收益率 : 0.74%\n",
"年化收益率 : 0.52%\n",
"最大回撤 : 0.14%\n",
"夏普比率 : 0.94\n",
"卡玛比率 : 3.67\n",
"总交易次数 : 63\n",
"总实现盈亏 : 370.00\n",
"交易成本 : 15.49\n",
"\n",
"--- 交易详情 ---\n",
"盈利交易次数 : 22\n",
"亏损交易次数 : 9\n",
"胜率 : 70.97%\n",
"盈亏比 : 0.98\n",
"平均每次盈利 : 28.95\n",
"平均每次亏损 : -29.67\n",
"正在绘制绩效图表...\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABWQAAAPdCAYAAAANmGE2AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VGX6xvF7ZtITakIvimgCUqQp0kSa3ZXAYhfrArbV1VVwVRR1DfaGdS2A8rOsNHUBBRUbRRCQIqCCCCgCSSjpZeb8/jiemQwppEzP93NdXJOZOXPOOzPvhOTOc57XZhiGIQAAAAAAAACA39mDPQAAAAAAAAAAqC8IZAEAAAAAAAAgQAhkAQAAAAAAACBACGQBAAAAAAAAIEAIZAEAAAAAAAAgQAhkAQAAAAAAACBACGQBAAAAAAAAIEAIZAEAAAAAAAAgQAhkAQAAAAAAACBACGQBAGFr6NChSktL8/rXtWtXnX766br11lu1evXqYA+xnJ9//lk33HCD+vXrp86dOystLU3PPfdcrfe3e/dupaWlaejQoeXus16f3bt312XI1VLRe1HRvzlz5vh9LFWZNGlSSIwjFNXmtZkzZ06Fn8G+ffvqnHPO0e233653331Xubm5fhx58FX1OYx033zzje666y6deeaZ6tWrl7p27aqBAwfq6quv1vTp05WdnR3sIQbVjBkzlJaWpo8//rjK7d544w33Z+jNN9+sctuVK1cqLS1NV1xxRbn7rH3U1rZt25SRkaGRI0eqb9++6tKli/r27auLLrpITzzxhLZt21brfaPuVq9erbS0ND366KPBHgoAoI6igj0AAADqqlevXjrmmGMkSYcPH9bGjRu1cOFCLVq0SBMnTtTVV1/t9zHMmTNHd911l9LT0zV16tQKt8nPz9e4ceP022+/uUMLh8Ohzp07+318gVL2vahI+/btAzia6qvO+4fKJSQk6Mwzz5QkuVwu5eTkaPfu3VqwYIE++ugjTZ06Vf/4xz90xRVXyGazBXm08IXs7GzdfvvtWrZsmSSpTZs26tu3rxISErR//36tXbtWy5Yt0zPPPKPp06frpJNOCvKIAy87O1vTpk1Tt27d3J+Pyrz//vvur2fPnl1h2OpPpaWlevTRR/Xmm2/K5XKpcePG6tq1qxo3bqycnBxt2rRJ69at06uvvqq7775bl19+eUDHZwm379XPPfecpk2bpptuukk333xznffXp08fnX766Zo5c6YuvPBCHXvssXUfJAAgKAhkAQBhb8yYMRo1apT7elFRkSZPnqx58+bpscce0+mnn64OHToEcYSmDRs26LffflPPnj31zjvv+P1406dPV0lJiVq0aOH3Y1mOfC9CzW233aa//e1vat68ebCHElGaNGlSYTiyb98+vfrqq5o5c6b+/e9/648//tCdd94ZhBHCl3JycnTppZfql19+0XHHHacHH3xQffr08dqmuLhYc+fO1XPPPaf9+/cHaaTBNW3aNB0+fPioQdy6dev0888/q2HDhiotLdXmzZu1adMmdenSJUAjle644w4tWLBASUlJuvvuu3XBBRfI4XC47zcMQ998842efPJJ/frrrwEbF8q7+eabtXTpUj3++OOaNm1asIcDAKglWhYAACJObGysJk+erISEBDmdTi1evDjYQ5Ik7dmzR5ICVtHSvn17dezYUdHR0QE5Xjho3ry5OnbsqAYNGgR7KPVC8+bN9a9//Uv33nuvJOm1114LyVYiqJkHH3xQv/zyi9q0aaO33367XBgrSTExMbrooos0b948HXfccUEYZXAdPnxYc+fOVYsWLTRo0KAqt7WqY88991ydddZZXrcFwvvvv68FCxYoOjpar7/+ukaNGuUVxkqSzWbTwIED9e677+qcc84J2NhQXteuXdWpUyd9+umnAWlJBADwDwJZAEBESkxMdFfFHvkLy1dffaXx48erX79+7tYBt956qzZs2FDhvq644gqlpaVp5cqVWr16tSZMmKBTTz1VnTp10pw5czR06FDdddddkqS5c+d69dO84oor3P3+Jk6cWOE2ZR08eFBPPvmkzj33XJ100knq2bOnRo0apf/85z8qLCys0WtQVQ/ZgoICvfLKK0pPT1fPnj110kkn6dxzz9VTTz2lQ4cO1eg4dfXzzz/r73//u/r27avu3bvrvPPO02uvvSan01npczhan8Sy71lZFfVJPdr753K5NGzYMKWlpWnt2rWVHvP++++vUW+/3Nxcvffee7rpppt0xhlnqEePHurRo4fOP/98PfXUUzp8+HCFjyv7mqxYsULXXHONTj75ZHXv3l3p6emaN29epcc8ePCg/v3vf2vIkCHufssPPPCADh48WK0x19Zll12mbt26SZJeffVVr/usPrSTJk1yj2/48OHq2rWr12nby5Yt04MPPqgLLrhAffv2VdeuXXXaaafp1ltv1fr168sdc+bMmUpLS9NDDz1U7r6//e1vSktL04ABA2QYhtd98+bNU1paWoWVvJ9//rkuv/xy9ezZU71799all16qJUuWHPX5b9u2TXfddZf7dT/llFN05ZVXasGCBX4dd9leoyUlJXrllVd07rnnqnv37urbt69uuummGvcE3bVrlz766CNJ0l133aXGjRtXuX1KSopXIHu0XsVl50Nlt1c0T7766iulpaXp7LPPrnQspaWlGjBggNLS0rRlyxav+woLC/X666/rwgsvVJ8+fdxtBh599FEdOHCgyudY2fPIz8/XBRdcILu98l+58vPz3fPgr3/9q0aPHi1J+uijj1RUVFTj49aUYRh66aWXJEkXX3zxUVtLREdHq2fPnuVuX79+vW655RYNHDhQXbt2Vb9+/TRhwgR98803Fe6n7DzYtWuX7rjjDg0YMEBdu3bV8OHD9dRTT6m4uNjrMUf7Xm052v/ZUu2//0rmPHr//fd11VVXeX0vuuqqq7z6/6alpbkrWKdNm+Y13rLze9++fXrooYd05plnqlu3bjrppJM0ePBgXXnllXrttdcqHEN6erpcLpfefvvtSscJAAhttCwAAEQsayGhmJgY921PP/20XnzxRdlsNvXs2VOtW7fWtm3btHDhQn3yySd64IEH9Ne//rXC/S1atEjvvPOOjjvuOPXv31+HDh1STEyMzjzzTK1bt05r1qxR+/bt1bt3b/djjjvuOKWkpCg9PV2//vprhdtYdu3apSuvvFK//fabmjZtqsGDB6ukpEQrV67U448/roULF+qNN95Qo0aN6vS6HDx4UFdddZU2b96spKQknXrqqYqOjta3336rl156SR999JFmzJihtm3b1uk41bF69Wr97W9/U35+vtq1a6cBAwbowIEDeuqpp/T999/7/fiSjvr+2e12XX755Zo6dareeuutCsOI3NxczZ8/X3a7XZdeemm1jrtlyxbde++9atq0qTp06KAuXbq4eyC/9NJLWrhwod599101adKkwsfPnj1bL774ok488UQNGjRIv/32m9atW6eJEye63+OyMjMzddlll2nHjh1q1KiRhgwZIpfLpQ8//FBfffWVjj/++Oq/aLXwl7/8RRs2bNDKlStVWlqqqCjvH0MPHDig0aNHKycnR71791aXLl28qrvvu+8+7dmzRyeccIJ69eqlqKgobd++XQsXLtTixYv15JNPevXp7N+/vyS5e5xaSkpK3FW6mZmZ2rp1qzp16uS+39reerxl+vTpysjIkCR1795d7du3144dO3TjjTdW2ad66dKl+vvf/66ioiJ16NBBZ5xxhrKysrRq1SqtWLFCX3/9tR5++GG/jdt67Lhx47R27Vr16dNHHTt21Pr167V48WKtXLlSc+fOrfbn/fPPP5fT6VTDhg2DsohZZfNkwIABatmypbZv365169apR48e5R775ZdfKjMzU126dPF67fbu3avrrrtOP/74oxo3bqxu3bopMTFRP/zwg1577TUtWrRIb775ptq0aVPtcVpBfUXvR1kLFixQXl6ee0E8yTyLYseOHfrkk090/vnnV/uYtbF161bt2rVLkhny1cZ7772n++67Ty6XSyeeeKL69u2r337
"text/plain": [
"<Figure size 1400x1000 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABW0AAAKyCAYAAACuWPzHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XecE2X+B/DPzCTZbO9L77K79CJFBEVB7J5gQ0WwK3jqWc5y6nliA/2JeoLtEFEUT1TAs+GdKCJK73WBpS59C1uz2ZSZ3x/JTGaSbE+2sJ/368WLycwzM092J9nkO9/n+wiKoiggIiIiIiIiIiIioiZBbOwOEBEREREREREREZEPg7ZERERERERERERETQiDtkRERERERERERERNCIO2RERERERERERERE0Ig7ZERERERERERERETQiDtkRERERERERERERNCIO2RERERERERERERE0Ig7ZERERERERERERETQiDtkRERERERERERERNCIO2RETUoh05cgQZGRnIyMjAkSNHqmw7atQoZGRkYNGiRQ3St5kzZyIjIwMzZ85skPOF+pzqz3bUqFEh6FnDmTt3rnZNfPLJJ43dnUZ1/PhxvPHGG7jhhhtwzjnnoFevXhg0aBDGjRuHF198EVu3bg3YR/3ZnSkmTpyoPSf1X+/evTFixAhMnjwZv/zyS52O2xiv77p4+eWXkZmZiW3btlXaZt++fZg2bRrGjh2LoUOHolevXhg6dCjGjx+PGTNmYN++fQ3YY2rO6vL+Eew1mpGRgX79+uGyyy7DCy+8gGPHjoWpx6GRk5OD3r174y9/+Utjd4WIiJoQBm2JiIiIdL766itteeHChY3Yk7pZtGgRMjIy8OSTT9brOLNnz8aYMWPw3nvvYe/evcjMzMSll16KQYMGoaioCJ988gmuv/56vPrqqyHqedOWmZmJcePGYdy4cRg1ahSsViuWLVuGKVOm4MUXX2zs7oXFvn37MH/+fFx88cXo06dPwHaXy4WXX34ZV155JT766CMcP34cvXv3xqWXXop+/frhyJEj+Ne//oUrr7wSn376aSM8g4bVXALx1QnVe0hD079Gx44di0GDBiEvLw+ffvoprrrqqqA3mZqKDh064IYbbsCPP/6ItWvXNnZ3iIioiTA1dgeIiIjozNSqVSv88MMPMJvNjd2VGtu8eTOys7MRFxcHl8uFXbt2YceOHejVq1djd61Bvfbaa5g9ezbMZjOeeOIJ3HLLLbBYLIY2mzdvxhtvvIGDBw82Ticb2EUXXYQHHnhAeyzLMt588028//77+OSTTzB69GgMGzasxsebMGECLr/8ciQmJoajuyHx6quvwuVyGZ633mOPPYYffvgBMTExePrpp3H11VdDkiRtu6Io+OOPP/D666/j0KFDDdVtaqH8X6MAUFJSgsmTJ2P9+vV47rnnGmykTF1MmTIFX3zxBaZNm4bFixc3dneIiKgJYKYtERERhYXZbEa3bt3QsWPHxu5KjalZtldccQUuvfRSw7qWYtWqVZg9ezYA4I033sAdd9wRELAFgP79++Ojjz7CHXfc0dBdbBJEUcRf/vIXdOjQAQCwZMmSWu2flJSEbt26ISkpKRzdq7cDBw5g+fLl6N+/P7p37x6w/auvvtJuynz44Ye45pprDAFbABAEASNGjMCCBQtw+eWXN1TXiTSxsbH485//DADYsWMHSkpKGrlHlUtNTcX555+PnTt3Yt26dY3dHSIiagKYaUtERFRPEydOxNq1azFv3jzExcXh7bffxrp161BWVoaOHTviuuuuw+233w5BEAL2tdvtmD17Nr799lscO3YMCQkJGD58eI3q2m3fvh1z587Fhg0bkJeXh6ioKPTp0weTJk3CyJEjA9qPGjUKR48exc8//4ysrCzMmzcPWVlZKCoqwrx58zB06NCg53nrrbfw9ttvY/z48Xj++eeDttm6dSuuv/56pKWlYdmyZTCZTDhy5AhGjx6Ndu3aBdT9VGsW7t69G//973/x0UcfYffu3ZBlGZmZmZgyZUrQ5wAAR48excyZM7FixQoUFxejTZs2uPLKK3Hvvffirrvu0n4XlT2fythsNvzwww8AgOuuuw52ux2LFi3Cd999hyeffBIRERFB91uyZAkWLFiAXbt2obS0FDExMUhOTsbAgQNxyy23IDMzU2tbUlKCDz74AL/88gtycnLgcrmQkJCA9u3bY9iwYbjvvvsCMpOLiorw8ccf4+eff8bhw4chyzI6duyIyy67DLfffjsiIyO1turvGAAWL15syNYaMmRIjWr0vvPOO9qxxowZU2VbQRAwaNCgao+pKiwsxIcffoiff/4ZR44cgSiK6NKlCy677DJMnDgRVqs1YJ+VK1di3rx52Lp1K4qKihAVFYXExET07dsX48ePx+DBgwP2WbVqFebPn4/NmzejsLAQsbGxGDhwIO666y4MGDCgxv2tjiRJ6NGjB3JycrSfO1Cz19rMmTMxa9Ys3H///UEzWQ8cOICPP/4Yq1atwokTJyBJElq3bo0hQ4bg5ptvRnp6uqF9ba6Tmpg/fz4URcG4ceMCtimKgvfeew8AcOONN6Jfv35VHstsNgf9uW/duhVz5szBhg0btN9Tv379MHHiRAwfPjyg/ZNPPonFixdj2rRpGDx4MN566y2sXLkSRUVFaN26Na644gr8+c9/DnqTAfC8Z37yySdYt24dcnNzERkZidatW2P48OG45ZZb0K5dO63t//73PyxfvhxbtmzByZMnYbfbkZqaiqFDh+Luu+9G165dDcfW12GdNWsWZs2apT0eN24cpk+frj12uVxYvHgxvvnmG+zevRs2mw1paWk477zzMHnyZLRp08Zw7DVr1mDSpEkYMmQIPvzwQ8ydOxf/+c9/kJOTg8jISAwePBgPP/wwunXrFvCcV65ciZ9//hnr16/HiRMnUFZWhqSkJAwcOBB33HEH+vbta2hf2/eQH3/8EV9++SV27NiB0tJSJCYmYujQoZg8eTLOOuusoL+HTZs24e2338bmzZvhdrvRpUsX3HzzzbjuuuuCtq+vlJQUbdnlchm2FRQU4LvvvsOKFSuwb98+5OXlwWQyoXPnzrj00ktx6623Bn3v1/8NW7hwIb744gtkZ2ejtLQUP//8M9q3b1+n9/trrrkGP//8M+bPnx/0vY2IiFoWBm2JiIhC5Pfff8fcuXPRsWNHDB8+HLm5udiwYQNeeeUVHD9+HE8//bShfXl5OW677TZs3rwZUVFRGDFiBCIiIvD777/j119/xQUXXFDpuT7++GNMnz4dsiyjR48e6Nu3L/Ly8rBmzRr8/vvveOCBB3D//fcH3Xfu3Ln49NNP0bt3b5x33nk4depUQIac3k033YR//etf+Pbbb/HXv/4VcXFxAW3mz58PABg/fjxMppp/vHjrrbfwzjvvYMCAARg5ciT279+PTZs24d5778XMmTMDgobZ2dm45ZZbcPr0aaSlpWH06NEoLy/H3LlzsXr1asiyXONz+/vhhx9QVlamTTQFAJ07d8bBgwfxv//9D1dddVXAPrNmzcLMmTNhMpkwYMAAtGrVCiUlJTh+/Di++uornHXWWVrQtry8HDfffDP27NmDpKQknHPOOYiKikJubi4OHDiAd955B7fffrvhS3x2djbuuusuHD9+HKmpqTj77LNhMpmwbds2/POf/8T//vc/fPLJJ4iNjQUAXHLJJdi8eTM2btyIjh074uyzz9aO5R9kCqa4uBjr168HgKDBuvrIycnBrbfeiqNHjyIpKQkjR46E0+nEmjVr8Nprr2HJkiWYO3cu4uPjtX0WL16Mv/3tbwCAvn37YujQobDb7Th58iR++OEHJCYmBgQ2XnnlFXz44YcQRRG9e/fG2WefjePHj+Pnn3/GsmXL8MILL+Daa68N2fMqLS0FgKCBwtq+1lTffvstnnrqKTgcDrRt2xYjR46ELMvIycnB559/juTkZEPQtrbXSU38/PPPAIBzzz03YNvu3buRk5MDoO7XyRdffIF//OMfkGUZPXv2xNChQ3H06FEsW7YMy5Ytq/I9bNeuXXjppZcQHx+
"text/plain": [
"<Figure size 1400x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"图表绘制完成。\n",
"{'初始资金': 100000.0, '最终资金': np.float64(100744.26660000005), '总收益率': np.float64(0.007442666000000431), '年化收益率': np.float64(0.0051896155406649935), '最大回撤': np.float64(0.0014133567992828994), '夏普比率': np.float64(0.9369977135224267), '卡玛比率': np.float64(3.6718368237221273), '总交易次数': 63, '交易成本': 15.4921, '总实现盈亏': 370.0, '胜率': 0.7096774193548387, '盈亏比': 0.9759959141981613, '盈利交易次数': 22, '亏损交易次数': 9, '平均每次盈利': 28.954545454545453, '平均每次亏损': -29.666666666666668, 'initial_capital': 100000.0, 'final_capital': np.float64(100744.26660000005), 'total_return': np.float64(0.007442666000000431), 'annualized_return': np.float64(0.0051896155406649935), 'max_drawdown': np.float64(0.0014133567992828994), 'sharpe_ratio': np.float64(0.9369977135224267), 'calmar_ratio': np.float64(3.6718368237221273), 'total_trades': 63, 'transaction_costs': 15.4921, 'total_realized_pnl': 370.0, 'win_rate': 0.7096774193548387, 'profit_loss_ratio': 0.9759959141981613, 'winning_trades_count': 22, 'losing_trades_count': 9, 'avg_profit_per_trade': 28.954545454545453, 'avg_loss_per_trade': -29.666666666666668}\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XeYVOXZx/Hvmb69U5ZeBEUQsKMoSuwltthLDBorYlc0iS3G9opBxSiKJWissUQNSqwES8SGXXqRvr3NTj/vH7MzsMsuLDC7Z2b297muvTg788yce2bODnPuuZ/7MUzTNBEREREREREREelENqsDEBERERERERGRrkdJKRERERERERER6XRKSomIiIiIiIiISKdTUkpERERERERERDqdklIiIiIiIiIiItLplJQSEREREREREZFOp6SUiIiIiIiIiIh0OiWlRERERERERESk0ykpJSIiIiIiIiIinU5JKREREWnm7LPP5uyzz7Y6jB2SDo+hK/nss88YOnQon332WULvd+jQoTz44IMJvc9k1/LYX7VqFUOHDuWVV17p1DgmT57M+PHjO3WfIiKSepSUEhERkR02efJkhg4dutnPEUccscXb/ec//2Ho0KG89NJLbY75+OOPGTp0KDNnzkx02GnF7/fz1FNPcfLJJ7PHHnswYsQIDj/8cG677TaWLVtmdXgdZs6cOUmXeGr5d7D77rtz1lln8eGHH1odWtI5++yzmz1Xe++9NyeddBL//Oc/iUQi23x/r7zyCkOHDuW7777rgGhFRCTRHFYHICIiIsnl8ccf367buVwubr/99maX5eTkbPE2Bx10EDk5ObzxxhucfPLJrY558803sdvtHH300dsVV1dQWVnJ+eefzw8//MDBBx/MMcccQ2ZmJsuWLWPWrFm8+OKLfP/991aH2SHmzJnDP/7xDy677LLNrvv222+x2+0WRAX7778/xx13HKZpsmbNGp577jkuuugiHnvsMQ444IBOi6NXr158++23OBzJ+7G/R48eXHXVVQBUVVXx2muv8Yc//IHly5dzzTXXWBydiIh0pOT930lEREQSxuv1kpmZ2a6xLpdru/bhcDg47rjjtuk2LpeLww8/nFdeeYX169fTvXv3Ztf7/X7eeecd9ttvP4qKirYrrq7ghhtu4KeffuKBBx7g8MMPb3bdFVdcwV//+leLIrOW2+22bN/9+/dv9vdw+OGHc9RRRzFz5sxOTUoZhmHp89AeOTk5zZ6rU089lSOOOIJ//OMfXH755TidTgujExGRjqTpeyIiImnmwQcfZOjQoSxevJirr76avfbaizPOOAOAsrIybrjhBg488ECGDx/O2LFjufjii1m1alX89jvSjykcDlNfX79Nt/n1r39NJBJh1qxZm1334YcfUldXx7HHHgvAyy+/zDnnnMOYMWMYPnw4Rx11FM8+++xW9xGb0rPp44S2exl98803nHfeeeyxxx6MHDmSs846iy+//HKL+ygvL2fYsGFMmzZts+uWLl3K0KFDeeaZZwAIBoNMmzaNww47jBEjRrDPPvtw+umn8/HHH2/1sbT0zTff8OGHH/Kb3/xms4QURBN/119/ffz3tl7flj2AYr2IHn/8cf7xj3/wq1/9ipEjRzJhwgTWrl2LaZo89NBDHHjggey2225cfPHFVFdXN7vPtno6jR8/nsmTJ2/xcX3xxRdMmjSJgw46iOHDhzNu3DjuuOMOfD5fs5j/8Y9/xPcV+2lt/2+//TZDhw5l3rx5m+3r+eefZ+jQoSxcuDB+2ZIlS5g0aRJ77703I0aM4MQTT+S9997bYsxbMmjQIAoKCli5cmWzywOBAA888ACHHnpo/HHec889BAKBZuO299hv2VMqdsy39tOyB9ScOXM444wzGDVqFKNHj+aCCy5g0aJFm+3j3Xff5ZhjjmHEiBEcc8wxvPPOO9v69DSTkZHByJEj8Xq9VFZWAtHX8rbbbovva/jw4Rx99NH897//3aF9iYiItVQpJSIikqYuv/xy+vXrx5VXXolpmgBcdtllLF68mLPOOotevXpRWVnJxx9/zNq1a+ndu/cO7a+xsZE99tiDxsZG8vLyOProo7nmmmvIysra4u322msvevTowRtvvMHvfve7Zte9+eabZGRkcMghhwDw3HPPsdNOOzF+/HgcDgcffPABt956K6ZpcuaZZ+5Q/DGffvopv//97xk+fDgTJ07EMAxeeeUVfvvb3/Lss8+y2267tXq74uJi9tprL9566y0mTpzY7LpZs2Zht9vjPbamTZvG9OnTOfnkk9ltt92or6/n+++/54cffmD//fffpnjff/99gG2uUmuvN954g2AwyNlnn011dTUzZszgiiuuYN999+Wzzz7j97//PStWrOCZZ57h7rvv5s4770zIft9++218Ph+nn346+fn5fPvttzzzzDOsW7eOBx54AIhW1GzYsIGPP/6Ye+65Z4v3d9BBB5GZmclbb73F3nvv3ey6WbNmsdNOOzFkyBAAFi1axOmnn0737t35/e9/H7/dpZdeyoMPPsihhx66zY+nrq6O2tpa+vbtG78sEolw8cUX8+WXX3LKKacwaNAgFi5cyN///neWL1/O3/72t/jYRB37gwYN2uy5qqur46677qKwsDB+2WuvvcbkyZMZO3Ys11xzDY2NjTz33HOcccYZvPrqq/H3i48++ojLLruMwYMHc/XVV1NVVcUNN9xAjx49tvk52tSqVauw2+3k5ubGL/vyyy/5z3/+wxlnnEFWVhZPP/00kyZN4oMPPqCgoGCH9iciItZQUkpERCRN7bzzzkyZMiX+e21tLV9//TXXXXcd5513XvzyCy+8cIf3VVJSwvnnn8+wYcMwTZO5c+fy7LPP8vPPP/P0009vsZ+NzWbj6KOP5vHHH2fZsmUMGDAAgPr6eubMmcOhhx4aT2w988wzeDye+G3POusszjvvPJ588smEJKVM0+SWW25hn332YcaMGRiGAcBpp53G0UcfzdSpU3niiSfavP1RRx3FTTfdxMKFC+MJDoC33nqLvfbai+LiYiBaATZu3Dj+/Oc/73DMS5YsAWi2v0Rav349//nPf+L9wSKRCNOnT8fn8/Hyyy/HX9uqqireeOMNbr311u2eArqpa665ptlrfeqpp9KvXz/uu+8+1qxZQ2lpKaNHj6Z///58/PHHW03KeTwexo8fz+zZs/njH/8Y7zVVVlbG559/3iyR+Je//IWePXvy8ssvxx/LGWecwemnn869997brqSU3++PV/msWbOGqVOnEg6Hm1WzvfHGG3zyySc8/fTT7LnnnvHLd9ppJ26++Wa++uordt99dyBxx35xcXGz58o0TS6++GKcTid33XUXAA0NDfzlL3/h5JNPbnaMnnDCCRxxxBFMnz49fvm9995LUVERzz77bPwY2XvvvZkwYQK9evVqV0zhcDj+XFVVVfHcc8/F+6NlZGTExy1ZsoRZs2bFE3v77LMPxx13HP/+978566yz2v0ciIhI8tD0PRERkTR12mmnNfvd4/HgdDqZN28eNTU1Cd3X1VdfzTXXXMNRRx3F0UcfzV133cWVV17JV199xezZs7d6+1//+tdAtDIqZvbs2fj9/vjUvdhjiKmrq6OyspK9996bX375hbq6uh1+HD/99BPLly/n2GOPpaqqisrKSiorK/F6vYwZM4bPP/98iyuCHXrooTgcjmZTERcuXMjixYs56qij4pfl5uayaNEili9fvsMxx6ZLbq0ibXsdccQRzRrWxyrFfv3rXzdLNu62224Eg0HWr1+fkP1u+lrHpnGNHj0a0zT58ccft+s+jzzySCoqKppN4Zs9ezaRSCT++lRXV/O///2PI488kvr6+vgxUFVVxdixY1m+fHm7HuM///lPxowZw5gxYzjppJP43//+x/nnn9+sGvDtt99m0KBBDBw4ML6fyspK9t13X4Bm00o76th/6KGH+OCDD7jrrrsYPHgwAJ988gm1tbUcffTRzeKy2WyMHDkyHteGDRv46aefOOGEE5odI/vvv3/8vtpj6dKl8efqqKOO4plnnuGggw7ijjvuaDZ
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA/81JREFUeJzs3Xd8VfX9x/HXuTs3CzIIe0aWIMOJLKVWxa1tQau2Vv05EcWtbdVai6PSOrDubZ11gop1i4oDKw4ElC0jgSSQ3OTm7vP74+ZeSAiQkHFz730/Hw8enNz7ved+7s25ued+7uf7+RqmaZqIiIiIiIiIiIi0I0uiAxARERERERERkfSjpJSIiIiIiIiIiLQ7JaVERERERERERKTdKSklIiIiIiIiIiLtTkkpERERERERERFpd0pKiYiIiIiIiIhIu1NSSkRERERERERE2p2SUiIiIiIiIiIi0u6UlBIRERERERERkXanpJSIiEiaOv300zn99NMTHUa7WLduHYMGDeKll15KdCjSRFdffTWTJk1q1X2+9NJLDBo0iHXr1rXqfjuyxo79u+++m0GDBrV7LIMGDeLuu+9u9/sVEZGOy5boAERERCR5fPvtt7z00kt8++23LFu2jFAoxLJly3Y6/oUXXuCRRx5h3bp1dOvWrUmJsPPOO48FCxbwySefkJWV1eiYyy67jLfeeov58+fTuXPnFj2mVLZ27VoeeughPvnkEzZt2oTdbmfgwIFMnjyZqVOn4nK5Eh1im7jvvvsoLi7msMMOS3QoQDQZds0118R/tlqt5OfnM3bsWGbMmEFRUVECo+tY1q1bxy9+8Yv4zxaLhaKiIvbee2+mTZvGkCFDmr3P008/nS1btjB37tzWDFVERFqBklIiIiJp6uGHH272bT788EP+85//MHDgQHr27Mnq1at3OvbZZ5/l+uuv54gjjuAPf/gDCxcu5KabbqK2tpZzzjlnp7c77rjjeP/993nnnXc44YQTdri+traW9957j3HjxikhtQsffPABF198MQ6Hg+OPP56BAwcSDAb56quv+Pvf/87y5cv561//mugw28T999/PEUccsUNS6vjjj+foo4/G4XAkJK7p06fTs2dPAoEAixYt4uWXX+arr75i7ty5OJ3Odovj/PPP3+VrsCM45phjmDBhApFIhBUrVvDMM8/w0Ucf8fzzz+9RYkpERDomJaVERERSiNfrxe12N2nsnnwwP+WUU/i///s/XC4XN954406TUj6fj3/+858ccsgh3HXXXQBMmTKFSCTCvffey9SpU8nNzW30tpMmTSIzM5M5c+Y0mpR699138Xq9HHfccc2OP138/PPPzJgxg+7du/P444/TpUuX+HWnnnoqa9as4YMPPkhcgAlitVqxWq0Ju/8JEyYwfPhwAH7zm9/QuXNnHnzwQd59912OOuqodovDZrNhs3XsjwFDhw7l+OOPj/88evRozj//fJ555hluvPHGBEYmIiKtST2lREREklSsL8zy5cu57LLL2H///fntb38LwObNm7nmmmuYMGECw4YNY9y4cZx//vn1eunsSU+pgoKCJk35+vzzz9m6dWs8nphTTz0Vr9e7y4SIy+Xi8MMP57PPPqO8vHyH6+fOnUtmZiaTJk1i69at3HrrrRx77LGMGjWK0aNHc/bZZ7N06dLdxrizx99YL6NIJMJjjz3G0UcfzfDhwzn44IO57rrrqKys3OV9PPzwwwwaNIj169fvcN2sWbMYNmxYfB+rV6/moosuYuzYsQwfPpwJEyYwY8YMPB7Pbh9LQw899BBer5e//e1v9RJSMX369OH3v/89sOt+Ww17AMWOuVWrVnH55Zez7777ctBBB3HHHXdgmiYbN27k/PPPZ/To0YwdO5ZHHnmk3v521tPp888/Z9CgQXz++ee7fFwPP/wwJ598MgceeCD77LMPJ510EvPmzdshZq/Xy8svv8ygQYMYNGgQV199daP3f+6559abKra9qVOnctJJJ9W77NVXX+Wkk05in3324YADDmDGjBls3LhxlzHvyn777QdEk4jbW7FiBdOnT+eAAw5g+PDhnHTSSbz77rv1xrTk2G/YU+rqq6+OP1cN/23/+w8EAtx111388pe/ZNiwYUycOJHbbruNQCBQb/+BQICZM2dy0EEHMWrUKM477zxKSkqa/fxs76CDDgKI/+5iv8uvvvqKm2++mYMOOoiRI0dy4YUXUlFR0aL7EhGR9tOxvyIRERGR3br44ovp06cPM2bMwDRNAC666CKWL1/OaaedRo8ePaioqOCTTz5h48aN9OzZs81j+uGHHwAYNmxYvcv33ntvLBYLS5YsqVcF0dCxxx7Lyy+/zJtvvslpp50Wv3zr1q18/PHHHH300bhcLn766SfeeecdjjzySHr27ElZWRnPPfccp512Gq+//nqr9eq57rrrePnllznppJM4/fTTWbduHf/+97/54YcfeOaZZ7Db7Y3ebvLkyfz973/nzTff5Oyzz6533ZtvvsnYsWPJzc0lEAhw1llnEQgEOO200ygoKKC0tJQPPviAqqoqsrOzmxXv+++/T69evRg9evQeP+ZdmTFjBgMGDOCyyy7jww8/5N5776VTp048++yzHHTQQVx++eXMmTOHW2+9leHDh7P//vu3yv0+8cQTTJo0iWOPPZZgMMjrr7/OxRdfzP33388hhxwCwG233caf/vQn9tlnH6ZMmQJA7969G93f5MmTueqqq/j222/ZZ5994pevX7+eRYsWceWVV8Yvu/fee7nzzjuZPHkyv/71r6moqOCpp57i1FNP5ZVXXiEnJ6fZjyeWrNz+tj/99BOnnHIKRUVF/N///R9ut5s333yTCy+8kLvvvptf/vKXQDSR1VrH/tSpUxkzZky9y+bPn8+cOXPIy8sDoonZ888/n6+++oopU6YwYMAAfvzxRx5//HFWr17Nv/71r/ht//jHP/Laa69xzDHHMHr0aD777LMWTxdcu3YtAJ06dap3+U033UROTg7Tpk1j/fr1PP7449x4443ccccdLbo/ERFpH0pKiYiIJLnBgwcza9as+M9VVVV8/fXXXHnllZx11lnxy88999x2i2nz5s3xZs7bczgcdOrUiU2bNu3y9gcddBCFhYXMnTu3XlJq3rx5BINBjj32WCBaFfPWW29hsWwr/j7++OOZPHky//nPf7jwwgtb/FgWLlzICy+8wO233x6/X4ADDzyQs88+m3nz5tW7fHvdu3dn5MiRvPHGG/WSUt9++y0///wz06ZNA6KVMevWrePOO+/kyCOPjI+LXd8c1dXVlJaW7rQCqDXss88+8SlUU6dOZdKkSdxyyy1ceuml8eTDMcccw/jx43nxxRdbLSn11ltv1avUO/XUUznppJN49NFH40mp448/nhtuuIFevXrtMvEJcNhhh+FwOHjzzTfrJaXefPNNDMNg8uTJQDR5dPfdd3PJJZdw3nnnxccdfvjhnHjiiTz99NP1Lt+Z6upqKioqCAQCfPPNN8yePRuHw8Ghhx4aH/O3v/2Nbt268eKLL8an2P72t7/llFNO4fbbb48npVrz2B81ahSjRo2K/7xmzRr++te/MnbsWE4++WQA5syZw6effsqTTz4Zr/AC2Guvvbj++uv53//+x+jRo1m6dCmvvfYav/3tb7n++uuB6O/psssu2+WiCA3V1tZSUVFBJBJh5cqV3HzzzQD1Xh8QTVI98sgjGIYBRJNnTz75JB6Pp9nJXBERaX+aviciIpLkYh8aY1wuF3a7nS+++GK308vais/n22n1kNPpxOfz7fL2VquVo48+mq+//rreVK+5c+dSUFAQr+pwOBzxD+XhcJgtW7bgdrvp169fvFqrpebNm0d2djZjx46loqIi/m/vvffG7XbvdsrZ5MmTWbx4cbzSA6JJD4fDEW/EHVtl8OOPP6a2trZF8VZXVwOQmZnZov3syq9//ev4ttVqZdiwYZimWe/ynJwc+vXrt8PUtJbYPiFVWVmJx+Nh33333ePfdVZWFhMmTODNN9+MVxkCvPHGG4wcOZLu3bsD8PbbbxOJRJg8eXK9Y6CgoIA
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4VGX2B/DvvXf6ZCZtUiihd+lWREHRVbGi64INdZVVFBZFENDdn1ixLOyi4ioKdhF1rajArqiIFUQQG9ICoaVM6mT63Ht/f0xmIGTSJ5mS7+d58ngz886dk+QSZ07OOa+gqqoKIiIiIiIiIiKidiTGOgAiIiIiIiIiIup4mJQiIiIiIiIiIqJ2x6QUERERERERERG1OyaliIiIiIiIiIio3TEpRURERERERERE7Y5JKSIiIiIiIiIiandMShERERERERERUbtjUoqIiIiIiIiIiNodk1JERERERERERNTumJQiIiLqwCZPnozJkyfHOox2ceDAAfTv3x/vvPNOrEOhJpo3bx7GjRsX1XO+88476N+/Pw4cOBDV88azSNf+k08+if79+7d7LP3798eTTz7Z7s9LRETxSRPrAIiIiCixbNu2De+88w62bduG33//HYFAAL///nvEtfW96Z01axZuuummep9j6tSp+Oabb/DVV18hJSWl3nOsXbsWGzZsQHp6evO/kA6ioKAAy5Ytw1dffYXi4mJotVr069cP48ePx6RJk2AwGGIdYpt45pln0KdPH5x99tmxDgVAMBl21113hT+XJAmZmZkYPXo0Zs6ciZycnBhGF18OHDiAs846K/y5KIrIycnBcccdh+nTp2PgwIHNPufkyZNRXl6ODz/8MJqhEhFRKzEpRURE1IEtX7682Y9Zv349/vOf/6Bfv37o2rUr9u7d2+D60aNH45JLLql126BBgxp8zMUXX4zPPvsMn3zyCSZMmFDnfrfbjU8//RSnnXYaE1IN+Pzzz3HbbbdBp9PhkksuQb9+/eD3+7F582b84x//wK5du/DAAw/EOsw2sXTpUpx77rl1klKXXHIJLrjgAuh0upjENWPGDHTt2hU+nw9bt27Fu+++i82bN+PDDz+EXq9vtzhuueWWBhPD8eDCCy/EmDFjoCgKdu/ejddffx1ffPEF3nzzzRYlpoiIKP4wKUVERJRkXC4XTCZTk9a25I35lVdeib/85S8wGAy4//77G01K9ejRo05SqjHjxo2D2WzGqlWrIial1q1bB5fLhYsvvrhZ5+1I9u/fj5kzZ6Jz58546aWXkJ2dHb7v6quvxr59+/D555/HLsAYkSQJkiTF7PnHjBmDIUOGAAD+9Kc/IT09Hc899xzWrVuH888/v93i0Gg00Gji+63AoEGDav3uGDlyJG655Ra8/vrruP/++2MYGRERRQtnShERESWw0FyYXbt2YdasWTjxxBNx1VVXAQBKSkpw1113YcyYMRg8eDBOO+003HLLLbVm6bRkppTNZmt2y5fH44HX623yeoPBgHPOOQfffvstSktL69z/4Ycfwmw2Y9y4caioqMCjjz6Kiy66CCNGjMDIkSMxZcoUbN++vdHnqe/rjzTLSFEUvPjii7jgggswZMgQnHrqqbjnnntQWVnZ4HMsX74c/fv3x8GDB+vct2jRIgwePDh8jr179+Kvf/0rRo8ejSFDhmDMmDGYOXMmHA5Ho1/LsZYtWwaXy4WHHnqoVkIqpHv37rjuuusANDxv69gZQKFrLj8/H7Nnz8bxxx+PU045BYsXL4aqqjh8+DBuueUWjBw5EqNHj8bzzz9f63z1zXT67rvv0L9/f3z33XcNfl3Lly/HFVdcgZNPPhlDhw7FZZddhjVr1tSJ2eVy4d1330X//v3Rv39/zJs3L+Lz33zzzbVaxY42adIkXHbZZbVue//993HZZZdh6NChOOmkkzBz5kwcPny4wZgbcsIJJwAIJhGPtnv3bsyYMQMnnXQShgwZgssuuwzr1q2rtaY11/6xM6XmzZsX/l4d+3H0z9/n8+GJJ57AH/7wBwwePBhjx47FY489Bp/PV+v8Pp8PCxYswCmnnIIRI0Zg6tSpKCwsbPb352innHIKAIR/dqGf5ebNm/Hwww/jlFNOwfDhwzFt2jSUlZW16rmIiKh9xPefR4iIiKhJbrvtNnTv3h0zZ86EqqoAgL/+9a/YtWsXrrnmGnTp0gVlZWX46quvcPjwYXTt2rXdYnv33XexYsUKqKqK3r1745ZbbsFFF13U6OMuuugivPvuu1i9ejWuueaa8O0VFRX48ssvccEFF8BgMGDnzp345JNPcN5556Fr166w2+144403cM011+Cjjz6K2qyee+65B++++y4uu+wyTJ48GQcOHMBrr72GX3/9Fa+//jq0Wm3Ex40fPx7/+Mc/sHr1akyZMqXWfatXr8bo0aORmpoKn8+HG2+8ET6fD9dccw1sNhuKiorw+eefo6qqChaLpVnxfvbZZ8jLy8PIkSNb/DU3ZObMmejduzdmzZqF9evX4+mnn0ZaWhpWrlyJU045BbNnz8aqVavw6KOPYsiQITjxxBOj8rwvv/wyxo0bh4suugh+vx8fffQRbrvtNixduhRnnHEGAOCxxx7D3//+dwwdOhQTJ04EAHTr1i3i+caPH4+5c+di27ZtGDp0aPj2gwcPYuvWrZgzZ074tqeffhqPP/44xo8fj8svvxxlZWV49dVXcfXVV+O9996D1Wpt9tcTSlYe/didO3fiyiuvRE5ODv7yl7/AZDJh9erVmDZtGp588kn84Q9/ABBMZEXr2p80aRJGjRpV67YNGzZg1apVyMjIABBMzN5yyy3YvHkzJk6ciN69e2PHjh146aWXsHfvXvz73/8OP/Zvf/sbPvjgA1x44YUYOXIkvv3221a3CxYUFAAA0tLSat3+4IMPwmq1Yvr06Th48CBeeukl3H///Vi8eHGrno+IiNoek1JERERJYMCAAVi0aFH486qqKmzZsgVz5szBjTfeGL795ptvbte4RowYgfHjx6Nr164oLi7GihUrMHv2bDgcjnBFV31OOeUUZGVl4cMPP6yVlFqzZg38fn84sdW/f3+sXbsWonikAPySSy7B+PHj8Z///AfTpk1r9dfx/fff46233sLChQtrJdROPvlkTJkyBWvWrKk30da5c2cMHz4cH3/8ca2k1LZt27B//35Mnz4dQLAy5sCBA3j88cdx3nnnhdeF7m+O6upqFBUV1VsBFA1Dhw4Nt1BNmjQJ48aNwyOPPII77rgjnHy48MILcfrpp+Ptt9+OWlJq7dq1tSr1rr76alx22WV44YUXwkmpSy65BPfeey/y8vIabR09++yzodPpsHr16lpJqdWrV0MQBIwfPx5AMHn05JNP4vbbb8fUqVPD68455xxceumlWLFiRa3b61NdXY2ysjL4fD78+OOPWLJkCXQ6Hc4888zwmoceegidOnXC22+/HW6xveqqq3DllVdi4cKF4aRUNK/9ESNGYMSIEeHP9+3bhwceeACjR4/GFVdcAQBYtWoVvv76a7zyyivhCi8A6Nu3L+bPn48ffvgBI0eOxPbt2/HBBx/gqquuwvz58wEEf06zZs2qd1OESNxuN8rKyqAoCvbs2YOHH34YAGr9+wCCSarnn38egiAACCbPXnnlFTgcjmYnc4mIqH2xfY+IiCgJhN40hhgMBmi1WmzcuLHR9rK2tHLlSlx33XU466yzcOWVV+Ltt99Gv3798K9//Qsej6fBx0qShAsuuABbtmyp1er14Ycfwmazhas6dDpd+E25LMsoLy+HyWRCz5498euvv0bl61izZg0sFgtGjx6NsrKy8Mdxxx0Hk8nUaMvZ+PHj8csvv4QrPYBg0kOn04UHcYd2Gfzyyy/hdrtbFW91dTUAwGw2t+o8Dbn88svDx5IkYfDgwVBVtdbtVqsVPXv2rNOa1hpHJ6QqKyvhcDhw/PHHt/hnnZKSgjFjxmD16tXhKkMA+PjjjzF8+HB07twZAPC///0PiqJg/Pjxta4Bm82G7t27N3oNhFx//fUYNWoUxo4dixkzZsBoNOLpp59Gbm4ugGA
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xl4U2X2B/DvvTd7ujelZd/KIrK7wSCLuOKKjgNuzKg4rh0UQRFnRhwXXH4wg4KjKG7oKOo4OoIsM6IiroiKOirKUna6b2m2m9x7f39kgdK0TdukSZPv53n6kCZvbk7T25KcnnNeQdM0DURERERERERERB1IjHcARERERERERESUepiUIiIiIiIiIiKiDsekFBERERERERERdTgmpYiIiIiIiIiIqMMxKUVERERERERERB2OSSkiIiIiIiIiIupwTEoREREREREREVGHY1KKiIiIiIiIiIg6HJNSRERERERERETU4ZiUIiIiSmEzZszAjBkz4h1Ghzhw4AAGDRqEf/3rX/EOhSJ01113YfLkyVE95r/+9S8MGjQIBw4ciOpxE1m4c3/p0qUYNGhQh8cyaNAgLF26tMMfl4iIEpMu3gEQERFR56GqKt5++2385z//wU8//YTa2lr06NED5557LmbOnAmj0djoPm+88Qaee+45HDhwAF27do0oEXbjjTfis88+wyeffIK0tLSwa+bMmYMNGzZg8+bNyM7OjsrXl4z27duHFStW4JNPPkFZWRn0ej0GDhyIKVOmYPr06TCZTPEOMSaeeuopFBYW4owzzoh3KAD8ybD58+eHPpckCbm5uRg3bhxmz56N/Pz8OEaXWA4cOIDTTz899LkoisjPz8fxxx+PoqIiHHfcca0+5owZM1BdXY01a9ZEM1QiImonJqWIiIhS2LPPPtuq9S6XC/Pnz8fIkSNx2WWXITc3F9988w2WLl2Kzz77DCtXroQgCKH1q1atwoIFC3D22WfjmmuuwdatW/HAAw/A5XLh+uuvb/JxLrzwQnzwwQd47733MHXq1LBxvP/++zj11FOZkGrGhx9+iFtvvRUGgwEXXXQRBg4cCK/Xi6+++gr/93//h507d+L++++Pd5gxsXz5cpx99tmNklIXXXQRzjvvPBgMhrjENWvWLPTo0QOyLGPbtm1466238NVXX2HNmjVhk7qxctNNNzX7M5gIzj//fEyYMAGqqmLXrl149dVX8dFHH+H1119vU2KKiIgSD5NSREREScbpdMJisUS0trVvzPV6PV599VWMHj06dN20adPQvXv3UGLqV7/6FQDA7Xbjb3/7GyZNmoTHH388tFZVVTz55JOYPn06MjMzwz7O5MmTYbVasXr16rBJqY0bN8LpdOLCCy9sVfypZP/+/Zg9eza6deuGF198EV26dAndduWVV2Lv3r348MMP4xdgnEiSBEmS4vb4EyZMwLBhwwAAv/nNb5CdnY1nnnkGGzduxLnnntthceh0Ouh0if1WYMiQIbjoootCn48ePRo33XQTXn31Vdx3331xjIyIiKKFM6WIiIg6seBcmJ07d2LOnDk46aSTcMUVVwAAysvLMX/+fEyYMAFDhw7FqaeeiptuuqnBLJ3WzpQyGAwNElJBZ555JgBg165doeu++OIL1NTUhOIJuvLKK+F0OptNiJhMJpx11ln4/PPPUVlZ2ej2NWvWwGq1YvLkyaipqcEjjzyCCy64AKNGjcLo0aNx3XXXYfv27S1+PU19/eFmGamqihdeeAHnnXcehg0bhl/96le45557UFtb2+xjPPvssxg0aBAOHjzY6LbFixdj6NChoWPs2bMHf/jDHzBu3DgMGzYMEyZMwOzZs2G321v8Wo61YsUKOJ1OPPjggw0SUkG9e/fG7373OwDNz9s6dgZQ8JwrLi7G3LlzccIJJ2DMmDFYsmQJNE3D4cOHcdNNN2H06NEYN24cnnvuuQbHa2qm0xdffIFBgwbhiy++aPbrevbZZ3HZZZfhlFNOwfDhw3HJJZdg/fr1jWJ2Op146623MGjQIAwaNAh33XVX2Me/4YYbGrSKHW369Om45JJLGlz373//G5dccgmGDx+Ok08+GbNnz8bhw4ebjbk5J554IgB/EvFou3btwqxZs3DyySdj2LBhuOSSS7Bx48YGa9pz7h87U+quu+4KPVfHfhz9/ZdlGY8//jjOPPNMDB06FBMnTsSjjz4KWZYbHF+WZSxcuBBjxozBqFGjcOONN6KkpKTVz8/RxowZAwCh713we/nVV1/hoYcewpgxYzBy5EjccsstqKqqatdjERFRx0jsP48QERFRRG699Vb07t0bs2fPhqZpAIA//OEP2LlzJ6666ip0794dVVVV+OSTT3D48GH06NEjqo9fUVEBAA1a6X788UcAwNChQxusPf744yGKIn766acGVRDHuuCCC/DWW29h3bp1uOqqq0LX19TU4OOPP8Z5550Hk8mEHTt24L333sM555yDHj16oKKiAq+99hquuuoqvPvuu1Gb1XPPPffgrbfewiWXXIIZM2bgwIED+Mc//oEff/wRr776KvR6fdj7TZkyBf/3f/+HdevW4brrrmtw27p16zBu3DhkZmZClmXMnDkTsizjqquugs1mQ2lpKT788EPU1dUhPT29VfF+8MEH6NmzZ9gkYjTMnj0b/fv3x5w5c7Bp0yY8+eSTyMrKwqpVqzBmzBjMnTsXq1evxiOPPIJhw4bhpJNOisrjrly5EpMnT8YFF1wAr9eLd999F7feeiuWL1+OSZMmAQAeffRR/OlPf8Lw4cMxbdo0AECvXr3CHm/KlCmYN28evvvuOwwfPjx0/cGDB7Ft2zbceeedoeuefPJJPPbYY5gyZQouvfRSVFVV4eWXX8aVV16Jt99+GxkZGa3+eoLJyqPvu2PHDlx++eXIz8/H73//e1gsFqxbtw633HILli5dGkoC79+/P2rn/vTp0zF27NgG123evBmrV69GTk4OAH9i9qabbsJXX32FadOmoX///vjll1/w4osvYs+ePfj73/8euu8f//hHvPPOOzj//PMxevRofP755+1uF9y3bx8AICsrq8H1DzzwADIyMlBUVISDBw/ixRdfxH333YclS5a06/GIiCj2mJQiIiJKAoMHD8bixYtDn9fV1eGbb77BnXfeiZkzZ4auv+GGG2Ly+CtWrEBaWhomTJgQuq68vDw0zPloBoMBWVlZKCsra/aYY8aMQV5eHtasWdMgKbV+/Xp4vV5ccMEFAPxVMRs2bIAoHikAv+iiizBlyhT885//xC233NLur2/r1q144403sGjRotDjAsApp5yC6667DuvXr29w/dG6deuGkSNHYu3atQ2SUt999x3279+PoqIiAP7KmAMHDuCxxx7DOeecE1oXvL016uvrUVpa2mQFUDQMHz481EI1ffp0TJ48GQ8//DBuv/32UPLh/PPPx/jx4/Hmm29GLSm1YcOGBsPZr7zySlxyySV4/vnnQ0mpiy66CPfeey969uzZbOITAM444wwYDAasW7euQVJq3bp1EAQBU6ZMAeBPHi1duhS33XYbbrzxxtC6s846CxdffDFeeeWVBtc3pb6+HlVVVZBlGd9++y2WLVsGg8GA0047LbTmwQcfRNeuXfHmm2+GWmyvuOIKXH755Vi0aFEoKRXNc3/UqFEYNWpU6PO9e/fi/vvvx7hx43DZZZcBAFavXo1PP/0UL730UqjCCwAGDBiABQsW4Ouvv8bo0aOxfft2vPPOO7jiiiuwYMECAP7v05w5c/Dzzz9HHJPL5UJVVRVUVcXu3bvx0EMPAUCDnw/An6R67rnnQvPsVFXFSy+9BLvd3upkLhERdSy27xERESWB4JvGIJPJBL1ejy1btrTYXtZeTz31FD799FPMmTOnQbWH2+1usnrIaDTC7XY3e1xJknDeeefhm2++adDqtWbNGthstlBVh8FgCL0pVxQF1dXVsFgs6Nu3b6haq73Wr1+P9PR0jBs3DlVVVaGP448/HhaLpcWWsylTpuCHH34IVXoA/qSHwWAIDeIO7jL48ccfw+VytSve+vp6AIDVam3XcZpz6aW
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA+mdJREFUeJzs3Xd4VGXax/HvmZ4OISH0Ik0RpNhFQdF1xa6romtd9bWyKIp9V2yLZWFFxbVhdxV1raDC2sWKDd21IB0BgTRImUw95/1jMgOBAQIkOZOZ3+e6cnEy88w594Q5yZl77ud+DMuyLERERERERERERFqQw+4AREREREREREQk8ygpJSIiIiIiIiIiLU5JKRERERERERERaXFKSomIiIiIiIiISItTUkpERERERERERFqcklIiIiIiIiIiItLilJQSEREREREREZEWp6SUiIiIiIiIiIi0OCWlRERERERERESkxSkpJSIiksHOPPNMzjzzTLvDaBErVqygX79+vPzyy3aHIo107bXXMnLkyCbd58svv0y/fv1YsWJFk+43lSV77d93333069evxWPp168f9913X4sfV0REUpPL7gBERESk9TBNk1dffZX//Oc//PTTT6xfv54uXbpw5JFHct555+H1ehuM39Kb3iuvvJILLrhgi8e56KKL+Oyzz/jkk0/Izc3d4j5mz57NnDlzaNu27Y4/qTS3fPlypk2bxieffMLatWtxu9307duXUaNGMXr0aHw+n90hNosHH3yQ3r17c9hhh9kdChBLhl133XWJ751OJ+3atWPYsGGMGzeOkpISG6NLLStWrODQQw9NfO9wOCgpKWH33XdnzJgx7Lbbbtu9zzPPPJPKykpmzpzZlKGKiMhOUlJKREQkgz366KPbNb6uro7rrruOwYMHc+qpp9KuXTu+/fZb7rvvPj777DOeeuopDMNo8Jhhw4Zx3HHHNbitf//+Wz3Osccey/vvv88777zD8ccfnzSO9957jwMPPFAJqa344IMPuOyyy/B4PBx33HH07duXcDjM119/zd///ncWLlzIrbfeaneYzeKhhx7i97///WZJqeOOO46jjjoKj8djS1xjx46lS5cuhEIh5s2bxyuvvMLXX3/NzJkzN0vqNqeLL754q4nhVHD00UczfPhwTNNk0aJFPPfcc3z00Ue88MILO5SYEhGR1KOklIiISJrx+/1kZ2c3auz2vjF3u90899xzDB06NHHbKaecQufOnROJqQMOOKDBY3r06LFZUmpbRo4cSU5ODjNmzEialHr33Xfx+/0ce+yx27XfTPLrr78ybtw4OnXqxJNPPkn79u0T951++uksW7aMDz74wL4AbeJ0OnE6nbYdf/jw4QwcOBCAk08+mbZt2/LII4/w7rvvcuSRR7ZYHC6XC5crtd8K9O/fv8HvjqFDh3LxxRfz3HPPccstt9gYmYiINBX1lBIREWnF4n1hFi5cyJVXXsnee+/NH//4RwBKS0u57rrrGD58OAMGDODAAw/k4osvbtBLZ3t7Snk8ngYJqbjf/e53ACxatCjp4wKBAMFgsNHH8fl8HH744Xz++eeUl5dvdv/MmTPJyclh5MiRrFu3jjvvvJNjjjmGIUOGMHToUM4//3x+/vnnbR5nS88/WS8j0zR54oknOOqooxg4cCAHHHAAN954I+vXr9/qMR599FH69evHypUrN7tv8uTJDBgwILGPpUuX8uc//5lhw4YxcOBAhg8fzrhx46iurt7mc9nUtGnT8Pv9/O1vf2uQkIrr3r07Z599NrD1flub9gCKv+aWLFnC+PHj2XPPPdlvv/2YMmUKlmXx22+/cfHFFzN06FCGDRvGY4891mB/W+rp9MUXX9CvXz+++OKLrT6vRx99lFNPPZV9992XPfbYgxNPPJFZs2ZtFrPf7+eVV16hX79+9OvXj2uvvTbp8S+88MIGU8U2Nnr0aE488cQGt7322muceOKJ7LHHHuyzzz6MGzeO3377basxb81ee+0FxJKIG1u0aBFjx45ln332YeDAgZx44om8++67DcbszGt/055S1157beJntenXxv//oVCIe++9l9/97ncMGDCAESNGcNdddxEKhRrsPxQKMXHiRPbbbz+GDBnCRRddxOrVq7f757Ox/fbbDyDxfxf/v/z666+5/fbb2W+//Rg8eDCXXnopFRUVO3UsERFpGan98YiIiIg0ymWXXUb37t0ZN24clmUB8Oc//5mFCxdyxhln0LlzZyoqKvjkk0/47bff6NKlS5Mev6ysDCDpVLpXXnmFZ599Fsuy6NWrFxdffDHHHHPMNvd5zDHH8Morr/DWW29xxhlnJG5ft24dH3/8MUcddRQ+n48FCxbwzjvvcMQRR9ClSxfKysp4/vnnOeOMM3jjjTearFfPjTfeyCuvvMKJJ57ImWeeyYoVK/jXv/7Fjz/+yHPPPYfb7U76uFGjRvH3v/+dt956i/PPP7/BfW+99RbDhg2joKCAUCjEeeedRygU4owzzqCoqIg1a9bwwQcfUFVVRV5e3nbF+/7779O1a9ekScSmMG7cOHr16sWVV17Jhx9+yAMPPECbNm2YPn06++23H+PHj2fGjBnceeedDBw4kL333rtJjvvUU08xcuRIjjnmGMLhMG+88QaXXXYZDz30EAcffDAAd911F3/5y1/YY489OOWUUwDo1q1b0v2NGjWKa665hu+//5499tgjcfvKlSuZN28eV199deK2Bx54gHvuuYdRo0Zx0kknUVFRwTPPPMPpp5/Oq6++Sn5+/nY/n3iycuPHLliwgNNOO42SkhL+7//+j+zsbN566y0uvfRS7rvvvkQS+Ndff22y1/7o0aPZf//9G9w2Z84cZsyYQWFhIRBLzF588cV8/fXXnHLKKfTq1YtffvmFJ598kqVLl/LPf/4z8dgbbriB119/naOPPpqhQ4fy+eef7/R0weXLlwPQpk2bBrffdttt5OfnM2bMGFauXMmTTz7JLbfcwpQpU3bqeCIi0vyUlBIREUkDu+66K5MnT058X1VVxbfffsvVV1/Neeedl7j9wgsvbJbjT5s2jdzcXIYPH97g9iFDhjBq1Ci6dOnC2rVrefbZZxk/fjzV1dWJiq4t2W+//SguLmbmzJkNklKzZs0iHA4nElv9+vVj9uzZOBwbCsCPO+44Ro0axb///W8uvfTSnX5+X331FS+++CKTJk1qkFDbd999Of/885k1a9YWE22dOnVi8ODBvPnmmw2SUt9//z2//vorY8aMAWKVMStWrOCee+7hiCOOSIyL3789ampqWLNmzRYrgJrCHnvskZhCNXr0aEaOHMkdd9zBFVdckUg+HH300Rx00EG89NJLTZaUmj17doPm7Keffjonnngijz/+eCIpddxxx3HTTTfRtWvXbU4dPeyww/B4PLz11lsNklJvvfUWhmEwatQoIJY8uu+++7j88su56KKLEuMOP/xwTjjhBJ599tkGt29JTU0NFRUVhEIhvvvuO6ZOnYrH4+GQQw5JjPnb3/5Gx44deemllxJTbP/4xz9y2mmnMWnSpERSqilf+0OGDGHIkCGJ75ctW8att97KsGHDOPXUUwGYMWMGn376KU8//XSiwgugT58+TJgwgW+++YahQ4fy888/8/rrr/PHP/6RCRMmALH/pyuvvJL58+c3Oqa6ujoqKiowTZPFixdz++23AzQ4PyCWpHrssccS/exM0+Tpp5+murp6u5O5IiLSsjR9T0REJA3E3zTG+Xw+3G43c+fO3eb0sp314IMP8umnn3LllVduVikyffp0zj77bA499FBOO+00XnrpJfr27cvdd99NIBDY6n6dTidHHXUU3377bYOpXjNnzqSoqChR1eHxeBJvyqPRKJWVlWRnZ9OzZ09+/PHHJnmOs2bNIi8vj2HDhlFRUZH42n333cnOzt7mlLNRo0bxww8/JCo9IJb08Hg8iUbc8VUGP/74Y+rq6nYq3pqaGgBycnJ2aj9bc9JJJyW2nU4nAwYMwLKsBrfn5+fTs2fPzaam7YyNE1Lr16+nurqaPffcc4f/r+PJ1LfeeitRZQjw5pt
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XeYVOXZx/HvmT6zlWWXXgVBEaTYICgoGhV7i8aoie21Euw1iRhjbJEEFWNDjZpYY2+YWKJoVGyoUVGRDrK9T59z3j9mZ2DZARbY3Zmd+X2uay/Ozjxzzj2zc4aZe+7nfgzLsixERERERERERES6kC3dAYiIiIiIiIiISO5RUkpERERERERERLqcklIiIiIiIiIiItLllJQSEREREREREZEup6SUiIiIiIiIiIh0OSWlRERERERERESkyykpJSIiIiIiIiIiXU5JKRERERERERER6XJKSomIiIiIiIiISJdTUkpERCSHnXLKKZxyyinpDqNLrF69mpEjR/LMM8+kOxRppyuvvJJp06Z16D6feeYZRo4cyerVqzt0v5ks1XP/jjvuYOTIkV0ey8iRI7njjju6/LgiIpKZHOkOQERERLqXJ598khdeeIGlS5fS0NBAr1692GuvvTj//PMZMGBAm/FPPfUUDzzwAKtXr6Zv377tSoSdc845vP/++7z33nvk5+enHHPJJZfw2muvsWDBAnr06NEh9y0brVy5knnz5vHee+9RUVGB0+lkxIgRTJ8+nRNOOAGPx5PuEDvF3XffzfDhwznggAPSHQoQT4ZdddVVyd/tdjs9e/Zk8uTJXHTRRfTu3TuN0WWW1atXs//++yd/t9ls9O7dm1122YUZM2aw8847b/U+TznlFGpra3nppZc6MlQREdlOSkqJiIjksPvvv3+rb/P1118zYMAApk2bRmFhIatXr+app57irbfe4vnnn2/14frxxx9n1qxZHHTQQZx22ml8/PHHXH/99QQCAc4666xNHuOII47grbfe4vXXX+eoo45qc30gEODNN99k7733VkJqM/7zn/9wwQUX4HK5OPLIIxkxYgSRSIRPPvmEP/3pTyxZsoQ//OEP6Q6zU9xzzz0cdNBBbZJSRx55JIceeigulystcc2cOZMBAwYQDodZtGgRzz77LJ988gkvvfQSbre7y+I499xzN3sOZoLDDjuMKVOmYJomP/zwA4899hjvvPMOTz755DYlpkREJPMoKSUiIpJl/H4/Pp+vXWO35YP5tdde2+ayAw44gGOPPZbnn38++UE3GAzyl7/8hX333Zfbb78dgOOPPx7TNLnrrrs44YQTKCoqSnmMadOmkZeXx4svvpgyKfXGG2/g9/s54ogjtjr+XLFq1Souuugi+vXrx0MPPUSvXr2S15100kmsWLGC//znP+kLME3sdjt2uz1tx58yZQpjxowB4Gc/+xk9evTgvvvu44033uCQQw7psjgcDgcOR2Z/FBg1ahRHHnlk8vcJEyZw7rnn8thjj3HdddelMTIREeko6iklIiLSjSX6wixZsoRLLrmEPfbYg1/84hcAVFZWctVVVzFlyhRGjx7N3nvvzbnnntuql05H9ZTq378/AA0NDcnLPvzwQ+rq6pLxJJx00kn4/f7NJkQ8Hg8HHnggH3zwAdXV1W2uf+mll8jLy2PatGnU1dVx8803c/jhhzN+/HgmTJjAmWeeyeLFi7cY96buf6peRqZp8re//Y1DDz2UMWPG8JOf/IRrrrmG+vr6zR7j/vvvZ+TIkaxZs6bNdbNnz2b06NHJfSxfvpxf//rXTJ48mTFjxjBlyhQuuugiGhsbt3hfNjZv3jz8fj9//OMfWyWkEgYPHsyvfvUrYPP9tjbuAZR4zi1btoxLL72U3XbbjYkTJzJnzhwsy+LHH3/k3HPPZcKECUyePJkHHnig1f421dPpww8/ZOTIkXz44YebvV/3338/P//5z9lrr73YddddOeaYY5g/f36bmP1+P88++ywjR45k5MiRXHnllSmPf/bZZ7eaKrahE044gWOOOabVZc8//zzHHHMMu+66K3vuuScXXXQRP/7442Zj3pzdd98diCcRN/TDDz8wc+ZM9txzT8aMGcMxxxzDG2+80WrM9jz3N+4pdeWVVyYfq41/Nvz7h8Nhbr/9dn76058yevRopk6dyi233EI4HG61/3A4zA033MDEiRMZP34855xzDuvWrdvqx2dDEydOBEj+7RJ/y08++YQbb7yRiRMnMm7cOM4//3xqamq261giItI1MvvrEREREWmXCy64gMGDB3PRRRdhWRYAv/71r1myZAknn3wy/fv3p6amhvfee48ff/wxZe+nrVVbW4tpmqxdu5Y777wTgEmTJiWv//rrrwEYPXp0q9vtsssu2Gw2vvnmm1ZVEBs7/PDDefbZZ3n11Vc5+eSTk5fX1dXx7rvvcuihh+LxePj+++95/fXXOfjggxkwYABVVVU88cQTnHzyybz88ssd1qvnmmuu4dlnn+WYY47hlFNOYfXq1fzjH//g66+/5rHHHsPpdKa83fTp0/nTn/7Eq6++yplnntnquldffZXJkydTVFREOBzmjDPOIBwOc/LJJ1NaWkp5eTn/+c9/aGhooKCgYKvifeuttxg4cCATJkzY5vu8ORdddBHDhg3jkksu4e233+auu+6iuLiYxx9/nIkTJ3LppZfy4osvcvPNNzNmzBj22GOPDjnuww8/zLRp0zj88MOJRCK8/PLLXHDBBdxzzz3su+++ANxyyy389re/Zdddd+X4448HYNCgQSn3N336dK644gq++OILdt111+Tla9asYdGiRVx++eXJy+666y5uu+02pk+fznHHHUdNTQ1///vfOemkk3juuecoLCzc6vuTSFZueNvvv/+eE088kd69e/N///d/+Hw+Xn31Vc4//3zuuOMOfvrTnwLxRFZHPfdPOOGEVucvwIIFC3jxxRcpKSkB4onZc889l08++YTjjz+eYcOG8d133/HQQw+xfPly/vrXvyZv+5vf/IYXXniBww47jAkTJvDBBx9s93TBlStXAlBcXNzq8uuvv57CwkJmzJjBmjVreOihh7juuuuYM2fOdh1PREQ6n5JSIiIiWWCnnXZi9uzZyd8bGhr47LPPuPzyyznjjDOSl5999tkddswpU6YkqyOKi4v57W9/y+TJk5PXV1ZWJps5b8jlclFcXExFRcVm9z9x4kTKysp46aWXWiWl5s+fTyQS4fDDDwfiVTGvvfYaNtv6AvAjjzyS6dOn889//pPzzz9/u+/rxx9/zFNPPcWtt96aPC7AXnvtxZlnnsn8+fNbXb6hfv36MW7cOF555ZVWSakvvviCVatWMWPGDCBeGbN69Wpuu+02Dj744OS4xPVbo6mpifLy8k1WAHWEXXfdNTmF6oQTTmDatGncdNNNXHzxxcnkw2GHHcY+++zD008/3WFJqddee61Vc/aTTjqJY445hgcffDCZlDryyCO59tprGThw4GYTnxCfeupyuXj11VdbJaVeffVVDMNg+vTpQDx5dMcdd3DhhRdyzjnnJMcdeOCBHH300Tz66KOtLt+UpqYmampqCIfDfP7558ydOxeXy8V+++2XHPPHP/6Rvn378vTTTyen2P7iF7/gxBNP5NZbb00mpTryuT9+/HjGjx+f/H3FihX84Q9/YPLkyfz85z8H4MUXX+S///0vjzzySLLCC2DHHXdk1qxZfPrpp0yYMIHFixfzwgsv8Itf/IJZs2YB8b/TJZdcwrffftvumAKBADU1NZimydKlS7nxxhsBWp0fEH/9eeCBBzAMA4gnzx555BEaGxu3OpkrIiJdS9P3REREskDiQ2OCx+PB6XSycOHCLU4v21b33Xcf9957L1deeSX9+vUjEAi0uj4YDG6yesjtdhMMBje7f7vdzqGHHspnn33WaqrXSy+9RGlpabKqw+VyJT+Ux2Ixamtr8fl8DB06NFmttb3mz59PQUEBkydPpqamJvmzyy674PP5tjjlbPr06Xz11VfJSg+IJz1cLleyEXdilcF33323zWO5tZqamgDIy8vbrv1sznHHHZf
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XeYVOXZx/Hvmbo72xtL70URFLAHBUWjYm+xRI1GjZVgLLElEV81tsgbC8aGJpZYYy/AG0sQjV3RREV6l+19+pzz/jE7AwuzsMDszuzs73Nde3GYeeace2f27M65537ux7Asy0JERERERERERKQL2VIdgIiIiIiIiIiI9DxKSomIiIiIiIiISJdTUkpERERERERERLqcklIiIiIiIiIiItLllJQSEREREREREZEup6SUiIiIiIiIiIh0OSWlRERERERERESkyykpJSIiIiIiIiIiXU5JKRERERERERER6XJKSomIiPRgZ511FmeddVaqw+gSa9euZdSoUbz00kupDkU66Nprr2XKlClJ3edLL73EqFGjWLt2bVL3m84S/ezfd999jBo1qstjGTVqFPfdd1+XH1dERNKTI9UBiIiISPfy/PPP89prr7F8+XIaGxvp1asX++67L5deein9+/dvM7a9i94rr7ySCy64oN1jXHTRRXz00Ud8+OGH5ObmtruPefPmsWDBAoqKinb8G8pwq1evZvbs2Xz44YdUVlbidDoZOXIkU6dO5dRTTyUrKyvVIXaKBx98kOHDh3PooYemOhQgmgy77rrr4v+32+2UlJQwceJELr/8csrLy1MYXXpZu3YthxxySPz/NpuN8vJydtttN6ZNm8auu+663fs866yzqKur44033khmqCIispOUlBIREenBHn300e1+zHfffUf//v2ZMmUK+fn5rF27lhdeeIH33nuPV199dYuL64kTJ3Lccce1uW306NFbPcaxxx7Le++9x9tvv83xxx+/xf0+n493332XAw44QAmprfjXv/7FZZddhsvl4rjjjmPkyJGEQiG++OIL/vSnP7F06VJuvvnmVIfZKR566CEOP/zwLZJSxx13HEcddRQulyslcU2fPp3+/fsTDAZZuHAhL7/8Ml988QVvvPEGbre7y+K4+OKLt5oYTgdHH300kyZNwjRNli1bxjPPPMP777/P888/v0OJKRERST9KSomIiGQYr9eLx+Pp0NgduTC/8cYbt7jt0EMP5aSTTuLVV1/d4kJ38ODBWySltmXKlCnk5OTw+uuvJ0xKvfPOO3i9Xo499tjt2m9PsmbNGi6//HL69u3L448/Tq9eveL3nXHGGaxatYp//etfqQswRex2O3a7PWXHnzRpEmPHjgXgZz/7GUVFRTzyyCO88847HHnkkV0Wh8PhwOFI70uB0aNHt/ndMWHCBC6++GKeeeYZbrrpphRGJiIiyaKeUiIiIt1YrC/M0qVLufLKK9l77735+c9/DkBVVRXXXXcdkyZNYsyYMRxwwAFcfPHFbXrpJKunVL9+/QBobGxMeL/f7ycQCHR4f1lZWRx22GF8/PHH1NTUbHH/G2+8QU5ODlOmTKG+vp477riDY445hvHjxzNhwgTOP/98Fi1atM3jtPf9J+plZJomf/vb3zjqqKMYO3YsP/nJT7jhhhtoaGjY6jEeffRRRo0axbp167a4b+bMmYwZMya+j5UrV/LrX/+aiRMnMnbsWCZNmsTll19OU1PTNr+Xzc2ePRuv18sf//jHNgmpmEGDBnH22WcDW++3tXkPoNjP3IoVK7jqqqvYc8892W+//bj77ruxLIsff/yRiy++mAkTJjBx4kQee+yxNvtrr6fTJ598wqhRo/jkk0+2+n09+uijnHbaaey7777svvvunHjiicydO3eLmL1eLy+//DKjRo1i1KhRXHvttQmPf+GFF7aZKrapU089lRNPPLHNba+++ionnngiu+++O/vssw+XX345P/7441Zj3pq99toLiCYRN7Vs2TKmT5/OPvvsw9ixYznxxBN555132ozZmZ/9zXtKXXvttfHnavOvTV//YDDIvffey09/+lPGjBnD5MmTufPOOwkGg232HwwGufXWW9lvv/0YP348F110ERs2bNju52dT++23H0D8tYu9ll988QW33XYb++23H+PGjePSSy+ltrZ2p44lIiJdI70/HhEREZEOueyyyxg0aBCXX345lmUB8Otf/5qlS5dy5pln0q9fP2pra/nwww/58ccft+j9tCPq6uowTZP169dz//33A7D//vtvMe7ll1/m6aefxrIshg0bxsUXX8wxxxyzzf0fc8wxvPzyy8yZM4czzzwzfnt9fT0ffPABRx11FFlZWSxZsoS3336bI444gv79+1NdXc1zzz3HmWeeyZtvvpm0Xj033HADL7/8MieeeCJnnXUWa9eu5e9//zvfffcdzzzzDE6nM+Hjpk6dyp/+9CfmzJnD+eef3+a+OXPmMHHiRAoKCggGg5x33nkEg0HOPPNMSktLqaio4F//+heNjY3k5eVtV7zvvfceAwYMYMKECTv8PW/N5ZdfzrBhw7jyyiuZP38+DzzwAIWFhTz77LPst99+XHXVVbz++uvccccdjB07lr333jspx33iiSeYMmUKxxxzDKFQiDfffJPLLruMhx56iIMOOgiAO++8k9///vfsvvvunHLKKQAMHDgw4f6mTp3KNddcwzfffMPuu+8ev33dunUsXLiQq6++On7bAw88wD333MPUqVM5+eSTqa2t5amnnuKMM87glVdeIT8/f7u/n1iyctPHLlmyhNNPP53y8nJ+9atf4fF4mDNnDpdeein33XcfP/3pT4FoIitZP/unnnrqFufvggULeP311ykuLgaiidmLL76YL774glNOOYVhw4axePFiHn/8cVauXMlf/vKX+GN/97vf8dprr3H00UczYcIEPv74452eLrh69WoACgsL29x+yy23kJ+fz7Rp01i3bh2PP/44N910E3ffffdOHU9ERDqfklIiIiIZYJdddmHmzJnx/zc2NvLVV19x9dVXc95558Vvv/DCC5N2zEmTJsWrIwoLC/n973/PxIkT24wZP348U6dOpX///lRWVvL0009z1VVX0dTUFK/oas9+++1HWVkZb7zxRpuk1Ny5cwmFQvHE1qhRo5g3bx4228YC8OOOO46pU6fyj3/8g0svvXSnv9fPP/+cF154gbvuuqtNQm3ffffl/PPPZ+7cue0m2vr27cu4ceN466232iSlvvnmG9asWcO0adOAaGXM2rVrueeeezjiiCPi42L3b4/m5mYqKirarQBKht133z0+herUU09lypQp3H777VxxxRXx5MPRRx/NgQceyIsvvpi0pNS8efPaNGc/44wzOPHEE/nrX/8aT0odd9xx3HjjjQwYMGCbU0cPPfRQXC4Xc+bMaZOUmjNnDoZhMHXqVCCaPLrvvvv4zW9+w0UXXRQfd9hhh3HCCSfw9NNPt7m9Pc3NzdTW1hIMBvn666+ZNWsWLpeLgw8+OD7mj3/8I3369OHFF1+MT7H9+c9/zumnn85dd90VT0ol82d//PjxjB8/Pv7/VatWcfPNNzNx4kROO+00AF5//XX+/e9/8+STT8YrvABGjBjBjBkz+PLLL5kwYQKLFi3itdde4+c//zkzZswAoq/TlVdeyQ8//NDhmHw+H7W1tZimyfLly7ntttsA2pwfEP3989hjj2EYBhBNnj355JM0NTVtdzJXRES6lqbviYiIZIDYRWNMVlYWTqeTTz/9dJvTy3bUI488wsMPP8y1115L37598fl8W4x59tlnOfvssznkkEM4/fTTefHFFxk5ciR//vOf8fv9W92/3W7nqKOO4quvvmoz1euNN96gtLQ0XtXhcrniF+WRSIS6ujo8Hg9Dhgzhu+++S8r3OnfuXPLy8pg4cSK1tbXxr9122w2Px7PNKWdTp07l22+/jVd6QDTp4XK54o24Y6sMfvDBBwmfy+3R3NwMQE5Ozk7tZ2tOPvnk+LbdbmfMmDFYltXm9vz8fIYMGbLF1LSdsWlCqqGhgaamJvbcc88dfq1zc3O
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3XeYVOXZx/Hvmb6zDbawS28rWEAQEcWGEhsqRk0seRVj1GiiiF1QE8USW8QYxcRuLFHU2CsxtmDsRtRYKNIEZNkC7O70ct4/ZmdgZRa2T/t9rsvLszPPnPPMnBlm5p77vh/DNE0TERERERERERGRHmRJ9QRERERERERERCT3KCglIiIiIiIiIiI9TkEpERERERERERHpcQpKiYiIiIiIiIhIj1NQSkREREREREREepyCUiIiIiIiIiIi0uMUlBIRERERERERkR6noJSIiIiIiIiIiPQ4BaVERERERERERKTHKSglIiKSw6ZNm8a0adNSPY0e8eGHHzJy5Eg+/PDDVE9F2qg7np933HEHI0eO7NJ9prtkz/1Zs2YxefLkHp3H6tWrGTlyJM8880yPHldERNKXglIiIiLSYaFQiMMPP5yRI0dy//33b3V9NBrl3nvvZfLkyYwePZqpU6fy0ksvbXe/U6dO5YADDsA0zVbHnHjiiey9996Ew+FO3Yds980333DxxRczadIkRo0axYQJEzj11FN5+umniUQiqZ5et/D5fNxxxx1pFYCMB8Pi/+2yyy5MnjyZ6667joaGhlRPL63Eg2hbPlY/+clPuPTSS/n+++87tM/Jkydz1llndfFMRUSks2ypnoCIiIikTrJAUns8+uij/PDDD61e/6c//Yl77rmH448/ntGjR/PGG29w0UUXYRgGRxxxRKu3mzp1KnPmzOGTTz5hjz322Or61atXs3DhQk4++WRsNn2cac1TTz3FVVddRWlpKT/96U8ZPHgwHo+HDz74gCuuuIKamhp+85vfpHqaXc7n8zF37lymT5/Onnvu2eK63/72t5x55pkpmhnMnj0bt9uNz+fj/fff55FHHuGrr77i8ccf79F5XHvttdsM+qaDadOmMXr0aMLhMF9//TVPPPEE77zzDi+88AIVFRWpnp6IiHQBfYoTERHJMl6vF7fb3aaxDoejw8epq6vjzjvv5IwzzuD222/f6vrq6moefPBBTjrpJK688koAjjvuOE4++WRuvvlmDjvsMKxWa9J9T506lVtvvZUXX3wxaVDq5ZdfxjRNpk6d2uH5Z7uFCxdy1VVXMXbsWO655x4KCgoS15166ql8+eWXLFmyJIUzTA2bzZbSQOahhx5KSUkJEMv2u+CCC3jllVf44osv2HXXXXtsHna7vceO1VHjx4/nsMMOA+BnP/sZQ4YM4brrruO5555T1pOISJZQ+Z6IiEgGi5cELV26lIsuuog99tiD//u//wOgpqaGyy67jP33359Ro0ax77778tvf/pbVq1cnbt+Znj233HILQ4cO5aijjkp6/b/+9S9CoVBiPgCGYfCLX/yCdevW8dlnn7W67759+7LHHnswf/58QqHQVte/9NJLDBo0iDFjxrBmzRpmz57NoYceyq677sqee+7JjBkzWtzP1kyePJlZs2ZtdXmyxyUYDHL77bdz8MEHM2rUKCZNmsTNN99MMBjc5jGuueYadtttN3w+31bXXXjhheyzzz6JMrovv/yS008/nT333JNdd92VyZMnc9lll233fiQzd+5cDMPglltuaRGQihs9ejTHHnss0Hq/rWQ9gGbNmsVuu+3G2rVrOeuss9htt93Yb7/9+Pvf/w7AokWLOOWUUxg7diwHHnggL774Yot9ttbT6ZlnnmHkyJHbPG/BYJA///nPHHvssey+++6MHTuW//u//+ODDz5oMeeJEycmHoN4Cdgdd9yR9PhHHnlk0tdANBplv/32Y8aMGS0u+9vf/sYRRxzB6NGj2XvvvbnyyivZtGlTq3PenvHjxwOwatWqFpd//vnnnH766ey+++6MGTOGk08+mU8//bTFmM4893/cU2ratGktSua2/G/L89/Q0MAf/vCHRDnowQcfzD333EM0Gm2x/4aGBmbNmsXuu+/O+PHjmTlzJo2Nje1+fLa01157ASTuX/xcrly5klmzZjF+/Hh23313LrvssqSvNxERST/KlBIREckC5513HoMHD+aCCy5IlOSce+65LF26lJNPPpn+/ftTX1/Pf/7zH3744QcGDBjQqeN98cUXPPfcczz22GMYhpF0zDfffIPb7Wb48OEtLo9ng3zzzTeJL+TJTJ06ld///ve8++67HHjggYnLFy1axOLFiznnnHOAWCDns88+44gjjqCyspI1a9bw+OOPc8opp/Dyyy+Tl5fXqfsKsWDEb3/7Wz799FOOP/54hg8fzuLFi3nooYdYsWIFf/nLX1q97eGHH87f//533n77baZMmZK43Ofz8dZbb3HMMcdgtVqpq6vj9NNPp3fv3px55pkUFRWxevVqXn/99XbP1+fz8cEHHzB+/Hj69evXofu8LZFIhF//+teMHz+eiy++mBdffJFrrrmGvLw8/vSnPzF16lQOOeQQ5s2bx8yZMxk7diwDBw7s9HGbmpp46qmnOPLIIznuuOPweDz84x//4IwzzuCpp55ip512oqSkhNmzZzN79mwOPvhgDj74YIBWm5tPmTKFuXPnUlNTQ3l5eeLyTz/9lPXr13P44YcnLrvyyit59tlnOfbYY5k2bRqrV6/m73//O19//TWPP/54h7KP4gGWoqKixGXvv/8+v/71rxk1ahTTp0/HMAyeeeYZfvnLX/LYY48lXkNd+dz/zW9+w89//vMWl73wwgu8++67lJaWArHn1cknn0x1dTUnnngiffv25bPPPuPWW2+lpqaGK664AgDTNDn77LP59NNPOfHEExk+fDivv/46M2fObPfjs6V44K5Xr14tLj///PMZMGAAF154IV9//TVPPfUUJSUlXHLJJZ06noiIdD8FpURERLLAjjvuyJw5cxJ/NzQ08Nlnn3HppZdy+umnJy7vipIX0zS59tprOfzww9ltt91azcqoqamhtLR0q6BV/Iv/+vXrt3mcQw89lGuvvZaXXnqpRVAq3ig9Xrp3wAEHJEp84g488EBOOOEE5s+fz9FHH92u+5fMiy++yHvvvccjjzzSIpC2ww47cNVVV/Hf//6XcePGJb3t7rvvTkVFBa+++mqLoNTbb7+N1+tNBD0+++wzNm3axP3338/o0aMT4y644IJ2z3flypWEQiFGjBjR7tu2RSAQ4Kijjko8n6ZOncp+++3H5Zdfzq233pq4T3vvvTdTpkzhueee49xzz+30cYuLi3nzzTdblJ0ef/zxTJkyhUceeYTrr78et9vNoYceyuzZsxk5ciQ//elPt7nPww8/nNtvv5358+dz8sknJy5/5ZVXcLvdHHDAAQB88sknPPXUU9xyyy0tykb33HNPzjjjDF577bU2lZPGs6rigcPHHnuMkpKSRJmqaZrMnj2bPffck/vuuy/x+jnxxBM54ogjuO2223jggQeArn3u77PPPi3+/u9//8uHH37Iz372MyZNmgTAgw8+yPfff8+zzz7LkCFDEvPq06cP999/P6eddhp9+/bljTfe4OOPP+aSSy7hjDPOAOAXv/gFp5xySpvnA+DxeKivryccDvPNN9/whz/8AcMwOOSQQ1qM22mnnbj++usTf2/cuJF//OMfCkqJiGQAle+JiIhkgRNPPLHF3y6XC7vdzkcffdSp0qJknnnmGRYvXszFF1+8zXF+vz9pzyqn05m4fluKi4uZNGkSb775Jl6vF4h9YX/55ZcZNWoUQ4cOBWL3NS4UCrFhwwYGDRpEUVERX3/9dbvuW2tee+01hg8fzrBhw6ivr0/8Fy8n2tYqb4ZhcNhhh/HOO+/g8XgSl7/66qtUVFSw++67A1BYWAjEglXJShbbo6mpCYD8/PxO7WdbjjvuuMR2UVERQ4cOJS8vr0XgbdiwYRQVFXV4xbQfs1qtiedUNBpl48aNhMNhRo0a1eFzPXToUHbaaSdeeeWVxGW
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKIAAAK1CAYAAAD7Z0aTAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA4uRJREFUeJzs3Xd4VGXax/Hf9MmkQAodRIqACgKKKAqiiA0r7GJDbGBbAQUbsLtWrAuKgoqKDRv2jm1RERUFfUUswNJREEgBUibTz/vHTAYCISQwyZkk38915fLkzJNz7ok5w5l77ud+LIZhGAIAAAAAAABqmNXsAAAAAAAAANAwkIgCAAAAAABArSARBQAAAAAAgFpBIgoAAAAAAAC1gkQUAAAAAAAAagWJKAAAAAAAANQKElEAAAAAAACoFSSiAAAAAAAAUCtIRAEAAAAAAKBWkIgCAAB1zvjx4zVgwACzw0AV/fnnn+rcubPeeuuthB53wIABGj9+fEKPmewq+tvv3Lmzpk2bVqtxTJs2TZ07d67VcwIA6gcSUQAAYK+WLFmi22+/XUOGDNGhhx5a5Tegv/32mzp37qyHHnpoj2PWrl2rzp076957701UuPVSOBzWm2++qeHDh6t3797q2rWrBgwYoAkTJuiXX34xO7wa83//93+aNm2aCgsLzQ4lbsCAAercuXP8q0ePHvr73/+ud955x+zQks748ePL/a4OP/xwnXXWWXrmmWcUCASqfbzvv/9enTt31scff1wD0QIAaoPd7AAAAEDymzdvnt544w116tRJrVu31tq1a6v0c4ceeqjat2+vDz/8UGPHjq1wzAcffCBJOuussxIVbr3j8/k0atQozZ8/X0ceeaSuuuoqNWrUSBs2bNBHH32kt99+W19++aWaN29udqgJ99NPP2n69OkaPHiwMjIyyj328ccfy2KxmBLXwQcfrMsuu0ySlJubq9dff1233HKLAoGAzj333FqNZcmSJbLZbLV6zupwOp2aNGmSJKmoqEiffPKJ7r//fv3yyy+VJqkBAPUTiSgAAGqA1+uVx+MxO4yEueCCC3TFFVfI7XbrzjvvrHIiSpLOPPNMPfzww1q8eLF69Oix2+MffPCB2rdvr0MPPTRxAdczDzzwgObPn68JEybo0ksvLffYqFGj9Nxzz5kSl9mcTqdp527WrJnOPvvs+PdDhgzRiSeeqOeee67WE1Eul6tWz1dddru93O/qwgsv1NChQzVnzhyNHz9ezZo1MzE6AEBtY2oeAAD7qaxXysqVK3XDDTfoyCOP1IUXXihJWrZsmcaPH68TTzxR3bp107HHHqsJEyZo69atFR5j3bp1Gj9+vHr16qUjjjhCEyZMUGlpabmxPp9PkyZN0lFHHaWePXvq6quv1ubNmyvsE7N582ZNmDBBxxxzjLp27arTTz9db7zxRrWfY05Ojtxud7V/ToomoqQdlU87+/XXX7VmzZr4mP/+97+68sor1bdvX3Xt2lUDBw7Uo48+qnA4XOk5yqbrfP/99+X276k30apVqzRmzBj17t1b3bp105AhQzR37txKzxEMBtW7d29NmDBht8eKi4vVrVs33X///fF9L7zwgk4//XR1795dRx55pIYMGaL333+/0nNUZNOmTXr11Vd17LHH7paEkiSbzaYRI0bEq6H21D+rop4+nTt31p133qmPPvpIgwYN0mGHHabzzjtPy5cvlyTNnj1bJ510krp166bhw4frzz//LPfze+rRNHz4cA0fPrzS51WVa2PatGl64IEHJEknnnhifHpXWRw7n/+XX35R586d9fbbb+92rvnz56tz58764osv4vsSdW2UycrKUvv27bV+/fpy+yORiJ577jmdfvrp6tatm4455hjdeuut2r59e7lx+/q3L5XvEVX2N7+nr539/PPPGjFihI444gh1795dF110kX788cfdjv/DDz/ob3/7m7p166aBAwdq9uzZ1f31lGO1WtW7d29J0oYNGyRF/19eddVV+uGHH/T3v/9d3bp104knnsh0RwCoh6iIAgAgQa677jq1bdtWY8eOlWEYkqRvv/1Wf/zxh4YMGaImTZpoxYoVeu2117Ry5Uq99tpru00ruv7669W6dWuNGzdOv//+u15//XVlZWXppptuio8ZP368PvroI5199tnq3r27Fi1apCuvvHK3ePLy8nTuuefKYrFo2LBhysrK0ldffaV//vOfKi4urjCpURPatGmjnj176qOPPtKECRPKTSEqS06VJaLefvtteTweXXbZZfJ4PPruu+/0yCOPqLi4WLfccktC4lmxYoUuuOACNWvWTFdccYU8Ho8++ugjXXvttZo2bZpOOumkCn/O4XBo4MCB+uyzz3THHXeUq8b573//q0AgoEGDBkmSXnvtNU2aNEmnnHKKLr74Yvn9fi1fvlw///xz/LlW1VdffaVQKFRjUxd/+OEHff755/Hk6ZNPPqmrr75aI0eO1Msvv6wLL7xQ27dv18yZMzVx4kTNmjUrIeetyrVx0kknae3atfrggw80YcIEZWZmSoomfXbVrVs3tWnTRh999JEGDx5c7rE5c+aoUaNG6tu3r6SauTZCoZA2b96sRo0aldt/66236u2339aQIUPiybyXXnpJv//+u1555RU5HA5Jifvbz8rKiifvdo7t3nvvjZ9LkhYsWKArrrhCXbt21ahRo2SxWPTWW2/pkksu0csvv6zDDjtMkrR8+XKNGDFCWVlZGj16tEKhkKZNm6bs7Oxq/4529scff0iSGjduHN+3bt06XXfddfr73/+uwYMH680339T48eN16KGH6qCDDtqv8wEAkgeJKAAAEqRLly6aMmVKuX0XXnihLr/88nL7evTooXHjxunHH39Ur169yj128MEH65577ol/v23bNr3xxhvxRNRvv/2mjz76SJdccokmTpwoSRo2bJgmTJigZcuWlTvWQw89pHA4rPfffz/+Bv6CCy7QuHHjNH36dJ1//vn7XOVUXWeeeabuvPNOLViwIJ4MiEQimjNnjnr27Kk2bdpIkqZMmVIupgsuuEC33nqrXnnlFY0dOzYhU7HuvvtutWjRQm+++Wb8eBdeeKEuuOACTZ48eY+JKEkaNGiQ3nzzTX3zzTc64YQT4vvnzJmjNm3aqFu3bpKkL7/8UgcddJAeeeSR/Y531apVklRjK5StWbNGH330kVq3bi1JatSokW699VY9/vjj+vjjj5WWliYp+v/riSee0J9//hkfuz+qcm106dJFhxxyiD744AMNHDhwr+cdNGiQnnnmGW3fvj2eEAoEAvrvf/+rk046KZ6IScS1EQqFVFBQICma2Jo5c6Zyc3M1bNiw+JgffvhBr7/+uiZPnlwuAXnUUUdp5MiR+vjjj+P7E/W37/F4yk2Dk6Q77rhDXq9XzzzzjCTJMAzdfvvtOuqoozRz5sx4Qvz888/X6aefrqlTp8bHPvLIIzIMQy+99JJatmwpSTrllFOqnVAt+10VFxfro48+0n//+1917txZ7du3j49Zs2aNXnrppfjr4mmnnab+/fvrrbfeSlgiGgBgPqbmAQCQIOeff/5u+3Z+Y+n3+1VQUKDu3btLiiaV9naMXr16adu2bSouLpYUnWIkKV69Uuaiiy4q971hGPr00081YMAAGYahgoKC+Fffvn1VVFRU4flryqBBg+RwOMpNz1u4cKE2b95c7g3tzr+v4uJiFRQUqFevXiotLdXq1av3O45t27bpu+++02mnnRY/fkFBgbZu3aq+fftq7dq12rx58x5//uijj1ZmZqbmzJkT37d9+3Z9++238WooScrIyNCmTZu0ZMmS/Y657P99amrqfh+rIn369CmX4Cn7+zz55JPjSShJ8QqZskqW/VXda6MqBg0apGAwqE8//TS+75tvvlFhYWH8/0+iro2vv/5affr0UZ8+fXTmmWfq3Xff1ZAhQ3TzzTfHx3z88cdKT0/XscceW+48hx56qDweT7mppDX1t//OO+/o5Zdf1k033aSjjz5akrR06VKtXbtWZ555prZu3RqPy+v1qk+fPlq0aJEikYjC4bC+/vprDRw4MJ6
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8UdJREFUeJzs3Xd8U/X+x/F3djqBtlAoAjJkKAg4UJShuHFPXDjA60RUXOD1CipX0R8oKnrxigu5Ltwoil4HKnrdiCIgGxEplAIdafb5/RES6ABSaHuS9PV8PHhwknxzzidpTpt88vl+vhbDMAwBAAAAAAAADchqdgAAAAAAAABofEhKAQAAAAAAoMGRlAIAAAAAAECDIykFAAAAAACABkdSCgAAAAAAAA2OpBQAAAAAAAAaHEkpAAAAAAAANDiSUgAAAAAAAGhwJKUAAAAAAADQ4EhKAQAAbDN06FANHTrU7DAQp2+++UZdunTRN998U6f77dKlix577LE63Weiq/raX7t2rbp06aI33nijQeMYPXq0Bg0a1KDHBACYh6QUAAAw1ezZs3XeeefpkEMO0WGHHaaLL75Yn3322S7v8+GHH6pLly6aOXPmTsfMmzdPXbp00fTp0+s44tTi8/n03HPP6dxzz9XBBx+sHj166IQTTtA999yjlStXmh1evZk7d27CJZ66dOlS6d9BBx0U1/nQGA0dOrTSc9WnTx+dffbZeu211xQOh2u9vzfeeENdunTRL7/8Ug/RAgB2xm52AAAAoPF64YUXNH78eB111FG6+eab5fP59Oabb+qqq67SY489puOPP77G+x111FHKysrSrFmzdO6559Y45t1335XNZtPJJ59cnw8hqRUXF+uKK67QwoULdfTRR+uUU05Renq6Vq5cqdmzZ+vVV1/Vr7/+anaY9WLu3Ln6z3/+o+uvv77abQsWLJDNZjMhKunII4/U6aefLsMwtG7dOr300ku6+uqr9dRTT6l///4NFkfr1q21YMEC2e2J+3GhZcuWGjVqlCRp8+bNeuutt/T3v/9dq1at0i233GJydACAeCTuXxkAAFCNx+NRenq62WHUmRkzZqhHjx6aOnWqLBaLJOmcc85R//799eabb+40KeV0OnXCCSfojTfeUGFhofLz8yvd7vP59NFHH+mII45Qbm5uvT+OZDVmzBgtWrRIjz76qE444YRKt9144416+OGHTYrMXC6Xy7Rj77vvvjr99NNjl0844QQNHjxY06dPb9CklMViMfV5iEdWVlal52rIkCE68cQT9Z///Ec33HCDHA6HidEBAOLB9D0AABLUY489pi5dumjZsmW6+eabdeihh+rCCy+UJC1evFijR4/WMcccox49eujII4/UmDFjtHnz5hr3sXr1ao0ePVqHHHKIDj74YI0ZM0YVFRWVxnq9Xo0fP16HHXaYevfurauvvlqFhYU19tcpLCzUmDFjdMQRR6h79+46+eST9dprr9X6MZaVlSk3NzeWkJKkzMxMZWRkyO127/K+p512msLhsGbPnl3tts8++0ylpaU69dRTJUmvv/66LrnkEvXt21fdu3fX4MGD9eKLL+42vuiUnrVr11a6fme9jH7++WcNHz5cBx98sHr27KmLL75YP/zwwy6PUVRUpP33319TpkypdtuKFSvUpUsXzZgxQ5IUCAQ0ZcoUHX/88erRo4cOO+wwXXDBBZo3b95uH0tVP//8sz777DOdc8451RJSUiTxd/vtt8cu76zfVtUeQNFeRE8//bT+85//6JhjjlHPnj01bNgw/fXXXzIMQ48//rgGDBigAw88UNdcc422bNlSaZ876+k0aNAgjR49epeP6/vvv9fIkSN11FFHqXv37ho4cKDuu+8+eb3eSjH/5z//iR0r+q+m43/wwQfq0qWLvv3222rHevnll9WlSxf9/vvvseuWL1+ukSNHqk+fPurRo4fOOussffzxx7uMeVc6duyoZs2aac2aNZWu9/v9evTRR3XcccfFHueDDz4ov99fadyevvar9pSKvuZr+le1B9TcuXN14YUXqlevXurdu7euvPJKLV26tNox/vvf/+qUU05Rjx49dMopp+ijjz6q7dNTSVpamnr27CmPx6Pi4mJJkZ/lPffcEztW9PfV559/vlfHAgDUDSqlAABIcDfccIPatWunm266SYZhSJK++uor/fHHHzrrrLPUvHlzLV26VK+++qqWLVumV199tVKSR4pUveyzzz4aNWqUfvvtN82cOVM5OTm69dZbY2NGjx6t999/X6effrp69uyp7777TldeeWW1eIqKinTeeefJYrHooosuUk5Ojj7//HP9/e9/V1lZmS677LK4H1ufPn00Z84cvfDCCzr66KPl8/k0Y8YMlZaW6pJLLtnlfQ899FC1bNlSs2bN0uWXX17ptnfffVdpaWk69thjJUkvvfSS9ttvPw0aNEh2u12ffvqp7r77bhmGoYsuuijueHfl66+/1t/+9jd1795dI0aMkMVi0RtvvKFLL71UL774og488MAa75eXl6dDDz1U77//vkaMGFHpttmzZ8tms+nEE0+UJE2ZMkVPPvmkzj33XB144IEqKyvTr7/+qoULF+rII4+sVbyffPKJJFWqNKlLs2bNUiAQ0NChQ7VlyxZNmzZNN954ow4//HB98803+tvf/qbVq1drxowZeuCBB3T//ffXyXE/+OADeb1eXXDBBWratKkWLFigGTNmaP369Xr00UclRSpqNmzYoHnz5unBBx/c5f6OOuoopaen6/3331efPn0q3TZ79mztt99+6ty5syRp6dKluuCCC5Sfn6+//e1vsftdd911euyxx3TcccfV+vGUlpaqpKREbdu2jV0XDod1zTXX6IcfftB5552njh076vfff9fzzz+vVatW6YknnoiNravXfseOHas9V6WlpZowYYJycnJi17311lsaPXq0+vXrp1tuuUUVFRV66aWXdOGFF+rNN9/UPvvsI0n68ssvdf3116tTp066+eabtXnzZo0ZM0YtW7as9XO0o7Vr18pmsyk7Ozt23Q8//KAPP/xQF154oTIyMvTCCy9o5MiR+vTTT9WsWbO9Oh4AYO+QlAIAIMF17dpVkyZNqnTdhRdeqGHDhlW6rlevXho1apR++OEHHXLIIZVu69atm+67777Y5S1btui1116LJaUWLlyo999/X5deeqnuuOMOSdJFF12kMWPGaPHixZX29fDDDysUCmnWrFmxD3QXXHCBRo0apSlTpuj888/fbZVT1J133qnNmzdr/PjxGj9+vCSpWbNmeu6559S7d+9d3tdqterkk0/W008/rZUrV6p9+/aSItVXc+fO1XHHHaeMjAxJkWmCO8Z08cUXa/jw4Xr22WfrJCllGIbGjRunww47TNOmTYslBc8//3ydfPLJmjx5sp555pmd3n/w4MG666679Pvvv8cSHJL0/vvv69BDD1VeXp6kSAXYwIEDde+99+51zMuXL5ekSserS4WFhfrwww+VlZUlKZJIefLJJ+X1evX666/HehVt3rxZs2bN0t133y2n07nXx73lllsq/ayHDBmidu3a6aGHHtK6detUUFCg3r17a99999W8efN2m5Rzu90aNGiQ5syZozvvvDPWa2rjxo367rvvKiUS//nPf6pVq1Z6/fXXY4/lwgsv1AUXXKCJEyfGlZTy+XyxKp9169Zp8uTJCoVClarZZs2apa+++kovvPBCpXN9v/3209ixY/Xjjz/qoIMOklR3r/28vLxKz5VhGLrmmmvkcDg0YcIESVJ5ebn++c9/6txzz630Gj3zzDN14okn6sknn4xdP3HiROXm5urFF1+MvUb69OmjYcOGqXXr1nHFFAqFYs/V5s2b9dJLL8X6o6WlpcXGLV++XLNnz44l9g477DCdfvrpeu+993TxxRfH/RwAAOoe0/cAAEhw559/frXrdvyQGf0Q27NnT0mRBNPu9nHIIYdoy5YtKisrkyR98cUXkhSbHhhV9QObYRj68MMPNWjQIBmGoeLi4ti/fv36qbS0tMbj74zb7Vb79u115pln6pFHHtF9992n5s2b6/r
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8vpJREFUeJzs3Xd4VGXax/HfmZ4KhAQEKSIIqCBlsSAIiq6KXVfFhrrK2mApYgHX176ILqwN14YNXetaQYF1WbuuqCu6KqgogoBAQiB9+nn/OJkJIQEyYZJp3891cXFm5smZe5I5yTn33M/9GKZpmgIAAAAAAABakS3RAQAAAAAAACDzkJQCAAAAAABAqyMpBQAAAAAAgFZHUgoAAAAAAACtjqQUAAAAAAAAWh1JKQAAAAAAALQ6klIAAAAAAABodSSlAAAAAAAA0OpISgEAAAAAAKDVkZQCACBGa9euVZ8+ffTyyy8nOhQ00bRp0zRq1Ki47vPll19Wnz59tHbt2rjuN5k19t6/77771KdPn1aPpU+fPrrvvvta/XkBAED8OBIdAAAgc3311Vd6+eWX9dVXX+m7775TMBjUd9991+jYHV30Tp06VZdccskOn+Oyyy7Txx9/rA8//FC5ubk73MfixYv1/vvvq127drG/kAyxZs0azZ07Vx9++KE2bdokp9Op3r17a/To0RozZow8Hk+iQ2wRDz74oHr16qWjjjoq0aFIspJh06dPj9622+1q3769hg0bpilTpqhjx44JjC65rF27VkceeWT0ts1mU8eOHbX//vtrwoQJ2nfffWPe59ixY7VlyxYtWLAgnqECAJCRSEoBABLm3Xff1T/+8Q/17t1bXbp00c8//7zT8cOGDdPJJ59c77799ttvp19z0kkn6e2339a//vUvnXLKKQ0er6mp0b///W8NHz6chNROvPPOO5o0aZJcLpdOPvlk9e7dW4FAQJ9//rn+8pe/aOXKlbr11lsTHWaLeOihh3TMMcc0SEqdfPLJOv744+VyuRIS18SJE9WlSxf5/X4tW7ZMr7zyij7//HMtWLBAbre71eK4/PLLd5oYTgYnnHCCRowYoXA4rB9//FHPPvus3nvvPb3wwgvNSkwBAID4ICkFACmkurpa2dnZiQ4jbs4++2z94Q9/kMfj0S233LLLpNRee+3VICm1K6NGjVJOTo7mz5/faFJqyZIlqq6u1kknnRTTfjPJL7/8oilTpqhz58568skn1aFDh+hj5557rlavXq133nkncQEmiN1ul91uT9jzjxgxQv3795cknXHGGWrXrp0eeeQRLVmyRMcdd1yrxeFwOORwJPcp5X777Vfvd8fgwYN1+eWX69lnn9Utt9ySwMgAAMhs9JQCgCQV6dOycuVKTZ06VQceeKDOOeccSdKKFSs0bdo0HXnkkerfv7+GDRum6dOna8uWLY3uY/Xq1Zo2bZqGDBmi3/zmN5o+fbpqamrqjfV6vbrtttt08MEHa9CgQbrsssu0cePGRvu2bNy4UdOnT9ehhx6qfv366fjjj9c//vGPmF9jYWFhzFO+vF6vfD5fk8d7PB4dffTR+s9//qPNmzc3eHzBggXKycnRqFGjtHXrVt1xxx068cQTNWjQIA0ePFjjxo3TihUrdvk8Y8eO1dixYxvc31gvo3A4rCeeeELHH3+8+vfvr0MPPVQ33HCDysrKdvocjz76qPr06aN169Y1eGz27Nnq169fdB8///yz/vjHP2rYsGHq37+/RowYoSlTpqiiomKXr2V7c+fOVXV1tf785z/XS0hFdO/eXRdccIGknffb2v69FHl/rlq1SldddZV+85vf6JBDDtHdd98t0zT166+/6vLLL9fgwYM1bNgwPfbYY/X2t6OeTp988on69OmjTz75ZKev69FHH9VZZ52lgw8+WAcccIBOO+00LVq0qEHM1dXVeuWVV9SnTx/16dNH06ZNa/T5L7300npTxbY1ZswYnXbaafXue+2113TaaafpgAMO0EEHHaQpU6bo119/3WnMOzNkyBBJVhJxWz/++KMmTpyogw46SP3799dpp52mJUuW1BuzO+/97XtKTZs2Lfq92v7ftj9/v9+ve++9V7/97W/Vr18/jRw5Unfeeaf8fn+9/fv9fs2YMUOHHHJI9HfThg0bYv7+bOuQQw6RpOjPLvKz/Pzzz3X77bfrkEMO0cCBAzV+/HiVlpbu1nMBAIAdS+6PtQAAmjRpkrp3764pU6bINE1J0kcffaRffvlFp512moqKivTDDz/ohRde0MqVK/XCCy/IMIx6+5g8ebK6dOmiK6+8Ut9++61efPFFFRQU6Oqrr46OmTZtmhYuXKiTTz5ZAwYM0KefftrolJySkhKdeeaZMgxD5557rgoKCvTee+/pT3/6kyorK3XhhRe22PfilVde0TPPPCPTNNWzZ09dfvnlOvHEE3f5dSeeeKJeeeUVLVy4UOedd170/q1bt+qDDz7Q8ccfL4/Hox9++EH/+te/dOyxx6pLly4qKSnR888/r/POO09vvPFG3Hr13HDDDXrllVd02mmnaezYsVq7dq3+/ve/69tvv9Wzzz4rp9PZ6NeNHj1af/nLX7Rw4UKNGzeu3mMLFy7UsGHD1KZNG/n9fl188cXy+/0677zzVFhYqI0bN+qdd95ReXm58vLyYor37bffVteuXTV48OBmv+admTJlinr27KmpU6fq3Xff1QMPPKC2bdvqueee0yGHHKKrrrpK8+fP1x133KH+/fvrwAMPjMvzzps3T6NGjdKJJ56oQCCgN954Q5MmTdJDDz2kww8/XJJ055136vrrr9cBBxygM888U5LUrVu3Rvc3evRoXXvttfrqq690wAEHRO9ft26dli1bpmuuuSZ63wMPPKB77rlHo0eP1umnn67S0lI9/fTTOvfcc/Xqq68qPz8/5tcTSVZu+7U//PCDzj77bHXs2FF/+MMflJ2drYULF2r8+PG677779Nvf/laSlciK13t/zJgxGjp0aL373n//fc2fP18FBQWSrMTs5Zdfrs8//1xnnnmmevbsqe+//15PPvmkfv75Z/3tb3+Lfu2f/vQnvf766zrhhBM0ePBg/ec//9nt6YJr1qyRJLVt27be/bfddpvy8/M1YcIErVu3Tk8++aRuueUW3X333bv1fAAAoHEkpQAgyfXt21ezZ8+ud98555yjiy66qN59AwcO1JVXXqnPP/88WjERse+++2rGjBnR21u3btU//vGPaFLqm2++0cKFC3XBBRfouuuuk2RNy5o+fXqDSom77rpLoVBI8+fPj/ZgOvvss3XllVdqzpw5Ouuss1qk4fWgQYM0evRodenSRZs2bdIzzzyjq666ShUVFdEKsh055JBDVFRUpAULFtRLSi1atEiBQCCa2OrTp48WL14sm62ukPjkk0/W6NGj9Y9//EPjx4/f7dfx2Wef6cUXX9SsWbPqJdQOPvhgjRs3TosWLdphoq1z584aOHCg3nzzzXpJqa+++kq//PKLJkyYIMmqjFm7dq3uueceHXvssdFxkcdjUVlZqY0bN+6wAigeDjjggOgUqjFjxmjUqFGaOXOmrrzyymjy4YQTTtBhhx2ml156KW5JqcWLF9d7r5577rk67bTT9Pjjj0eTUieffLJuuukmde3adZdTR4866ii5XC4tXLiwXlJq4cKFMgxDo0ePlmQlj+677z5NnjxZl112WXTc0UcfrVNPPVXPPPNMvft3pLKyUqWlpfL7/fryyy81Z84cuVwuHXHEEdExf/7zn9WpUye99NJL0d5X55xzjs4++2zNmjUrmpSK53t/0KBBGjRoUPT26tWrdeutt2rYsGE666yzJEnz58/XRx99pKeeeqre76t99tlHN954o/773/9q8ODBWrFihV5//XWdc845uvHGGyVZP6epU6fucFGExtTU1Ki0tFThcFg//fSTbr/9dkmqd3xIVpLqscceiyb2w+GwnnrqKVVUVMSczAUAALvG9D0ASHKRi7htbXsh7fP5VFpaqgEDBkiyEky72seQIUO0detWVVZWSrKqGCQ1SO5sm8CRJNM09c9//lOjRo2
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAK1CAYAAAAZu13qAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAA51JJREFUeJzs3Xd4VGXax/Hf9EmHEKQJiCJYQEARpSsqothgVVwRdYEXGyKgUlxXsaziLigqKmgsIArCKrpiwd5ZURd0VURQBBEFkgCp08/7xzADIYEUkpwp38915eLMnJOZe4ZnknPu3M/9WAzDMAQAAAAAAAA0IKvZAQAAAAAAACD5kJQCAAAAAABAgyMpBQAAAAAAgAZHUgoAAAAAAAANjqQUAAAAAAAAGhxJKQAAAAAAADQ4klIAAAAAAABocCSlAAAAAAAA0OBISgEAAAAAAKDBkZQCACCJdOzYUQ8//LDZYaCaHn74YXXs2LFOH/Pzzz9Xx44d9fnnn9fp48a6fcf+Sy+9pI4dO2rz5s0NGseAAQM0ZcqUBn1OAABiFUkpAABqIBQK6aWXXtLVV1+t/v37q2vXrjrnnHP06KOPyuv1Vjj++eef17hx43TKKaeoY8eO1b4Yvfvuu9WxY0dt3Lhxv8c88MAD6tixo3744Ydav55kkJeXp/vuu0+DBg1Sly5d1LVrVw0dOlSPPvqoCgsLzQ6v3jz33HN66aWXzA4jKpIMi3wdffTR6tmzp8aNG6effvrJ7PBizt7v1VFHHaU+ffpo5MiRtU4mTpkyRd26davjKAEAODh2swMAACCelJWVaerUqeratasuueQSNWnSRKtWrdLDDz+sFStWaP78+bJYLNHjc3NzVVJSos6dO2v79u3Vfp5zzz1Xzz77rF599VWNHTu20mOWLVumDh066Kijjjro15WovvnmG40ZM0alpaU677zzdOyxx0qSvv32Wz3xxBP68ssv9dRTT5kcZf1YuHChGjdurKFDh5a7/8QTT9Q333wjh8NhSlwjRoxQ586dFQgEtHbtWi1atEiff/65li1bpqZNmzZYHOeff74GDx4sp9PZYM9ZU71799b5558vwzC0efNmLVy4UFdccYXmzp2r/v37mx0eAAAHjaQUAKDelZaWKjU11eww6oTD4dDChQt1/PHHR++7+OKL1apVq2hiqlevXtF9zz77rFq2bCmLxVKjKoUuXbqobdu2eu211ypNSq1atUqbN2/WjTfeeHAvKIEVFhZq7NixstlsWrp0qY444ohy+ydMmKDFixebFJ15rFarXC6Xac/fvXt3DRo0KHq7Xbt2mjZtml5++WX93//9X4PFYbPZZLPZGuz5auOwww7T+eefH719xhln6LzzztP8+fNJSgEAEgLT9wAAdSrSA2f9+vW68cYbdeKJJ+rSSy+VJP3www+aMmWKTjvtNHXu3Fm9e/fW1KlTtWPHjkofY+PGjZoyZYq6d++uE044QVOnTlVZWVm5Yz0ej+6++26ddNJJ6tatm66++mpt3bq10t5JW7du1dSpU9WrVy916tRJgwcP1r/+9a8avT6n01kuIRVxxhlnSFKFaUitWrUqVzlVE+eee65+/vlnfffddxX2LVu2TBaLReecc458Pp8efPBBDR06VCeccIK6du2qSy+9VP/5z3+qfI4pU6ZowIABFe7fXy+jV155RUOHDtVxxx2nHj16aMKECfr9998P+BxvvvmmOnbsqJUrV1bYt2jRInXs2FE//vijJGn79u2aOnWq+vXrp06dOqlPnz665ppratX3Z9GiRdq6daumTJlSISElSTk5Obr22mujt/fXb2vfHkCRXkRffvml7r77bp188snq3r27brvtNvl8PhUWFmrSpEk68cQTdeKJJ+of//iHDMOIfv/+ejpt3rxZHTt2rHLK3YsvvqjLL79cPXv2VKdOnXT22Wfr+eefrxDzunXrtHLlyugUsBEjRlT6/Hfeeae6detW4bMlSRMnTlTv3r0VDAaj93344Ye69NJL1bVrV3Xr1k1jxozRunXrDhjzgXTv3l2S9Ouvv5a7vzqf14MZ+/v2lIqM+cq+9v7/D4VCeuaZZzR48GB17txZvXr10m233aZdu3aVe3zDMPToo4+qX79+6tKli0aMGHFQ75MUHqONGzeOxhz5v3z99df12GOPqV+/furcubOuuOKKA079BQAgVlApBQCoFzfccIPatm2rCRMmRC/IP/vsM/36668aOnSomjZtqnXr1mnx4sVav369Fi9eXCF5M378eB166KGaOHGivv/+ey1ZskTZ2dm6+eabo8dMmTJFb7zxhs4//3x16dJFX3zxhcaMGVMhnry8PF188cWyWCwaPny4srOz9dFHH+mvf/2riouLdeWVVx7U683Ly5MkNW7c+KAeZ2/nnnuuZs+erWXLlkWnnUlSMBjUG2+8oe7du6tly5YqKCjQkiVLdM455+iiiy5SSUmJ/vWvf2n06NFasmSJjj766DqJ57HHHtODDz6os846SxdeeKEKCgq0YMECDR8+XC+//LIyMzMr/b5TTjlFqampeuONN9SjR49y+15//XUdeeSR6tChgyTp+uuv1/r163XZZZepVatWKigo0Keffqrff/9dhx56aI3ife+99+R2u3XmmWfW7gVX4e6771ZOTo6uv/56ff3113rhhReUkZGhVatWqUWLFpowYYI++ugjPfnkk+rQoYMuuOCCOnnehQsX6sgjj9SAAQNkt9v1/vvv64477pBhGBo+fLgk6ZZbbtFdd92l1NRUXX311ZLCSbjKnH322Xruuef0wQcf6KyzzoreX1ZWpvfff19DhgyJVhS9/PLLmjJlivr06aObbrpJZWVlWrhwoS699FItXbq0xv9HkvTbb79JUrnxU93Pa3FxcZ2N/TPOOENt2rQpd993332nefPmKTs7O3rfbbfdpqVLl2ro0KEaMWKENm/erOeee07ff/+9Fi5cGJ0W+eCDD+qxxx5T//791b9/f3333XcaOXKk/H5/jd+jiF27dqmwsFBt27Ytd/8TTzwhi8WikSNHqri4WLm5ubrpppu0ZMmSWj8XAAANgaQUAKBeHHXUUZo5c2a5+y699FKNHDmy3H1du3bVxIkT9dVXX0UrJiKOPvpo3XPPPdHbO3fu1L/+9a9oUuq7777TG2+8oSuuuEK33HKLJGn48OGaOnVqhebfDzzwgILBoF599dVo4ujPf/6zJk6cqNmzZ+uSSy6R2+2u9evNzc1Venq6+vXrV+vH2Ndhhx2mzp076/XXX9fNN98sqzVc4PzZZ58pPz9fN9xwgyQpKytL7733XrneOBdffLHOOussPfvss+Xew9r67bff9PDDD2v8+PHRJIckDRw4UEOGDNHzzz9f7v69ud1uDRgwQMuXL9ett94aTXBs375dX3zxRXR6YmFhoVatWqVJkyZp1KhR0e+/6qqrahXzzz//rMMOO6zeegY1adIkmgwYPny4Nm3apCeffFLDhg3THXfcIUkaNmyYBgwYoBdffLHOklILFiwoN1Yvu+wyjRo1Sk8//XQ0KXX66adr1qxZaty4cbnpX5U54YQT1KxZM73xxhvlklIffPCBSktLdfbZZ0uSSkpK9Pe//10XXXSR7rrrruhxQ4YM0aBBgzR37txy9+9PSUmJCgoKoj2l7rnnHlksFg0cODB6THU/r3U59o866qhy/dkKCgo0a9YsdejQITpGv/zySy1ZskQzZszQueeeGz32pJNO0ujRo/Xmm2/q3HPPVUFBgXJzc3XKKadozpw50YT7Aw88oDlz5lQ7Jq/Xq4KCAknhSrr7779fwWCw3PTHyHEvv/xy9H3IzMzU3//+d/3444/RhC8AALGI6XsAgHpxySWXVLhv7wvpyMVWly5dJKnSKWr7Pkb37t21c+dOFRcXS5I+/vhjSYpOD4y47LLLyt02DENvvfWWBgwYIMMwVFBQEP3q06ePioqKKn3+6pozZ44+++wz3XjjjfutFqqt8847T3/88Ye++OKL6H3Lli2Tw+GIXpjabLboxWgoFNLOnTsVCATUqVMnff/993USx9tvv61
"text/plain": [
"<Figure size 1200x700 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"所有指标的分析图表已生成。\n"
]
}
],
"source": [
"\n",
"from src.analysis.result_analyzer import ResultAnalyzer\n",
"# 导入所有必要的模块\n",
"from src.data_manager import DataManager\n",
"from src.backtest_engine import BacktestEngine\n",
"from src.indicators.indicator_list import INDICATOR_LIST\n",
"from src.strategies.OpenTwoFactorStrategy import SimpleLimitBuyStrategyLong, SimpleLimitBuyStrategyShort, SimpleLimitBuyStrategy\n",
"\n",
"\n",
"# --- 配置参数 ---\n",
"# 获取当前脚本所在目录,假设数据文件在项目根目录下的 data 文件夹内\n",
"# data_file_path = '/mnt/d/PyProject/NewQuant/data/data/SHFE_rb2510/SHFE_rb2510_min60.csv'\n",
"data_file_path = \"/mnt/d/PyProject/NewQuant/data/data/KQ_m@CZCE_MA/KQ_m@CZCE_MA_min60.csv\"\n",
"\n",
"initial_capital = 100000.0\n",
"slippage_rate = 0.000 # 假设每笔交易0.1%的滑点\n",
"commission_rate = 0.0001 # 假设每笔交易0.02%的佣金\n",
"\n",
"global_config = {\n",
" 'symbol': 'KQ_m@CZCE_MA',\n",
"}\n",
"\n",
"strategy_parameters = {\n",
" # 'symbol': \"SHFE_rb2501\", # 根据您的数据文件中的品种名称调整\n",
" 'trade_volume': 1,\n",
" # 'range_factor': 1.8, # 示例值,需要通过网格搜索优化\n",
" # 'profit_factor': 2.8, # 示例值\n",
" # 'range_factor': 1.6, # 示例值,需要通过网格搜索优化\n",
" # 'profit_factor': 2.1, # 示例值\n",
" 'range_factor_l': 1.8, # 示例值,需要通过网格搜索优化\n",
" 'profit_factor_l': 2.8, # 示例值\n",
" 'range_factor_s': 1.6, # 示例值,需要通过网格搜索优化\n",
" 'profit_factor_s': 2.1, # 示例值\n",
" 'max_position': 10,\n",
" 'enable_log': False,\n",
" 'stop_loss_points': 20,\n",
" 'use_indicator': True\n",
"}\n",
"# start_time = datetime(2022, 1, 1)\n",
"# end_time = datetime(2024, 6, 1)\n",
"\n",
"start_time = datetime(2024, 6, 1)\n",
"end_time = datetime(2025, 6, 1)\n",
"\n",
"\n",
"# --- 1. 初始化数据管理器 ---\n",
"print(\"初始化数据管理器...\")\n",
"data_manager = DataManager(file_path=data_file_path, symbol=global_config['symbol'], start_time=start_time, end_time=end_time)\n",
"# 确保 DataManager 能够重置以进行多次回测\n",
"# data_manager.reset() # 首次运行不需要重置\n",
"\n",
"# --- 2. 初始化回测引擎并运行 ---\n",
"print(\"\\n初始化回测引擎...\")\n",
"engine = BacktestEngine(\n",
" data_manager=data_manager,\n",
" strategy_class=SimpleLimitBuyStrategy,\n",
" # current_segment_symbol=strategy_parameters['symbol'],\n",
" strategy_params=strategy_parameters,\n",
" initial_capital=initial_capital,\n",
" slippage_rate=slippage_rate,\n",
" commission_rate=commission_rate,\n",
" roll_over_mode=True,\n",
" start_time=start_time,\n",
" end_time=end_time,\n",
" indicators=INDICATOR_LIST\n",
")\n",
"\n",
"print(\"\\n开始运行回测...\")\n",
"engine.run_backtest()\n",
"print(\"\\n回测运行完毕。\")\n",
"\n",
"# --- 3. 获取回测结果 ---\n",
"results = engine.get_backtest_results()\n",
"portfolio_snapshots = results[\"portfolio_snapshots\"]\n",
"trade_history = results[\"trade_history\"]\n",
"initial_capital_result = results[\"initial_capital\"]\n",
"bars = results[\"all_bars\"]\n",
"\n",
"# --- 4. 结果分析与可视化 ---\n",
"if portfolio_snapshots:\n",
" analyzer = ResultAnalyzer(portfolio_snapshots, trade_history, bars, initial_capital_result, INDICATOR_LIST)\n",
"\n",
" analyzer.generate_report()\n",
" analyzer.plot_performance()\n",
" metrics = analyzer.calculate_all_metrics()\n",
" print(metrics)\n",
"\n",
" analyzer.analyze_indicators()\n",
"else:\n",
" print(\"\\n没有生成投资组合快照无法进行结果分析。\")\n",
"\n",
"# --- 4. 结果分析与可视化 (待实现) ---\n",
"# if portfolio_snapshots:\n",
"# analyzer = ResultAnalyzer(portfolio_snapshots, trade_history, initial_capital_result)\n",
"# metrics = analyzer.calculate_all_metrics()\n",
"# print(\"\\n--- 绩效指标 ---\")\n",
"# for key, value in metrics.items():\n",
"# print(f\" {key}: {value:.4f}\")\n",
"#\n",
"# print(\"\\n--- 绘制绩效图表 ---\")\n",
"# analyzer.plot_performance()\n",
"# else:\n",
"# print(\"\\n没有生成投资组合快照无法进行结果分析。\")\n",
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "quant",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.11"
}
},
"nbformat": 4,
"nbformat_minor": 5
}