Commit 3bf550ac authored by Dr.李's avatar Dr.李

FEATURE: update examples

parent fdb2e572
"""
Created on 2020-11-21
@author: cheng.li
"""
import os
import datetime as dt
import numpy as np
import pandas as pd
from PyFin.api import *
from alphamind.api import *
start_date = '2020-01-01'
end_date = '2020-02-21'
freq = '10b'
horizon = map_freq(freq)
neutralized_risk = risk_styles + industry_styles
universe = Universe('hs300')
data_source = "mysql+mysqldb://reader:Reader#2020@121.37.138.1:13317/vision?charset=utf8"
offset = 1
method = 'ls'
industry_name = 'sw'
industry_level = 1
risk_model = 'short'
executor = NaiveExecutor()
ref_dates = makeSchedule(start_date, end_date, freq, 'china.sse')
engine = SqlEngine(data_source)
alpha_factors = {
'f01': LAST('EMA5D'),
'f02': LAST('EMV6D')
}
weights = dict(f01=1.0,
f02=1.0,
)
alpha_model = ConstLinearModel(features=alpha_factors, weights=weights)
def predict_worker(params):
data_meta = DataMeta(freq=freq,
universe=universe,
batch=1,
neutralized_risk=neutralized_risk,
risk_model='short',
pre_process=[winsorize_normal, standardize],
post_process=[standardize],
warm_start=0,
data_source=data_source)
ref_date, model = params
er, _ = predict_by_model(ref_date, model, data_meta)
return er
predicts = [predict_worker((d.strftime('%Y-%m-%d'), alpha_model)) for d in ref_dates]
......@@ -81,7 +81,7 @@
},
{
"cell_type": "code",
"execution_count": 10,
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
......@@ -116,7 +116,7 @@
},
{
"cell_type": "code",
"execution_count": 16,
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
......@@ -249,7 +249,7 @@
},
{
"cell_type": "code",
"execution_count": 17,
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
......@@ -258,84 +258,84 @@
},
{
"cell_type": "code",
"execution_count": 18,
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2020-11-21 14:57:36,283 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 299\n",
"2020-11-21 14:57:36,293 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:36,301 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 14:57:36,369 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 14:57:36,381 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 14:57:36,386 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:36,390 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 14:57:36,419 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 14:57:36,429 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 14:57:36,435 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:36,438 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 14:57:36,464 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 14:57:36,475 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 14:57:36,481 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:36,484 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 14:57:36,510 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n",
"2020-11-21 14:57:40,013 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 300\n",
"2020-11-21 14:57:40,022 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:40,026 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 14:57:40,062 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 14:57:40,070 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 14:57:40,076 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:40,078 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 14:57:40,105 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 14:57:40,112 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 14:57:40,119 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:40,121 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 14:57:40,146 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 14:57:40,154 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 14:57:40,159 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:40,162 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 14:57:40,189 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n",
"2020-11-21 14:57:42,233 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 299\n",
"2020-11-21 14:57:42,256 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:42,267 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 14:57:42,347 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 14:57:42,357 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 14:57:42,364 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:42,367 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 14:57:42,394 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 14:57:42,405 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 14:57:42,411 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:42,414 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 14:57:42,439 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 14:57:42,447 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 14:57:42,452 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:42,455 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 14:57:42,478 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n",
"2020-11-21 14:57:44,519 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 300\n",
"2020-11-21 14:57:44,537 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:44,547 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 14:57:44,630 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 14:57:44,641 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 14:57:44,647 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:44,649 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 14:57:44,673 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 14:57:44,684 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 14:57:44,690 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:44,694 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 14:57:44,720 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 14:57:44,730 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 14:57:44,735 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 14:57:44,737 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 14:57:44,767 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n"
"2020-11-21 15:30:30,922 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 299\n",
"2020-11-21 15:30:34,438 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:34,439 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 15:30:34,456 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 15:30:34,462 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 15:30:34,466 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:34,469 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 15:30:34,493 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 15:30:34,501 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 15:30:34,507 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:34,510 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 15:30:34,541 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 15:30:34,551 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 15:30:34,558 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:34,561 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 15:30:34,588 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n",
"2020-11-21 15:30:36,786 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 300\n",
"2020-11-21 15:30:36,807 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:36,820 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 15:30:36,893 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 15:30:36,903 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 15:30:36,908 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:36,910 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 15:30:36,944 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 15:30:36,956 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 15:30:36,962 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:36,965 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 15:30:36,998 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 15:30:37,008 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 15:30:37,015 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:37,018 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 15:30:37,051 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n",
"2020-11-21 15:30:39,365 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 299\n",
"2020-11-21 15:30:39,375 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:39,380 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 15:30:39,446 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 15:30:39,459 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 15:30:39,466 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:39,469 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 15:30:39,502 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 15:30:39,515 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 15:30:39,523 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:39,526 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 15:30:39,560 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 15:30:39,572 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 15:30:39,578 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:39,582 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 15:30:39,621 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n",
"2020-11-21 15:30:41,522 - ALPHA_MIND - INFO - 2020-01-02 00:00:00: 300\n",
"2020-11-21 15:30:41,540 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:41,552 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 full re-balance\n",
"2020-11-21 15:30:41,637 - ALPHA_MIND - INFO - 2020-01-02 00:00:00 is finished\n",
"2020-11-21 15:30:41,648 - ALPHA_MIND - INFO - 2020-01-16 00:00:00: 300\n",
"2020-11-21 15:30:41,654 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:41,657 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 full re-balance\n",
"2020-11-21 15:30:41,690 - ALPHA_MIND - INFO - 2020-01-16 00:00:00 is finished\n",
"2020-11-21 15:30:41,700 - ALPHA_MIND - INFO - 2020-02-07 00:00:00: 300\n",
"2020-11-21 15:30:41,707 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:41,710 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 full re-balance\n",
"2020-11-21 15:30:41,741 - ALPHA_MIND - INFO - 2020-02-07 00:00:00 is finished\n",
"2020-11-21 15:30:41,748 - ALPHA_MIND - INFO - 2020-02-21 00:00:00: 300\n",
"2020-11-21 15:30:41,754 - ALPHA_MIND - WARNING - winsorize_normal normally should not be done after neutralize\n",
"2020-11-21 15:30:41,756 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 full re-balance\n",
"2020-11-21 15:30:41,788 - ALPHA_MIND - INFO - 2020-02-21 00:00:00 is finished\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 10.3 s\n"
"Wall time: 12.9 s\n"
]
}
],
......@@ -359,7 +359,7 @@
},
{
"cell_type": "code",
"execution_count": 19,
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
......@@ -372,7 +372,7 @@
},
{
"cell_type": "code",
"execution_count": 20,
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
......@@ -383,20 +383,6 @@
" ic_res.to_excel(writer, sheet_name='ic_stat')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
......
......@@ -87,7 +87,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 1.98 ms\n"
"Wall time: 3.22 ms\n"
]
}
],
......@@ -134,17 +134,17 @@
" warm start: on, polish: on, time_limit: off\n",
"\n",
"iter objective pri res dua res rho time\n",
" 1 -7.8878e+03 4.61e+00 6.68e+04 1.00e-01 1.10e-03s\n",
" 125 -2.4830e+02 3.58e-07 2.76e-05 5.82e-01 3.80e-03s\n",
" 1 -7.8878e+03 4.61e+00 6.68e+04 1.00e-01 1.28e-03s\n",
" 125 -2.4830e+02 3.58e-07 2.76e-05 5.82e-01 5.35e-03s\n",
"\n",
"status: solved\n",
"solution polish: unsuccessful\n",
"number of iterations: 125\n",
"optimal objective: -248.2989\n",
"run time: 4.54e-03s\n",
"run time: 7.43e-03s\n",
"optimal rho estimate: 1.87e+00\n",
"\n",
"Wall time: 48 ms\n"
"Wall time: 43 ms\n"
]
},
{
......@@ -211,9 +211,9 @@
"12 -2.483e+02 -2.483e+02 +3e-07 5e-13 2e-15 1e-10 8e-10 0.9775 1e-04 1 1 1 | 0 0\n",
"\n",
"OPTIMAL (within feastol=5.3e-13, reltol=1.3e-09, abstol=3.2e-07).\n",
"Runtime: 0.013942 seconds.\n",
"Runtime: 0.013621 seconds.\n",
"\n",
"Wall time: 51.3 ms\n"
"Wall time: 52 ms\n"
]
},
{
......@@ -277,7 +277,7 @@
"12: -2.4829e+02 -2.4831e+02 1e-02 2e-16 4e-16\n",
"13: -2.4830e+02 -2.4830e+02 1e-04 2e-16 1e-15\n",
"Optimal solution found.\n",
"Wall time: 108 ms\n"
"Wall time: 80.5 ms\n"
]
}
],
......@@ -315,7 +315,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 24 ms\n"
"Wall time: 20.6 ms\n"
]
},
{
......@@ -465,9 +465,9 @@
"output_type": "stream",
"text": [
"Scale(n) cvxpy cvxopt ipopt\n",
"100 0.0527 0.0660 0.0142\n",
"200 0.0710 0.3040 0.0601\n",
"300 0.1614 0.0690 0.0155\n"
"100 0.0520 0.0440 0.0070\n",
"200 0.0413 0.0520 0.0120\n",
"300 0.0420 0.0630 0.0170\n"
]
}
],
......
......@@ -15,7 +15,7 @@
{
"data": {
"text/plain": [
"datetime.datetime(2020, 11, 21, 14, 58, 25, 169575)"
"datetime.datetime(2020, 11, 21, 15, 31, 13, 254856)"
]
},
"execution_count": 1,
......@@ -39,7 +39,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
......@@ -96,44 +96,56 @@
},
{
"cell_type": "code",
"execution_count": 7,
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\data_preparing.py:412: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n",
" lambda x: x.fillna(x.median())).reset_index(\n",
"D:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\data_preparing.py:412: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n",
" lambda x: x.fillna(x.median())).reset_index(\n",
"D:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\data_preparing.py:412: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n",
" lambda x: x.fillna(x.median())).reset_index(\n",
"D:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\data_preparing.py:412: FutureWarning: DataFrame.mean and DataFrame.median with numeric_only=None will include datetime64 and datetime64tz columns in a future version.\n",
" lambda x: x.fillna(x.median())).reset_index(\n"
]
},
{
"ename": "IndexError",
"evalue": "index -1 is out of bounds for axis 0 with size 0",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-7-fe9f95d31cfa>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# %%time\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mpredicts\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mpredict_worker\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0md\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrftime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'%Y-%m-%d'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha_model\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0md\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mref_dates\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-7-fe9f95d31cfa>\u001b[0m in \u001b[0;36m<listcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# %%time\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mpredicts\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[0mpredict_worker\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0md\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrftime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'%Y-%m-%d'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha_model\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfor\u001b[0m \u001b[0md\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mref_dates\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m<ipython-input-6-a84bced2d505>\u001b[0m in \u001b[0;36mpredict_worker\u001b[1;34m(params)\u001b[0m\n\u001b[0;32m 21\u001b[0m data_source=data_source)\n\u001b[0;32m 22\u001b[0m \u001b[0mref_date\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmodel\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 23\u001b[1;33m \u001b[0mer\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0m_\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpredict_by_model\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mref_date\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdata_meta\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 24\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mer\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mD:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\composer.py\u001b[0m in \u001b[0;36mpredict_by_model\u001b[1;34m(ref_date, alpha_model, data_meta, x_values, codes)\u001b[0m\n\u001b[0;32m 165\u001b[0m codes: Iterable[int] = None):\n\u001b[0;32m 166\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mx_values\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 167\u001b[1;33m \u001b[0mpredict_data\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdata_meta\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfetch_predict_data\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mref_date\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0malpha_model\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 168\u001b[0m \u001b[0mcodes\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mx_values\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpredict_data\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'predict'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'code'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mpredict_data\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'predict'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'x'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 169\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mD:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\composer.py\u001b[0m in \u001b[0;36mfetch_predict_data\u001b[1;34m(self, ref_date, alpha_model)\u001b[0m\n\u001b[0;32m 140\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mwarm_start\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 141\u001b[0m \u001b[0mfillna\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 142\u001b[1;33m fit_target=alpha_model.fit_target)\n\u001b[0m\u001b[0;32m 143\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 144\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32mD:\\ProgramData\\Anaconda3\\envs\\alpha-mind\\lib\\site-packages\\alpha_mind-0.2.3-py3.7-win-amd64.egg\\alphamind\\model\\data_preparing.py\u001b[0m in \u001b[0;36mfetch_predict_phase\u001b[1;34m(engine, alpha_factors, ref_date, frequency, universe, batch, neutralized_risk, risk_model, pre_process, post_process, warm_start, fillna, fit_target)\u001b[0m\n\u001b[0;32m 444\u001b[0m \u001b[0mdates\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0munique\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdate_label\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 445\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 446\u001b[1;33m \u001b[1;32mif\u001b[0m \u001b[0mdates\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0mdt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mdatetime\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstrptime\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mref_date\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'%Y-%m-%d'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 447\u001b[0m \u001b[0mend\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdates\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 448\u001b[0m \u001b[0mstart\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdates\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[0mbatch\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mbatch\u001b[0m \u001b[1;33m<=\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdates\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32melse\u001b[0m \u001b[0mdates\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mIndexError\u001b[0m: index -1 is out of bounds for axis 0 with size 0"
"name": "stdout",
"output_type": "stream",
"text": [
"Wall time: 3.95 s\n"
]
}
],
"source": [
"# %%time\n",
"%%time\n",
"predicts = [predict_worker((d.strftime('%Y-%m-%d'), alpha_model)) for d in ref_dates]"
]
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 11,
"metadata": {},
"outputs": [],
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2020-11-21 15:34:50,320 - ALPHA_MIND - INFO - 2020-01-02 full re-balance: 300\n",
"2020-11-21 15:34:50,543 - ALPHA_MIND - INFO - 2020-01-02 is finished\n",
"2020-11-21 15:34:50,546 - ALPHA_MIND - INFO - 2020-01-16 full re-balance: 300\n",
"2020-11-21 15:34:50,962 - ALPHA_MIND - INFO - 2020-01-16 is finished\n",
"2020-11-21 15:34:50,975 - ALPHA_MIND - INFO - 2020-02-07 full re-balance: 300\n",
"2020-11-21 15:34:51,435 - ALPHA_MIND - INFO - 2020-02-07 is finished\n",
"2020-11-21 15:34:51,443 - ALPHA_MIND - INFO - 2020-02-21 full re-balance: 300\n",
"2020-11-21 15:34:51,802 - ALPHA_MIND - INFO - 2020-02-21 is finished\n"
]
}
],
"source": [
"industry_names = industry_list(industry_name, industry_level)\n",
"industry_total = engine.fetch_industry_matrix_range(universe, dates=ref_dates, category=industry_name, level=industry_level)\n",
......@@ -182,19 +194,28 @@
},
{
"cell_type": "code",
"execution_count": 8,
"execution_count": 12,
"metadata": {},
"outputs": [
{
"ename": "NameError",
"evalue": "name 'rets' is not defined",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-8-659ccccfe657>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mret_df\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mDataFrame\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m{\u001b[0m\u001b[1;34m'returns'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mrets\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'turn_over'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mturn_overs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'leverage'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mleverags\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mindex\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mref_dates\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 2\u001b[0m \u001b[0mret_df\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0madvanceDateByCalendar\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'china.sse'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mref_dates\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfreq\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[0mret_df\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mret_df\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mshift\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mret_df\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mret_df\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'tc_cost'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mret_df\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mturn_over\u001b[0m \u001b[1;33m*\u001b[0m \u001b[1;36m0.002\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mNameError\u001b[0m: name 'rets' is not defined"
]
"data": {
"text/plain": [
"<AxesSubplot:title={'center':'Fixed freq rebalanced: 10b'}>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAvkAAAFxCAYAAADpt7dQAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAACFK0lEQVR4nOzdeXgURfrA8W/P5L4nk5CQA0JCIqDc4TAICIRDdBXP9RZRWY0uLOgqKiBeyKrAisePVVjUdV1lV0FXJWAAAQUlQMADlQQIEMg9ue+Zrt8fWQYi5ACSTI738zw8ZKarut+uJJ23a6qrNKWUQgghhBBCCNFhGBwdgBBCCCGEEKJ5SZIvhBBCCCFEByNJvhBCCCGEEB2MJPlCCCGEEEJ0MJLkCyGEEEII0cFIki+EEEIIIUQHI0m+EMLhFixYQM+ePVv8OG+//TZOTk4NlrFarUybNg2z2YymaXz11VctHldz+eqrr9A0jYyMjAvaT1PaqS1prZ+f+miaxnvvveew4wshxNlIki+EaBVTp05F07Qz/n3wwQc88sgjfPvtt44OEYCPPvqI999/n//+979kZmYSFxfn6JBEC/nTn/7EsGHD8PDwqPempqamhkcffZSuXbvi7u7OZZddxu7du1s5UiGEOHeS5AshWs3IkSPJzMys82/KlCl4eXkREBDg6PAASE1NJTQ0lLi4OIKDg3FxcTmjTHV1davGVFNTg6xb2PxsNhu33norCQkJ9Zb585//zMqVK/nb3/5GcnIykZGRxMfHk5WV1YqRCiHEuZMkXwjRalxcXAgODq7zz83Nrc5wC6UUV155JUOGDKGmpgYAXdeJj49nxIgRWK1WAL788ktGjBiBu7s7oaGh3H333eTn59uPpZRi3rx5dOnSBS8vL26++WYKCgoajO/yyy9n3rx5HDp0CE3TiIiIsL9/zz33MG/ePLp27UpoaCgAaWlpXH/99fj5+WEymZgwYQI//PBDnX2uXr2anj174ubmRlxcHJ9++imapvH111/XG8fUqVOJj4/n1VdfJSIiAldXV8rKysjOzmbq1KkEBgbi7e3NiBEj2Lp16xn1U1JSGDp0KG5ublx88cV8+eWXddrlvvvuIyoqCnd3dyIjI3niiSeoqqqqN56CggJuv/12unXrhru7OxdddBGLFy+uc+NxMuY333yT7t274+PjwzXXXENubm6dfSUlJTFy5Eg8PDzw9fVl9OjRHDx40L79gw8+YMCAAbi5uREREcHs2bMpKyuzb6+qquKBBx7A19cXk8nEAw880GDsDXn11VeZOXMml1xyyVm3l5SUsHz5cl544QWuvvpqLrnkElatWoWrqyvLly+vUzY/P5/rr78eT09PQkJCWLJkyXnFJIQQzUWSfCFEm6JpGm+//TYnTpzg8ccfB+CFF15gz549/Otf/8LJyYlNmzZxzTXXcPPNN/P999+zdu1a0tPTufbaa+2J57Jly1iyZAkvvfQSe/bsYdCgQTz99NMNHvvjjz/m4YcfJiIigszMTJKTk+3bVq9eTW5uLhs3bmTTpk1kZ2dz2WWX0aVLF7Zt28a3337LRRddxOWXX25PbFNSUrj55pu58cYb2bdvH4888ggzZ85sUjvs3LmTTZs2sXbtWvbt24dSijFjxlBSUsK6detISUlh8uTJjB8/np9//rlO3dmzZzN//nxSUlIYPnw4V199NcePHwdqk/ygoCDef/99fv75Z/7617+yatUqFi5cWG8sVVVV9O3bl7Vr17J//37mzZvHU089xdtvv12nXHJyMps3b+bzzz8nMTGRvXv38sgjj9i3JyUlMXHiRAYPHsyOHTv47rvvuPPOO+03c2+//TYPPPAADz/8MPv37+fdd98lKSmJ+++/376POXPm8NFHH/Huu++yY8cOPD09ef311+vEcfLZhAt9nmLXrl1UVVUxadIk+3tGo5Hx48efcZP29NNPc/nll5OSksJjjz3Go48+yscff3xBxxdCiAuihBCiFdx1113KaDQqT09P+7/IyEillFJPPfWUioqKqlN+06ZNymg0qgULFignJyf10Ucf2beNHj1aPfbYY3XKHzlyRAEqJSVFKaVUaGioeuKJJ+qUuf7665XRaGwwzrPFMnr0aBUdHa1sNludcsOGDatTTtd1FRkZqZYuXaqUUuq2225Tl156aZ0yr776qgLUtm3b6o3hrrvuUr6+vqqkpMT+3qpVq1RoaKiqqampU3bMmDFq5syZSimlNm/erAC1YsUK+/aamhrVrVs39eSTT9Z7vCVLlqiePXvWOVZj7TRjxgwVHx9fJ+aAgABVWVlpf++FF15QwcHB9teXXXaZuvLKK+vdZ/fu3dX//d//1Xlvy5YtClAWi0WVlpYqV1dX9eabb9YpM3jw4Drfs++++05ddNFF6rvvvmvwHE6q73z/+c9/KkBVVVXVef+RRx5Rffr0sb8G1O23316nzC233KJGjBjRpOMLIURLaD/TJwgh2r1hw4bxzjvv2F83NIPLmDFjePjhh1mwYAH3338/1113nX1bcnIy3377La+99toZ9VJTU4mMjOT48eNnPDR72WWXsXbt2vOKffDgwRgMpz78TE5OZvfu3Xh5edUpV1FRQWpqKgD79+9n3LhxZ8TQFL17966z7+TkZLKysvDz86tTrqqqCnd39zrvXXrppfavnZycGDp0KPv377e/99Zbb7FixQrS09MpKyvDarWi63q9sei6zosvvsgHH3xARkYGlZWV1NTU0L179zNidnV1tb8ODQ0lOzvb/nr37t0sWrTorMfIzc3lyJEjzJ49u07vv/rfJzNpaWm4urpSVVV11u/rZ599Zn89dOhQfvnll3rPpzlomlbn9eltDjBixAgSExNbNAYhhGiIJPlCiFbj7u7e5KkObTYb33zzDUajkbS0NJRS9sRK13Uee+wx7rjjjjPqBQcHY7PZgDMTsQvh6elZ57Wu64wbN+6sNxq+vr4AdWJujuP17t2bNWvWnFHWw8OjwX2p08bO//vf/+bBBx9k0aJFjB49Gh8fH/7973/z5JNP1lt/8eLFvPDCCyxZsoRBgwbh7e3N0qVL+fzzz+uU++1DypqmnfHAcH3tcfIm45VXXmHMmDFnbA8LC+PXX39tcB/NrWvXrgBkZWXRrVs3+/vZ2dkEBwc3WPe35y2EEK1NxuQLIdqkBQsWcODAAb755ht2797NX/7yF/u22NhYfvrpJ3r27HnGPy8vL3x9fQkNDeWbb76ps8/fvr4QJ2MIDQ09I4bAwEAALr744maLITY2lkOHDuHj43PG8UJCQuqUPX06UqvVSnJyMr179wZg69atDBw4kNmzZzN48GCio6NJT09v8Nhbt25l0qRJ3HPPPQwcOJCePXvaP604F4MHD2b9+vVn3RYUFER4eDi//vrrWb+vbm5u9OzZExcXlzPacPv27eccS1PjdXV1rROzruskJSWd8YnMb6eA3bFjh73NhRDCESTJF0K0OVu2bOGFF17gnXfeYdiwYbz11lvMnz/fnkg988wzfPLJJ8yaNYu9e/dy8OBBEhMTueeee6ioqADg4Ycf5pVXXuEf//gHqampLF68mKSkpGaL8aGHHsJmszFlyhS2bdtGeno6X3/9NU8++aQ96Zw1axY7duzgySef5MCBA6xZs4bFixef1/Fuu+02evTowZVXXsmGDRtIT0/nu+++44UXXjhjCNKiRYv44osv+Pnnn3nggQfIzs7mgQceAOCiiy7ihx9+4JNPPuHgwYO88sorjT4getFFF/HVV1+xefNmDhw4wNy5c/nuu+/O+RzmzZvHunXr+NOf/sT333/Pr7/+yttvv23voX/++edZtmwZzz33HD/++CO//vora9eu5Q9/+ANQ++nG/fffz9y5c/n000/59ddfefTRR88YmrNz50569erFzp07G4wnLS2NvXv3cvToUQD27t3L3r17KS0tBcDHx4f777+fJ554gs8++4yffvqJadOmUVFRYY/ppM8++4zXXnuN1NRUXn31VT788ENmzZp1zm0khBDNxpEPBAghOo+77rpLjRs37qzbTn/YNT8/X4WFhanZs2fXKTN9+nQVERGhCgsLlVJKbd26VY0bN055eXkpDw8P1atXLzVz5kz7g6k2m009/vjjymw2Kw8PD3X99derJUuWnPeDt/fcc88ZZdPT09Wtt96qAgIClIuLi+rWrZu67bbb1KFDh+xl/vWvf6nIyEjl4uKihg4dqtauXdukB2/P1lZ5eXnq/vvvVyEhIcrZ2VmFhISoKVOmqD179iilTj14+8knn6hBgwYpFxcX1bt3b5WYmGjfR3V1tZo+fboymUzK29tb3XLLLfaHgU/67YOohYWF6sYbb1Te3t7K399fJSQkqLlz56ru3bs3GPM//vEP9ds/M4mJiWr48OHKzc1N+fj4qMsvv1wdPHjQvn3NmjVq+PDhyt3dXXl7e6v+/furp59+2r69vLxcTZ8+Xfn4+CgfHx913333qTlz5tT5np1sh82bN9fbxkrVfl+BM/6dXq+6ulr9+c9/VkFBQcrV1VXFxcWp5OTkOvsB1NKlS9U111yj3N3dVXBwsHrxxRcbPLYQQrQ0TSkZOCiEEK0lPT2dHj16sG3btiY/hCuEEEKcKxmuI4QQQgghRAcjSb4QQgghhBAdjAzXEUIIIYQQooNp0jz5e/fuZdWqVfZ5oadMmVJnu1KKVatWkZKSgqurKwkJCURGRtq367rOnDlz8Pf3Z86cOQCUlpaydOlScnNzCQwMZNasWWcsKiOEEEIIIYQ4d40O19F1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4d1336Wqqor777+frKwsPv30U/r06YO/vz9WqxUnJycKCwuJiIhwdLgdjlybTpFrk1ybTifXpnMn15Naci05N+3+u2+1WomIiKBLly5ccsklTJ48mffff9++3dXVleHDh+Pm5sYHH3zAe++9R05OjgMjbjlna4v33nsPAC8vLwwGA6Wlpbi7u6OU6pAzFxiNRgYPHsySJUuIjo7mp59+qvP9njhxIpGRkQD4+Pjg5eVFaWmpo8JtUa6urvTv35/Zs2cTERHBJZdcQrdu3cjPzwdqP+IEOHbsGL169eLEiROsXr2akpISR4bdYci16RS5Nsm16XRybTp3cj2pJdeSc9Puk/zq6mpKSkrs38gpU6ZQWFjIjh07ANA0DWdnZ44ePcqXX36Jj48PwcHBjgy5xdTXFrt27cLPz4+ioiLee+893n33XX744Qd69uzp4Iibn8FgoGvXrri5uREXF0d+fj5paWnU1NQApx7CKS0t5d133+Xo0aMdsh0AXFxcGDx4sP210WgkPT0dk8lkfy8vL4/S0lJWr17NK6+8go+PD97e3o4It8ORa9Mpcm2Sa9Pp5Np07uR6UkuuJeem3ST59T06MHToULKzs9mzZ4/9vauvvprPPvvM/vr9998nLCyMN954g6uvvrrFY21p59oWn376KSEhIdx44434+/vj5ubGs88+S69evVor5BZRXzs4OzsD0KVLF3r16sX+/fvtD7VpmkZOTg5Lly7FarWyYMGCDnEhrK8t3N3d7V+XlJTg6+tLQECA/b2amhqysrLw9fXl2WefZdKkSS0ea0dz+gNgpz9Q2RmvTefaFh312lRfO3TGa1N9bSHXprM7/dObznw9Odd26KjXkgvV5sfkJycn891333HVVVfVGZunlMJqteLs7MzkyZNZt24dkZGRdOnShYsuuoiff/6ZiooK3N3dmTZtGi4uLo47iWZyPm3Rq1cvfvnlFyorKwkODubGG29s9zM2NNQOSqk6YxFHjBjBsWPHyMjI4OjRo3h4eBAbG8uf/vSnDtErdC5tYbFY8PT0BGDv3r24uLgQExPDkiVL6vSgiaZJSUnh008/xWw2ExISwnXXXWdvb5vN1qmuTefTFh3x2tRQOwCd6tp0Lm0h16ba816zZg2BgYH4+Phw5513dsrryfm0Q0e8ljSXNpnkn3xa/Mcff+TDDz/EaDRy4MAB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\n",
"text/plain": [
"<Figure size 864x432 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment