In [83]:
#!/Tsan/bin/python
# -*- coding: utf-8 -*-
In [84]:
# Libraries To Use
from __future__ import division
import numpy as np
import pandas as pd
import statsmodels.api as sm
import os
from datetime import datetime,time,date
import matplotlib.pyplot as plt
import seaborn as sns
import mysql.connector
import cvxopt as cv
from cvxopt import solvers
from sklearn.covariance import ShrunkCovariance
import scipy as sp
In [85]:
import json
In [86]:
with open('conf.json', 'r') as fd:
conf = json.load(fd)
cnx= mysql.connector.connect(**conf['src_db'])
In [87]:
%matplotlib inline
In [88]:
tableName ='fund_nv_standard_w' # table to query
indexID = 'hs300' # benchmark
In [ ]:
In [89]:
def get_simplied_fund_nw(fundID,tableName =tableName):
'''Get simplied fund data which has only two columns: date and the corresponding networth
Input:
fundID: String, the fundID of the fund, JRXXXXX alike.
tableName : String, the corresponding table name of the fund net worth data
Return: DataFrame, which has only two columns: date and the corresponding networth,
and names of the columns are respectively date and fundID.
'''
try:
#sql_query='select id,name from student where age > %s'
cursor = cnx.cursor()
sql = "select statistic_date,swanav from %s where fund_id = '%s'" % (tableName,fundID)
cursor.execute(sql)
result = cursor.fetchall()
finally:
pass
pdResult = pd.DataFrame(result,dtype =float)
pdResult.columns = ['date',fundID]
pdResult = pdResult.drop_duplicates().set_index('date')
pdResult = pdResult.dropna(axis=0)
pdResult.index = pd.to_datetime(pdResult.index)
pdResult = pdResult.fillna(method = 'ffill')
#pdResult ['weekly_return'] = pdResult['net_worth'].pct_change()
return pdResult
In [90]:
# test_list
fund_list = ['JR000007','JR000050','JR000052','JR000053','JR000169','JR000170','JR000171','JR000185','JR000186','JR000278']
NumOfAsset = len(fund_list)
In [91]:
get_simplied_fund_nw(fund_list[0],tableName =tableName)
Out[91]:
JR000007
date
2013-04-09
1.000
2013-04-26
0.998
2013-05-31
1.005
2013-06-30
1.032
2013-07-26
1.057
2013-08-30
1.063
2013-09-30
1.065
2013-10-10
1.057
2013-10-25
1.028
2013-11-29
1.005
2013-12-27
1.005
2014-01-30
1.026
2014-02-28
1.066
2014-03-28
1.085
2014-04-30
1.078
2014-05-30
1.129
2014-06-30
1.107
2014-07-18
1.099
2014-07-25
1.116
2014-08-01
1.117
2014-08-08
1.117
2014-08-15
1.130
2014-08-22
1.137
2014-08-29
1.137
2014-09-05
1.149
2014-09-12
1.140
2014-09-19
1.143
2014-09-26
1.120
2014-09-30
1.119
2014-10-10
1.119
...
...
2016-11-04
1.489
2016-11-11
1.489
2016-11-18
1.515
2016-11-25
1.568
2016-12-02
1.611
2016-12-09
1.579
2016-12-16
1.566
2016-12-23
1.565
2016-12-30
1.545
2017-01-06
1.536
2017-01-13
1.535
2017-01-20
1.549
2017-01-26
1.547
2017-02-03
1.582
2017-02-10
1.515
2017-02-17
1.396
2017-02-24
1.393
2017-03-03
1.338
2017-03-10
1.374
2017-03-17
1.291
2017-03-24
1.390
2017-03-31
1.366
2017-04-07
1.408
2017-04-14
1.502
2017-04-21
1.567
2017-04-28
1.506
2017-05-05
1.554
2017-05-12
1.530
2017-05-19
1.504
2017-05-26
1.514
165 rows × 1 columns
In [92]:
fund_data = map(get_simplied_fund_nw, fund_list)
In [93]:
fund_data_merged = reduce(lambda x,y : x.merge(y,how='inner',left_index=True, right_index=True), fund_data)
In [94]:
weekly_return = fund_data_merged.pct_change()
In [95]:
fund_data_merged
Out[95]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
date
2014-03-28
1.085
1.1048
1.4305
1.1257
1.104
1.064
1.016
1.000
0.9945
0.977
2014-05-30
1.129
1.1063
1.3998
1.1132
1.122
1.069
1.019
1.003
1.0324
0.980
2014-07-18
1.099
1.1174
1.4585
1.1239
1.124
1.080
1.036
1.014
1.0545
1.009
2014-07-25
1.116
1.1147
1.4439
1.1414
1.167
1.080
1.038
1.016
1.0745
1.025
2014-08-01
1.117
1.1216
1.4357
1.1518
1.194
1.081
1.039
1.017
1.0792
1.037
2014-09-05
1.149
1.1331
1.4784
1.1354
1.212
1.090
1.054
1.025
1.1612
1.072
2014-10-31
1.119
1.1595
1.5496
1.1647
1.211
1.133
1.094
1.071
1.1962
1.105
2014-11-21
1.150
1.1636
1.5522
1.1649
1.195
1.138
1.106
1.085
1.1914
1.113
2015-01-16
1.160
1.2809
1.4115
1.1708
1.626
1.467
1.411
1.374
1.3244
1.495
2015-01-23
1.132
1.2903
1.4267
1.1827
1.718
1.376
1.343
1.298
1.3005
1.480
2015-01-30
1.137
1.2875
1.4330
1.1818
1.641
1.349
1.326
1.293
1.3150
1.402
2015-02-06
1.134
1.2928
1.4560
1.1799
1.584
1.310
1.284
1.265
1.2517
1.360
2015-02-13
1.168
1.2922
1.4650
1.1793
1.697
1.350
1.320
1.304
1.2579
1.418
2015-02-27
1.187
1.2933
1.4780
1.1840
1.685
1.383
1.354
1.334
1.2524
1.475
2015-03-06
1.128
1.2977
1.5008
1.1743
1.754
1.383
1.361
1.336
1.2545
1.448
2015-03-13
1.140
1.2992
1.5052
1.1849
1.727
1.430
1.402
1.382
1.2623
1.513
2015-03-20
1.143
1.3007
1.5142
1.1882
1.841
1.501
1.471
1.447
1.2962
1.612
2015-03-27
1.092
1.3011
1.5279
1.1965
1.933
1.545
1.514
1.490
1.3151
1.628
2015-04-10
1.082
1.3107
1.5628
1.2012
1.954
1.741
1.694
1.669
1.4243
1.764
2015-04-17
1.070
1.3110
1.5445
1.1967
1.923
1.757
1.712
1.662
1.4149
1.792
2015-04-24
1.063
1.3179
1.5880
1.1950
1.885
1.780
1.734
1.703
1.3971
1.857
2015-05-08
1.074
1.3225
1.6306
1.2373
1.905
1.738
1.695
1.664
1.3449
1.841
2015-05-15
1.117
1.3242
1.7017
1.2099
1.910
1.821
1.774
1.737
1.3422
1.922
2015-05-22
1.182
1.3319
1.7324
1.2171
2.036
1.981
1.929
1.872
1.3472
2.122
2015-05-29
1.187
1.3495
1.7916
1.2163
1.968
2.029
1.983
1.894
1.3422
2.101
2015-06-05
1.229
1.3616
1.8583
1.2509
2.200
2.153
2.101
1.998
1.3606
2.215
2015-06-12
1.233
1.3681
1.8914
1.2707
2.173
2.207
2.154
2.057
1.3891
2.275
2015-06-26
1.256
1.3817
1.8428
1.2812
1.903
1.939
1.919
1.829
1.3530
1.918
2015-07-03
1.317
1.3828
1.8692
1.2780
1.841
1.773
1.746
1.662
1.3503
1.665
2015-07-10
1.494
1.4244
1.9268
1.3306
1.878
1.745
1.704
1.641
1.4358
1.540
...
...
...
...
...
...
...
...
...
...
...
2016-10-14
1.433
1.4527
2.1524
1.4135
2.076
1.807
1.695
1.839
1.7904
1.669
2016-10-21
1.427
1.4547
2.1642
1.4135
2.080
1.806
1.694
1.836
1.8340
1.679
2016-10-28
1.459
1.4530
2.1934
1.4096
2.110
1.807
1.696
1.838
1.9129
1.671
2016-11-04
1.489
1.4545
2.2196
1.4191
2.097
1.802
1.691
1.831
1.9222
1.667
2016-11-11
1.489
1.4550
2.2830
1.4280
2.118
1.809
1.696
1.841
2.0476
1.660
2016-11-18
1.515
1.4564
2.2385
1.4247
2.098
1.810
1.694
1.837
1.9598
1.651
2016-11-25
1.568
1.4564
2.2341
1.4304
2.118
1.810
1.694
1.840
2.0478
1.696
2016-12-02
1.611
1.4564
2.2311
1.4107
2.142
1.808
1.693
1.834
2.0109
1.696
2016-12-09
1.579
1.4582
2.2304
1.4153
2.142
1.807
1.693
1.831
2.0540
1.674
2016-12-16
1.566
1.4601
2.2142
1.4111
2.101
1.796
1.683
1.815
2.1024
1.609
2016-12-23
1.565
1.4619
2.2350
1.4140
2.081
1.793
1.680
1.809
1.9988
1.592
2016-12-30
1.545
1.4619
2.2453
1.4214
2.079
1.792
1.680
1.806
1.9801
1.607
2017-01-06
1.536
1.4617
2.2359
1.4282
2.109
1.793
1.680
1.810
1.9653
1.623
2017-01-13
1.535
1.4618
2.2597
1.4357
2.077
1.775
1.662
1.788
1.9886
1.611
2017-01-20
1.549
1.4576
2.2634
1.4359
2.107
1.775
1.663
1.788
1.9851
1.632
2017-02-03
1.582
1.4591
2.2625
1.4284
2.116
1.777
1.666
1.791
2.0064
1.639
2017-02-10
1.515
1.4600
2.2636
1.4304
2.153
1.784
1.672
1.798
2.0147
1.651
2017-02-17
1.396
1.4585
2.2752
1.4305
2.197
1.788
1.676
1.803
2.0127
1.669
2017-02-24
1.393
1.4637
2.2835
1.4350
2.241
1.860
1.745
1.876
1.9749
1.688
2017-03-03
1.338
1.4634
2.2627
1.4282
2.211
1.866
1.747
1.878
1.9811
1.682
2017-03-10
1.374
1.4638
2.2999
1.4280
2.205
1.870
1.750
1.885
1.9428
1.702
2017-03-17
1.291
1.4655
2.2840
1.4243
2.210
1.867
1.747
1.882
1.9498
1.711
2017-03-24
1.390
1.4659
2.2551
1.4296
2.224
1.871
1.752
1.887
1.9534
1.763
2017-04-07
1.408
1.4672
2.3003
1.4158
2.226
1.863
1.745
1.879
1.9683
1.762
2017-04-14
1.502
1.4667
2.3074
1.4172
2.194
1.855
1.738
1.871
1.9400
1.746
2017-04-21
1.567
1.4669
2.2765
1.3973
2.213
1.864
1.749
1.888
1.9336
1.772
2017-04-28
1.506
1.4674
2.2716
1.3993
2.231
1.877
1.760
1.897
1.9207
1.769
2017-05-05
1.554
1.4670
2.2764
1.3961
2.201
1.855
1.739
1.871
1.9202
1.767
2017-05-12
1.530
1.4672
2.2465
1.3924
2.202
1.823
1.710
1.829
1.9158
1.768
2017-05-19
1.504
1.4675
2.2444
1.3994
2.228
1.851
1.736
1.864
1.8956
1.793
118 rows × 10 columns
In [96]:
# coefficient
coeff_matrix = weekly_return.corr(method='pearson').round(4)
coeff_matrix
Out[96]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
JR000007
1.0000
0.1425
0.0626
0.0951
0.0851
0.0846
0.0670
0.0849
0.0849
0.0718
JR000050
0.1425
1.0000
-0.3386
0.2411
0.7026
0.6265
0.6165
0.6125
0.4198
0.5979
JR000052
0.0626
-0.3386
1.0000
0.2065
-0.2916
-0.1577
-0.1406
-0.1345
-0.0511
-0.2154
JR000053
0.0951
0.2411
0.2065
1.0000
0.1176
0.0307
0.0225
0.0376
0.0844
-0.0242
JR000169
0.0851
0.7026
-0.2916
0.1176
1.0000
0.7610
0.7639
0.7406
0.3614
0.8310
JR000170
0.0846
0.6265
-0.1577
0.0307
0.7610
1.0000
0.9933
0.9815
0.3954
0.9161
JR000171
0.0670
0.6165
-0.1406
0.0225
0.7639
0.9933
1.0000
0.9823
0.3807
0.9238
JR000185
0.0849
0.6125
-0.1345
0.0376
0.7406
0.9815
0.9823
1.0000
0.4129
0.9149
JR000186
0.0849
0.4198
-0.0511
0.0844
0.3614
0.3954
0.3807
0.4129
1.0000
0.3747
JR000278
0.0718
0.5979
-0.2154
-0.0242
0.8310
0.9161
0.9238
0.9149
0.3747
1.0000
In [97]:
#coeff_matrix.reset_index().to_sql(name='multiple_funds_coeff',con=db_engine, if_exists='replace',index=False)
In [98]:
# visualization
plt.figure(figsize=(16,9))
ax = plt.axes()
sns.heatmap(coeff_matrix ,ax=ax, annot=True)
ax.set_title('Correlationship Matrix',fontsize=18, fontweight='bold')
plt.show()
In [99]:
# cov
fund_cov = weekly_return.cov()
In [100]:
weekly_return.dropna()
Out[100]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
date
2014-05-30
0.040553
0.001358
-0.021461
-0.011104
0.016304
0.004699
0.002953
0.003000
0.038110
0.003071
2014-07-18
-0.026572
0.010033
0.041935
0.009612
0.001783
0.010290
0.016683
0.010967
0.021406
0.029592
2014-07-25
0.015469
-0.002416
-0.010010
0.015571
0.038256
0.000000
0.001931
0.001972
0.018966
0.015857
2014-08-01
0.000896
0.006190
-0.005679
0.009112
0.023136
0.000926
0.000963
0.000984
0.004374
0.011707
2014-09-05
0.028648
0.010253
0.029742
-0.014239
0.015075
0.008326
0.014437
0.007866
0.075982
0.033751
2014-10-31
-0.026110
0.023299
0.048160
0.025806
-0.000825
0.039450
0.037951
0.044878
0.030141
0.030784
2014-11-21
0.027703
0.003536
0.001678
0.000172
-0.013212
0.004413
0.010969
0.013072
-0.004013
0.007240
2015-01-16
0.008696
0.100808
-0.090646
0.005065
0.360669
0.289104
0.275769
0.266359
0.111633
0.343217
2015-01-23
-0.024138
0.007339
0.010769
0.010164
0.056581
-0.062031
-0.048193
-0.055313
-0.018046
-0.010033
2015-01-30
0.004417
-0.002170
0.004416
-0.000761
-0.044820
-0.019622
-0.012658
-0.003852
0.011150
-0.052703
2015-02-06
-0.002639
0.004117
0.016050
-0.001608
-0.034735
-0.028910
-0.031674
-0.021655
-0.048137
-0.029957
2015-02-13
0.029982
-0.000464
0.006181
-0.000509
0.071338
0.030534
0.028037
0.030830
0.004953
0.042647
2015-02-27
0.016267
0.000851
0.008874
0.003985
-0.007071
0.024444
0.025758
0.023006
-0.004372
0.040197
2015-03-06
-0.049705
0.003402
0.015426
-0.008193
0.040950
0.000000
0.005170
0.001499
0.001677
-0.018305
2015-03-13
0.010638
0.001156
0.002932
0.009027
-0.015393
0.033984
0.030125
0.034431
0.006218
0.044890
2015-03-20
0.002632
0.001155
0.005979
0.002785
0.066010
0.049650
0.049215
0.047033
0.026856
0.065433
2015-03-27
-0.044619
0.000308
0.009048
0.006985
0.049973
0.029314
0.029232
0.029717
0.014581
0.009926
2015-04-10
-0.009158
0.007378
0.022842
0.003928
0.010864
0.126861
0.118890
0.120134
0.083036
0.083538
2015-04-17
-0.011091
0.000229
-0.011710
-0.003746
-0.015865
0.009190
0.010626
-0.004194
-0.006600
0.015873
2015-04-24
-0.006542
0.005263
0.028164
-0.001421
-0.019761
0.013090
0.012850
0.024669
-0.012580
0.036272
2015-05-08
0.010348
0.003490
0.026826
0.035397
0.010610
-0.023596
-0.022491
-0.022901
-0.037363
-0.008616
2015-05-15
0.040037
0.001285
0.043604
-0.022145
0.002625
0.047756
0.046608
0.043870
-0.002008
0.043998
2015-05-22
0.058192
0.005815
0.018041
0.005951
0.065969
0.087864
0.087373
0.077720
0.003725
0.104058
2015-05-29
0.004230
0.013214
0.034172
-0.000657
-0.033399
0.024230
0.027994
0.011752
-0.003711
-0.009896
2015-06-05
0.035383
0.008966
0.037229
0.028447
0.117886
0.061114
0.059506
0.054910
0.013709
0.054260
2015-06-12
0.003255
0.004774
0.017812
0.015829
-0.012273
0.025081
0.025226
0.029530
0.020947
0.027088
2015-06-26
0.018654
0.009941
-0.025695
0.008263
-0.124252
-0.121432
-0.109099
-0.110841
-0.025988
-0.156923
2015-07-03
0.048567
0.000796
0.014326
-0.002498
-0.032580
-0.085611
-0.090151
-0.091307
-0.001996
-0.131908
2015-07-10
0.134396
0.030084
0.030815
0.041158
0.020098
-0.015792
-0.024055
-0.012635
0.063319
-0.075075
2015-07-17
0.000669
0.003510
0.001661
-0.007290
0.029819
0.053868
0.071009
0.072517
0.022496
0.085065
...
...
...
...
...
...
...
...
...
...
...
2016-10-14
-0.012405
0.001655
0.005043
0.011739
0.017647
0.002775
0.002959
0.006568
0.015426
0.004816
2016-10-21
-0.004187
0.001377
0.005482
0.000000
0.001927
-0.000553
-0.000590
-0.001631
0.024352
0.005992
2016-10-28
0.022425
-0.001169
0.013492
-0.002759
0.014423
0.000554
0.001181
0.001089
0.043021
-0.004765
2016-11-04
0.020562
0.001032
0.011945
0.006740
-0.006161
-0.002767
-0.002948
-0.003808
0.004862
-0.002394
2016-11-11
0.000000
0.000344
0.028564
0.006272
0.010014
0.003885
0.002957
0.005461
0.065238
-0.004199
2016-11-18
0.017461
0.000962
-0.019492
-0.002311
-0.009443
0.000553
-0.001179
-0.002173
-0.042879
-0.005422
2016-11-25
0.034983
0.000000
-0.001966
0.004001
0.009533
0.000000
0.000000
0.001633
0.044903
0.027256
2016-12-02
0.027423
0.000000
-0.001343
-0.013772
0.011331
-0.001105
-0.000590
-0.003261
-0.018019
0.000000
2016-12-09
-0.019863
0.001236
-0.000314
0.003261
0.000000
-0.000553
0.000000
-0.001636
0.021433
-0.012972
2016-12-16
-0.008233
0.001303
-0.007263
-0.002968
-0.019141
-0.006087
-0.005907
-0.008738
0.023564
-0.038829
2016-12-23
-0.000639
0.001233
0.009394
0.002055
-0.009519
-0.001670
-0.001783
-0.003306
-0.049277
-0.010566
2016-12-30
-0.012780
0.000000
0.004609
0.005233
-0.000961
-0.000558
0.000000
-0.001658
-0.009356
0.009422
2017-01-06
-0.005825
-0.000137
-0.004187
0.004784
0.014430
0.000558
0.000000
0.002215
-0.007474
0.009956
2017-01-13
-0.000651
0.000068
0.010644
0.005251
-0.015173
-0.010039
-0.010714
-0.012155
0.011856
-0.007394
2017-01-20
0.009121
-0.002873
0.001637
0.000139
0.014444
0.000000
0.000602
0.000000
-0.001760
0.013035
2017-02-03
0.021304
0.001029
-0.000398
-0.005223
0.004271
0.001127
0.001804
0.001678
0.010730
0.004289
2017-02-10
-0.042351
0.000617
0.000486
0.001400
0.017486
0.003939
0.003601
0.003908
0.004137
0.007322
2017-02-17
-0.078548
-0.001027
0.005125
0.000070
0.020437
0.002242
0.002392
0.002781
-0.000993
0.010902
2017-02-24
-0.002149
0.003565
0.003648
0.003146
0.020027
0.040268
0.041169
0.040488
-0.018781
0.011384
2017-03-03
-0.039483
-0.000205
-0.009109
-0.004739
-0.013387
0.003226
0.001146
0.001066
0.003139
-0.003555
2017-03-10
0.026906
0.000273
0.016441
-0.000140
-0.002714
0.002144
0.001717
0.003727
-0.019333
0.011891
2017-03-17
-0.060408
0.001161
-0.006913
-0.002591
0.002268
-0.001604
-0.001714
-0.001592
0.003603
0.005288
2017-03-24
0.076685
0.000273
-0.012653
0.003721
0.006335
0.002142
0.002862
0.002657
0.001846
0.030392
2017-04-07
0.012950
0.000887
0.020043
-0.009653
0.000899
-0.004276
-0.003995
-0.004240
0.007628
-0.000567
2017-04-14
0.066761
-0.000341
0.003087
0.000989
-0.014376
-0.004294
-0.004011
-0.004258
-0.014378
-0.009081
2017-04-21
0.043276
0.000136
-0.013392
-0.014042
0.008660
0.004852
0.006329
0.009086
-0.003299
0.014891
2017-04-28
-0.038928
0.000341
-0.002152
0.001431
0.008134
0.006974
0.006289
0.004767
-0.006671
-0.001693
2017-05-05
0.031873
-0.000273
0.002113
-0.002287
-0.013447
-0.011721
-0.011932
-0.013706
-0.000260
-0.001131
2017-05-12
-0.015444
0.000136
-0.013135
-0.002650
0.000454
-0.017251
-0.016676
-0.022448
-0.002291
0.000566
2017-05-19
-0.016993
0.000204
-0.000935
0.005027
0.011807
0.015359
0.015205
0.019136
-0.010544
0.014140
117 rows × 10 columns
In [101]:
# to calShrunkCov
def calShrunkCov(weekly_return):
'''calculate Shrunk Covariance. ie. a 10 asset return array should return 10 * 10 dimension array
Input: N * K np.array .
Output: N * N array'''
return ShrunkCovariance(0.1).fit(weekly_return.dropna().values).covariance_
In [ ]:
In [102]:
# descriptive information
descri_info = weekly_return.describe().round(4)
descri_info.T
Out[102]:
count
mean
std
min
25%
50%
75%
max
JR000007
117.0
0.0032
0.0295
-0.0959
-0.0105
0.0027
0.0184
0.1344
JR000050
117.0
0.0025
0.0102
-0.0084
-0.0002
0.0003
0.0017
0.1008
JR000052
117.0
0.0040
0.0152
-0.0906
-0.0013
0.0021
0.0082
0.0482
JR000053
117.0
0.0019
0.0083
-0.0221
-0.0008
0.0002
0.0040
0.0412
JR000169
117.0
0.0069
0.0449
-0.1243
-0.0134
0.0024
0.0200
0.3607
JR000170
117.0
0.0055
0.0406
-0.1214
-0.0044
0.0012
0.0123
0.2891
JR000171
117.0
0.0053
0.0396
-0.1091
-0.0054
0.0012
0.0144
0.2758
JR000185
117.0
0.0060
0.0386
-0.1108
-0.0042
0.0016
0.0161
0.2664
JR000186
117.0
0.0059
0.0269
-0.0753
-0.0075
0.0043
0.0166
0.1116
JR000278
117.0
0.0063
0.0481
-0.1569
-0.0091
0.0051
0.0197
0.3432
In [103]:
#descri_info.T.reset_index().to_sql(name='multiple_funds_description',con=db_engine, if_exists='replace',index=False)
In [104]:
# ------------------------------ minimize risk ---------------------------------
In [105]:
tANetWorth = fund_data_merged /fund_data_merged.iloc[0]
tACovMatrix = tANetWorth.ewm(ignore_na=True, min_periods=0, halflife = 60).cov(pairwise = True).iloc[-1]
endOfMonthList = tANetWorth.index
positionSheetMR = pd.DataFrame(index=tANetWorth.index, columns = tANetWorth.columns, data= None, dtype =float)
positionSheetRB = positionSheetMR.copy()
In [106]:
positionSheetRB
Out[106]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
date
2014-03-28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-05-30
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-07-18
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-07-25
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-08-01
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-09-05
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-10-31
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-11-21
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-01-16
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-01-23
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-01-30
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-02-06
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-02-13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-02-27
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-06
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-20
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-27
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-04-10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-04-17
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-04-24
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-08
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-15
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-22
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-29
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-06-05
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-06-12
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-06-26
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-07-03
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-07-10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
...
...
...
...
...
...
...
...
...
...
...
2016-10-14
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-10-21
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-10-28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-11-04
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-11-11
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-11-18
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-11-25
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-12-02
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-12-09
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-12-16
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-12-23
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2016-12-30
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-01-06
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-01-13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-01-20
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-02-03
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-02-10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-02-17
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-02-24
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-03-03
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-03-10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-03-17
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-03-24
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-04-07
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-04-14
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-04-21
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-04-28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-05-05
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-05-12
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2017-05-19
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
118 rows × 10 columns
In [107]:
endOfMonthList
Out[107]:
DatetimeIndex(['2014-03-28', '2014-05-30', '2014-07-18', '2014-07-25',
'2014-08-01', '2014-09-05', '2014-10-31', '2014-11-21',
'2015-01-16', '2015-01-23',
...
'2017-03-10', '2017-03-17', '2017-03-24', '2017-04-07',
'2017-04-14', '2017-04-21', '2017-04-28', '2017-05-05',
'2017-05-12', '2017-05-19'],
dtype='datetime64[ns]', name=u'date', length=118, freq=None)
In [108]:
def cal_minRisk_weight(cov):
'''To calculate weight of portfolio with min Risk
Input: Cov: n-d array, obtained from df.values
Output: 1-d array, the weight vector'''
stkNum = cov.shape[1]
P = cv.matrix(cov)
q = cv.matrix(0.0, (stkNum, 1))
G = cv.matrix(np.concatenate((np.diag(np.ones(stkNum)), - np.diag(np.ones(stkNum)))))
h = cv.matrix(np.append(0.2 * np.ones(stkNum), np.zeros(stkNum)))
A = cv.matrix(np.ones(stkNum)).T
b = cv.matrix(1.0).T
sol = solvers.qp(P, q, G, h, A, b)
return np.array(list(sol['x']))
In [109]:
# backtest (change position at the end of each month)
returnDF = tANetWorth.pct_change()
for date in tANetWorth.index:
tempdf = returnDF.loc[:date]
tempNWdf = tANetWorth.loc[:date]
if date in endOfMonthList and tempdf.shape[0] >= 5 * NumOfAsset: # burn in period
temCovMatrix = calShrunkCov(tempdf.iloc[-5*NumOfAsset:])
#print temCovMatrix
# Optimize
'''stkNum = temCovMatrix.shape[1]
P = cv.matrix(temCovMatrix)
q = cv.matrix(0.0, (stkNum, 1))
G = cv.matrix(np.concatenate((np.diag(np.ones(stkNum)), - np.diag(np.ones(stkNum)))))
h = cv.matrix(np.append(0.2 * np.ones(stkNum), np.zeros(stkNum)))
A = cv.matrix(np.ones(stkNum)).T
b = cv.matrix(1.0).T
sol = solvers.qp(P, q, G, h, A, b)'''
positionSheetMR .loc[date] = cal_minRisk_weight(temCovMatrix)
positionSheetRB.loc[date] = cal_RB_weight(temCovMatrix)
pcost dcost gap pres dres
0: 4.7780e-04 -2.0006e+00 2e+00 0e+00 3e-16
1: 4.7721e-04 -2.0590e-02 2e-02 1e-16 5e-16
2: 4.2859e-04 -6.7867e-04 1e-03 2e-16 3e-17
3: 1.6252e-04 -8.1274e-06 2e-04 1e-16 1e-18
4: 1.0036e-04 7.9044e-05 2e-05 8e-17 4e-19
5: 9.0850e-05 8.8580e-05 2e-06 8e-17 2e-19
6: 9.0079e-05 8.9748e-05 3e-07 1e-16 1e-19
7: 8.9879e-05 8.9830e-05 5e-08 1e-16 2e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.6831e-04 -2.0006e+00 2e+00 1e-16 3e-16
1: 4.6775e-04 -2.0578e-02 2e-02 9e-17 7e-16
2: 4.2090e-04 -6.7095e-04 1e-03 6e-17 4e-17
3: 1.5984e-04 -7.8118e-06 2e-04 1e-16 1e-18
4: 9.8781e-05 7.7836e-05 2e-05 2e-16 2e-19
5: 8.9482e-05 8.7256e-05 2e-06 2e-16 1e-19
6: 8.8748e-05 8.8430e-05 3e-07 1e-16 1e-19
7: 8.8564e-05 8.8514e-05 5e-08 2e-16 2e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.6834e-04 -2.0006e+00 2e+00 0e+00 3e-16
1: 4.6778e-04 -2.0580e-02 2e-02 6e-17 5e-16
2: 4.2095e-04 -6.7204e-04 1e-03 7e-17 3e-17
3: 1.5994e-04 -7.4867e-06 2e-04 2e-16 9e-19
4: 9.8937e-05 7.8018e-05 2e-05 2e-16 4e-19
5: 8.9659e-05 8.7427e-05 2e-06 1e-16 1e-19
6: 8.8927e-05 8.8620e-05 3e-07 9e-17 1e-19
7: 8.8757e-05 8.8707e-05 5e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.7971e-04 -2.0006e+00 2e+00 1e-16 2e-16
1: 4.7912e-04 -2.0585e-02 2e-02 2e-16 4e-16
2: 4.3001e-04 -6.7492e-04 1e-03 1e-16 2e-17
3: 1.6206e-04 -8.1110e-06 2e-04 1e-16 1e-18
4: 9.9906e-05 7.8657e-05 2e-05 2e-16 4e-19
5: 9.0369e-05 8.8087e-05 2e-06 1e-16 1e-19
6: 8.9576e-05 8.9252e-05 3e-07 1e-16 2e-19
7: 8.9380e-05 8.9336e-05 4e-08 8e-17 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.8646e-04 -2.0006e+00 2e+00 2e-16 3e-16
1: 4.8586e-04 -2.0585e-02 2e-02 1e-16 3e-16
2: 4.3557e-04 -6.7432e-04 1e-03 1e-16 2e-17
3: 1.6358e-04 -8.3134e-06 2e-04 1e-16 5e-19
4: 1.0075e-04 7.9312e-05 2e-05 9e-17 3e-19
5: 9.1031e-05 8.8703e-05 2e-06 2e-16 2e-19
6: 9.0179e-05 8.9900e-05 3e-07 1e-16 2e-19
7: 9.0008e-05 8.9968e-05 4e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.8773e-04 -2.0006e+00 2e+00 0e+00 4e-16
1: 4.8712e-04 -2.0586e-02 2e-02 1e-16 4e-16
2: 4.3663e-04 -6.7445e-04 1e-03 8e-17 2e-17
3: 1.6393e-04 -8.0778e-06 2e-04 2e-16 1e-18
4: 1.0102e-04 7.9591e-05 2e-05 1e-16 4e-19
5: 9.1292e-05 8.8961e-05 2e-06 1e-16 1e-19
6: 9.0441e-05 9.0150e-05 3e-07 9e-17 1e-19
7: 9.0265e-05 9.0226e-05 4e-08 8e-17 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.8979e-04 -2.0006e+00 2e+00 0e+00 3e-16
1: 4.8917e-04 -2.0590e-02 2e-02 5e-17 6e-16
2: 4.3806e-04 -6.7783e-04 1e-03 9e-17 3e-17
3: 1.6332e-04 -1.2481e-05 2e-04 1e-16 1e-18
4: 9.8900e-05 7.6729e-05 2e-05 2e-16 2e-19
5: 8.8552e-05 8.6086e-05 2e-06 1e-16 2e-19
6: 8.7455e-05 8.7212e-05 2e-07 2e-16 1e-19
7: 8.7295e-05 8.7273e-05 2e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.8684e-04 -2.0006e+00 2e+00 0e+00 3e-16
1: 4.8623e-04 -2.0601e-02 2e-02 1e-16 4e-16
2: 4.3525e-04 -6.8688e-04 1e-03 1e-16 2e-17
3: 1.6138e-04 -1.5093e-05 2e-04 2e-16 1e-18
4: 9.6792e-05 7.4635e-05 2e-05 1e-16 3e-19
5: 8.6478e-05 8.4115e-05 2e-06 1e-16 2e-19
6: 8.5438e-05 8.5211e-05 2e-07 8e-17 1e-19
7: 8.5270e-05 8.5236e-05 3e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 4.8696e-04 -2.0006e+00 2e+00 1e-16 2e-16
1: 4.8635e-04 -2.0601e-02 2e-02 2e-16 6e-16
2: 4.3545e-04 -6.8689e-04 1e-03 8e-17 3e-17
3: 1.6212e-04 -1.4397e-05 2e-04 1e-16 1e-18
4: 9.7651e-05 7.5536e-05 2e-05 1e-16 3e-19
5: 8.7379e-05 8.5066e-05 2e-06 1e-16 2e-19
6: 8.6400e-05 8.6122e-05 3e-07 9e-17 2e-19
7: 8.6196e-05 8.6155e-05 4e-08 2e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.4932e-04 -2.0003e+00 2e+00 0e+00 3e-16
1: 2.4918e-04 -2.0265e-02 2e-02 9e-17 5e-16
2: 2.3655e-04 -4.3401e-04 7e-04 1e-16 2e-17
3: 1.0880e-04 4.7266e-06 1e-04 1e-16 1e-18
4: 7.1864e-05 5.9896e-05 1e-05 1e-16 1e-19
5: 6.6998e-05 6.5765e-05 1e-06 2e-16 2e-19
6: 6.6557e-05 6.6317e-05 2e-07 2e-16 1e-19
7: 6.6400e-05 6.6377e-05 2e-08 2e-16 9e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.4698e-04 -2.0003e+00 2e+00 0e+00 3e-16
1: 2.4684e-04 -2.0268e-02 2e-02 1e-16 7e-16
2: 2.3446e-04 -4.3696e-04 7e-04 1e-16 2e-17
3: 1.0851e-04 4.2769e-06 1e-04 2e-16 1e-18
4: 7.1388e-05 5.9518e-05 1e-05 1e-16 2e-19
5: 6.6498e-05 6.5555e-05 9e-07 2e-16 8e-20
6: 6.6160e-05 6.5955e-05 2e-07 2e-16 1e-19
7: 6.6029e-05 6.6011e-05 2e-08 2e-16 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.4526e-04 -2.0003e+00 2e+00 0e+00 4e-16
1: 2.4512e-04 -2.0260e-02 2e-02 9e-17 8e-16
2: 2.3297e-04 -4.3048e-04 7e-04 8e-17 2e-17
3: 1.0798e-04 5.5178e-06 1e-04 8e-17 2e-18
4: 7.1627e-05 5.9449e-05 1e-05 1e-16 1e-19
5: 6.6699e-05 6.5528e-05 1e-06 1e-16 9e-20
6: 6.6287e-05 6.6046e-05 2e-07 2e-16 9e-20
7: 6.6130e-05 6.6107e-05 2e-08 8e-17 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.4423e-04 -2.0003e+00 2e+00 0e+00 2e-16
1: 2.4410e-04 -2.0262e-02 2e-02 8e-17 6e-16
2: 2.3202e-04 -4.3236e-04 7e-04 9e-17 2e-17
3: 1.0741e-04 5.2714e-06 1e-04 1e-16 1e-18
4: 7.1125e-05 5.8036e-05 1e-05 9e-17 2e-19
5: 6.5779e-05 6.4491e-05 1e-06 1e-16 9e-20
6: 6.5297e-05 6.5021e-05 3e-07 1e-16 7e-20
7: 6.5109e-05 6.5087e-05 2e-08 2e-16 7e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.4078e-04 -2.0003e+00 2e+00 0e+00 4e-16
1: 2.4066e-04 -2.0259e-02 2e-02 2e-16 5e-16
2: 2.2888e-04 -4.2969e-04 7e-04 2e-16 2e-17
3: 1.0658e-04 6.0023e-06 1e-04 5e-17 1e-18
4: 7.1051e-05 5.8209e-05 1e-05 1e-16 2e-19
5: 6.5933e-05 6.4558e-05 1e-06 2e-16 8e-20
6: 6.5404e-05 6.5113e-05 3e-07 2e-16 8e-20
7: 6.5201e-05 6.5179e-05 2e-08 2e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.4021e-04 -2.0003e+00 2e+00 0e+00 2e-16
1: 2.4008e-04 -2.0254e-02 2e-02 1e-16 5e-16
2: 2.2839e-04 -4.2585e-04 7e-04 8e-17 2e-17
3: 1.0629e-04 6.1554e-06 1e-04 1e-16 1e-18
4: 7.0988e-05 5.8216e-05 1e-05 2e-16 1e-19
5: 6.5903e-05 6.4535e-05 1e-06 1e-16 1e-19
6: 6.5374e-05 6.5085e-05 3e-07 1e-16 1e-19
7: 6.5172e-05 6.5151e-05 2e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.4001e-04 -2.0003e+00 2e+00 1e-16 3e-16
1: 2.3988e-04 -2.0253e-02 2e-02 2e-16 5e-16
2: 2.2814e-04 -4.2470e-04 7e-04 1e-16 2e-17
3: 1.0605e-04 4.4478e-06 1e-04 2e-16 1e-18
4: 7.0350e-05 5.8259e-05 1e-05 2e-16 2e-19
5: 6.5474e-05 6.4478e-05 1e-06 1e-16 1e-19
6: 6.5094e-05 6.4878e-05 2e-07 2e-16 7e-20
7: 6.4953e-05 6.4937e-05 2e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.3882e-04 -2.0002e+00 2e+00 0e+00 3e-16
1: 2.3870e-04 -2.0248e-02 2e-02 9e-17 3e-16
2: 2.2711e-04 -4.2013e-04 6e-04 1e-16 1e-17
3: 1.0558e-04 4.7452e-06 1e-04 9e-17 9e-19
4: 7.0187e-05 5.8210e-05 1e-05 2e-16 1e-19
5: 6.5347e-05 6.4423e-05 9e-07 2e-16 1e-19
6: 6.4989e-05 6.4792e-05 2e-07 1e-16 8e-20
7: 6.4862e-05 6.4848e-05 1e-08 8e-17 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.3248e-04 -2.0002e+00 2e+00 0e+00 3e-16
1: 2.3236e-04 -2.0238e-02 2e-02 1e-16 7e-16
2: 2.2142e-04 -4.1244e-04 6e-04 7e-17 2e-17
3: 1.0371e-04 5.9098e-06 1e-04 1e-16 1e-18
4: 6.9425e-05 5.7421e-05 1e-05 1e-16 2e-19
5: 6.4767e-05 6.3562e-05 1e-06 2e-16 1e-19
6: 6.4320e-05 6.4067e-05 3e-07 1e-16 1e-19
7: 6.4155e-05 6.4134e-05 2e-08 2e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.3170e-04 -2.0002e+00 2e+00 2e-16 4e-16
1: 2.3158e-04 -2.0239e-02 2e-02 8e-17 6e-16
2: 2.2080e-04 -4.1270e-04 6e-04 9e-17 2e-17
3: 1.0410e-04 6.2865e-06 1e-04 1e-16 1e-18
4: 6.9552e-05 5.7977e-05 1e-05 9e-17 2e-19
5: 6.5072e-05 6.4007e-05 1e-06 1e-16 9e-20
6: 6.4663e-05 6.4439e-05 2e-07 1e-16 7e-20
7: 6.4519e-05 6.4503e-05 2e-08 1e-16 9e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.0581e-04 -2.0002e+00 2e+00 0e+00 3e-16
1: 2.0572e-04 -2.0233e-02 2e-02 1e-16 7e-16
2: 1.9722e-04 -4.0936e-04 6e-04 1e-16 2e-17
3: 9.6991e-05 5.1540e-06 9e-05 2e-16 2e-18
4: 6.4723e-05 5.1859e-05 1e-05 1e-16 2e-19
5: 6.0262e-05 5.8467e-05 2e-06 1e-16 1e-19
6: 5.9351e-05 5.9076e-05 3e-07 9e-17 1e-19
7: 5.9262e-05 5.9251e-05 1e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.0601e-04 -2.0002e+00 2e+00 1e-16 2e-16
1: 2.0592e-04 -2.0233e-02 2e-02 9e-17 6e-16
2: 1.9740e-04 -4.0995e-04 6e-04 8e-17 2e-17
3: 9.6807e-05 5.2069e-06 9e-05 1e-16 1e-18
4: 6.4503e-05 5.1724e-05 1e-05 1e-16 1e-19
5: 6.0046e-05 5.8439e-05 2e-06 1e-16 9e-20
6: 5.9255e-05 5.9006e-05 2e-07 1e-16 7e-20
7: 5.9181e-05 5.9170e-05 1e-08 1e-16 7e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.0562e-04 -2.0002e+00 2e+00 0e+00 3e-16
1: 2.0553e-04 -2.0230e-02 2e-02 1e-16 5e-16
2: 1.9707e-04 -4.0704e-04 6e-04 1e-16 1e-17
3: 9.6529e-05 5.5406e-06 9e-05 2e-16 1e-18
4: 6.4359e-05 5.1738e-05 1e-05 9e-17 9e-20
5: 5.9969e-05 5.8368e-05 2e-06 1e-16 7e-20
6: 5.9183e-05 5.8934e-05 2e-07 1e-16 8e-20
7: 5.9110e-05 5.9099e-05 1e-08 6e-17 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 2.0570e-04 -2.0002e+00 2e+00 0e+00 4e-16
1: 2.0561e-04 -2.0230e-02 2e-02 1e-16 7e-16
2: 1.9719e-04 -4.0680e-04 6e-04 2e-16 2e-17
3: 9.6659e-05 6.1478e-06 9e-05 1e-16 1e-18
4: 6.4424e-05 5.2017e-05 1e-05 1e-16 2e-19
5: 6.0177e-05 5.8588e-05 2e-06 1e-16 1e-19
6: 5.9399e-05 5.9150e-05 2e-07 1e-16 8e-20
7: 5.9325e-05 5.9314e-05 1e-08 1e-16 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.0423e-04 -2.0002e+00 2e+00 0e+00 3e-16
1: 2.0414e-04 -2.0227e-02 2e-02 2e-16 5e-16
2: 1.9580e-04 -4.0462e-04 6e-04 1e-16 2e-17
3: 9.5732e-05 5.8852e-06 9e-05 1e-16 1e-18
4: 6.3982e-05 5.1503e-05 1e-05 1e-16 2e-19
5: 5.9644e-05 5.7953e-05 2e-06 2e-16 8e-20
6: 5.8785e-05 5.8504e-05 3e-07 1e-16 1e-19
7: 5.8693e-05 5.8674e-05 2e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 1.8123e-04 -2.0002e+00 2e+00 2e-16 3e-16
1: 1.8116e-04 -2.0197e-02 2e-02 2e-16 5e-16
2: 1.7457e-04 -3.7915e-04 6e-04 7e-17 2e-17
3: 8.8119e-05 6.6619e-06 8e-05 1e-16 1e-18
4: 6.0012e-05 4.8230e-05 1e-05 2e-16 1e-19
5: 5.6149e-05 5.4451e-05 2e-06 2e-16 9e-20
6: 5.5366e-05 5.5095e-05 3e-07 8e-17 7e-20
7: 5.5274e-05 5.5252e-05 2e-08 1e-16 1e-19
Optimal solution found.
pcost dcost gap pres dres
0: 1.8103e-04 -2.0002e+00 2e+00 0e+00 4e-16
1: 1.8095e-04 -2.0198e-02 2e-02 8e-17 6e-16
2: 1.7437e-04 -3.7977e-04 6e-04 1e-16 2e-17
3: 8.7916e-05 6.1274e-06 8e-05 1e-16 1e-18
4: 5.9678e-05 4.8007e-05 1e-05 9e-17 1e-19
5: 5.5881e-05 5.3954e-05 2e-06 8e-17 9e-20
6: 5.4929e-05 5.4627e-05 3e-07 1e-16 6e-20
7: 5.4805e-05 5.4786e-05 2e-08 1e-16 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 1.6408e-04 -2.0002e+00 2e+00 2e-16 3e-16
1: 1.6402e-04 -2.0206e-02 2e-02 2e-16 4e-16
2: 1.5819e-04 -3.8896e-04 5e-04 9e-17 1e-17
3: 7.9594e-05 3.8436e-06 8e-05 2e-16 8e-19
4: 5.3561e-05 4.3160e-05 1e-05 1e-16 1e-19
5: 5.0452e-05 4.8871e-05 2e-06 1e-16 9e-20
6: 4.9703e-05 4.9518e-05 2e-07 9e-17 6e-20
7: 4.9632e-05 4.9625e-05 7e-09 1e-16 8e-20
Optimal solution found.
pcost dcost gap pres dres
0: 1.6312e-04 -2.0002e+00 2e+00 0e+00 3e-16
1: 1.6306e-04 -2.0206e-02 2e-02 1e-16 6e-16
2: 1.5718e-04 -3.8890e-04 5e-04 1e-16 2e-17
3: 7.8485e-05 1.4233e-06 8e-05 9e-17 1e-18
4: 5.2391e-05 4.1709e-05 1e-05 2e-16 1e-19
5: 4.9253e-05 4.7470e-05 2e-06 1e-16 6e-20
6: 4.8460e-05 4.8240e-05 2e-07 2e-16 5e-20
7: 4.8381e-05 4.8373e-05 8e-09 1e-16 8e-20
Optimal solution found.
pcost dcost gap pres dres
0: 1.2747e-04 -2.0001e+00 2e+00 0e+00 3e-16
1: 1.2743e-04 -2.0144e-02 2e-02 7e-17 5e-16
2: 1.2407e-04 -3.3378e-04 5e-04 9e-17 1e-17
3: 6.6909e-05 6.3163e-06 6e-05 7e-17 1e-18
4: 4.4277e-05 3.8179e-05 6e-06 9e-17 9e-20
5: 4.2687e-05 4.2068e-05 6e-07 2e-16 5e-20
6: 4.2394e-05 4.2351e-05 4e-08 8e-17 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 1.1484e-04 -2.0001e+00 2e+00 0e+00 3e-16
1: 1.1482e-04 -2.0099e-02 2e-02 7e-17 6e-16
2: 1.1245e-04 -2.9403e-04 4e-04 2e-16 1e-17
3: 6.3542e-05 7.3482e-06 6e-05 2e-16 1e-18
4: 4.2507e-05 3.7440e-05 5e-06 1e-16 8e-20
5: 4.1480e-05 4.0881e-05 6e-07 1e-16 8e-20
6: 4.1291e-05 4.1234e-05 6e-08 1e-16 9e-20
Optimal solution found.
pcost dcost gap pres dres
0: 1.1172e-04 -2.0001e+00 2e+00 1e-16 3e-16
1: 1.1169e-04 -2.0126e-02 2e-02 2e-16 5e-16
2: 1.0898e-04 -3.1996e-04 4e-04 1e-16 1e-17
3: 5.2654e-05 -6.3411e-06 6e-05 8e-17 9e-19
4: 2.8899e-05 2.1797e-05 7e-06 1e-16 7e-20
5: 2.6156e-05 2.5497e-05 7e-07 2e-16 6e-20
6: 2.5884e-05 2.5845e-05 4e-08 2e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 1.0220e-04 -2.0001e+00 2e+00 0e+00 3e-16
1: 1.0218e-04 -2.0106e-02 2e-02 1e-16 5e-16
2: 9.9995e-05 -3.0118e-04 4e-04 9e-17 1e-17
3: 5.0366e-05 -6.0675e-06 6e-05 8e-17 9e-19
4: 2.7903e-05 2.1338e-05 7e-06 1e-16 1e-19
5: 2.5470e-05 2.4889e-05 6e-07 1e-16 6e-20
6: 2.5237e-05 2.5161e-05 8e-08 1e-16 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 9.2949e-05 -2.0001e+00 2e+00 1e-16 3e-16
1: 9.2930e-05 -2.0100e-02 2e-02 8e-17 6e-16
2: 9.1144e-05 -2.9549e-04 4e-04 2e-16 1e-17
3: 4.7704e-05 -6.4959e-06 5e-05 1e-16 1e-18
4: 2.6491e-05 2.0309e-05 6e-06 1e-16 9e-20
5: 2.4374e-05 2.3648e-05 7e-07 8e-17 5e-20
6: 2.4017e-05 2.3966e-05 5e-08 1e-16 4e-20
Optimal solution found.
pcost dcost gap pres dres
0: 7.8051e-05 -2.0001e+00 2e+00 1e-16 2e-16
1: 7.8036e-05 -2.0086e-02 2e-02 9e-17 4e-16
2: 7.6656e-05 -2.8305e-04 4e-04 8e-17 8e-18
3: 4.0710e-05 -9.8759e-06 5e-05 2e-16 7e-19
4: 2.1499e-05 1.5146e-05 6e-06 1e-16 6e-20
5: 1.9124e-05 1.8724e-05 4e-07 2e-16 6e-20
6: 1.8983e-05 1.8948e-05 4e-08 1e-16 4e-20
Optimal solution found.
pcost dcost gap pres dres
0: 7.7501e-05 -2.0001e+00 2e+00 0e+00 3e-16
1: 7.7487e-05 -2.0085e-02 2e-02 9e-17 6e-16
2: 7.6107e-05 -2.8171e-04 4e-04 1e-16 1e-17
3: 4.0172e-05 -1.0182e-05 5e-05 8e-17 1e-18
4: 2.1039e-05 1.4585e-05 6e-06 8e-17 9e-20
5: 1.8610e-05 1.8191e-05 4e-07 2e-16 5e-20
6: 1.8456e-05 1.8424e-05 3e-08 2e-16 4e-20
Optimal solution found.
pcost dcost gap pres dres
0: 7.5312e-05 -2.0001e+00 2e+00 1e-16 3e-16
1: 7.5299e-05 -2.0082e-02 2e-02 1e-16 5e-16
2: 7.4077e-05 -2.7917e-04 4e-04 1e-16 1e-17
3: 4.0126e-05 -9.2309e-06 5e-05 7e-17 9e-19
4: 2.0709e-05 1.4275e-05 6e-06 1e-16 4e-20
5: 1.8299e-05 1.7868e-05 4e-07 1e-16 6e-20
6: 1.8156e-05 1.8113e-05 4e-08 8e-17 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 6.2381e-05 -2.0001e+00 2e+00 1e-16 3e-16
1: 6.2374e-05 -2.0063e-02 2e-02 1e-16 5e-16
2: 6.1599e-05 -2.6129e-04 3e-04 9e-17 1e-17
3: 3.6375e-05 -8.5583e-06 4e-05 9e-17 1e-18
4: 1.9051e-05 1.3642e-05 5e-06 2e-16 4e-20
5: 1.7136e-05 1.6771e-05 4e-07 1e-16 4e-20
6: 1.6992e-05 1.6951e-05 4e-08 2e-16 4e-20
Optimal solution found.
pcost dcost gap pres dres
0: 5.5820e-05 -2.0001e+00 2e+00 1e-16 3e-16
1: 5.5814e-05 -2.0059e-02 2e-02 2e-16 5e-16
2: 5.5227e-05 -2.5768e-04 3e-04 9e-17 7e-18
3: 3.4543e-05 -8.9735e-06 4e-05 1e-16 8e-19
4: 1.8415e-05 1.3223e-05 5e-06 1e-16 6e-20
5: 1.6637e-05 1.6221e-05 4e-07 1e-16 4e-20
6: 1.6463e-05 1.6422e-05 4e-08 2e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 5.2320e-05 -2.0001e+00 2e+00 0e+00 3e-16
1: 5.2315e-05 -2.0053e-02 2e-02 1e-16 5e-16
2: 5.1800e-05 -2.5201e-04 3e-04 1e-16 8e-18
3: 3.2954e-05 -9.2541e-06 4e-05 9e-17 1e-18
4: 1.7642e-05 1.2993e-05 5e-06 9e-17 6e-20
5: 1.6136e-05 1.5629e-05 5e-07 2e-16 4e-20
6: 1.5919e-05 1.5873e-05 5e-08 1e-16 4e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.9856e-05 -2.0001e+00 2e+00 2e-16 2e-16
1: 4.9852e-05 -2.0052e-02 2e-02 2e-16 6e-16
2: 4.9390e-05 -2.5035e-04 3e-04 7e-17 1e-17
3: 3.2004e-05 -9.4324e-06 4e-05 1e-16 1e-18
4: 1.7175e-05 1.2654e-05 5e-06 9e-17 5e-20
5: 1.5709e-05 1.5038e-05 7e-07 2e-16 3e-20
6: 1.5386e-05 1.5324e-05 6e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.9828e-05 -2.0001e+00 2e+00 0e+00 2e-16
1: 4.9823e-05 -2.0052e-02 2e-02 2e-16 6e-16
2: 4.9362e-05 -2.5055e-04 3e-04 1e-16 9e-18
3: 3.2009e-05 -9.4393e-06 4e-05 1e-16 1e-18
4: 1.7212e-05 1.2662e-05 5e-06 1e-16 5e-20
5: 1.5735e-05 1.5067e-05 7e-07 1e-16 3e-20
6: 1.5416e-05 1.5355e-05 6e-08 1e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.8241e-05 -2.0000e+00 2e+00 1e-16 3e-16
1: 4.8237e-05 -2.0048e-02 2e-02 9e-17 7e-16
2: 4.7819e-05 -2.4717e-04 3e-04 8e-17 1e-17
3: 3.1647e-05 -9.2541e-06 4e-05 1e-16 1e-18
4: 1.7232e-05 1.2936e-05 4e-06 1e-16 7e-20
5: 1.5930e-05 1.5234e-05 7e-07 1e-16 2e-20
6: 1.5614e-05 1.5548e-05 7e-08 2e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.3737e-05 -2.0000e+00 2e+00 2e-16 2e-16
1: 4.3734e-05 -2.0043e-02 2e-02 1e-16 6e-16
2: 4.3391e-05 -2.4238e-04 3e-04 1e-16 1e-17
3: 2.9430e-05 -9.6848e-06 4e-05 1e-16 1e-18
4: 1.5960e-05 1.1810e-05 4e-06 1e-16 5e-20
5: 1.4779e-05 1.4040e-05 7e-07 1e-16 3e-20
6: 1.4480e-05 1.4404e-05 8e-08 2e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.4569e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 4.4565e-05 -2.0043e-02 2e-02 1e-16 7e-16
2: 4.4229e-05 -2.4159e-04 3e-04 1e-16 1e-17
3: 3.0532e-05 -9.0416e-06 4e-05 2e-16 1e-18
4: 1.7220e-05 1.2780e-05 4e-06 2e-16 7e-20
5: 1.6001e-05 1.5212e-05 8e-07 1e-16 2e-20
6: 1.5712e-05 1.5633e-05 8e-08 2e-16 5e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.5232e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 4.5229e-05 -2.0043e-02 2e-02 8e-17 5e-16
2: 4.4892e-05 -2.4147e-04 3e-04 1e-16 1e-17
3: 3.1119e-05 -8.7318e-06 4e-05 1e-16 1e-18
4: 1.7663e-05 1.3035e-05 5e-06 9e-17 6e-20
5: 1.6360e-05 1.5541e-05 8e-07 9e-17 3e-20
6: 1.6054e-05 1.5976e-05 8e-08 7e-17 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.2821e-05 -2.0000e+00 2e+00 0e+00 2e-16
1: 4.2818e-05 -2.0039e-02 2e-02 6e-17 5e-16
2: 4.2525e-05 -2.3833e-04 3e-04 8e-17 9e-18
3: 3.0022e-05 -8.8086e-06 4e-05 8e-17 1e-18
4: 1.7033e-05 1.2659e-05 4e-06 1e-16 3e-20
5: 1.5854e-05 1.5107e-05 7e-07 1e-16 3e-20
6: 1.5601e-05 1.5542e-05 6e-08 7e-17 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.2463e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 4.2460e-05 -2.0043e-02 2e-02 8e-17 5e-16
2: 4.2165e-05 -2.4174e-04 3e-04 1e-16 7e-18
3: 2.9744e-05 -9.1899e-06 4e-05 2e-16 8e-19
4: 1.6754e-05 1.2452e-05 4e-06 2e-16 7e-20
5: 1.5469e-05 1.4908e-05 6e-07 1e-16 3e-20
6: 1.5218e-05 1.5172e-05 5e-08 1e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 4.0851e-05 -2.0000e+00 2e+00 0e+00 2e-16
1: 4.0848e-05 -2.0044e-02 2e-02 9e-17 5e-16
2: 4.0574e-05 -2.4252e-04 3e-04 8e-17 9e-18
3: 2.9005e-05 -9.5139e-06 4e-05 1e-16 1e-18
4: 1.6471e-05 1.2244e-05 4e-06 1e-16 4e-20
5: 1.5225e-05 1.4657e-05 6e-07 2e-16 2e-20
6: 1.4974e-05 1.4925e-05 5e-08 1e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 3.9146e-05 -2.0001e+00 2e+00 0e+00 2e-16
1: 3.9143e-05 -2.0052e-02 2e-02 1e-16 5e-16
2: 3.8871e-05 -2.5052e-04 3e-04 9e-17 7e-18
3: 2.7782e-05 -1.0315e-05 4e-05 1e-16 8e-19
4: 1.6009e-05 1.0942e-05 5e-06 1e-16 4e-20
5: 1.4400e-05 1.3687e-05 7e-07 1e-16 3e-20
6: 1.4093e-05 1.4008e-05 8e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 3.9089e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 3.9087e-05 -2.0050e-02 2e-02 8e-17 7e-16
2: 3.8818e-05 -2.4881e-04 3e-04 2e-16 1e-17
3: 2.7720e-05 -1.0543e-05 4e-05 9e-17 1e-18
4: 1.5722e-05 1.1004e-05 5e-06 2e-16 4e-20
5: 1.4257e-05 1.3506e-05 8e-07 1e-16 2e-20
6: 1.3952e-05 1.3857e-05 9e-08 7e-17 1e-20
Optimal solution found.
pcost dcost gap pres dres
0: 3.8778e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 3.8776e-05 -2.0049e-02 2e-02 9e-17 5e-16
2: 3.8514e-05 -2.4759e-04 3e-04 2e-16 1e-17
3: 2.7612e-05 -1.0451e-05 4e-05 1e-16 1e-18
4: 1.5673e-05 1.1033e-05 5e-06 2e-16 6e-20
5: 1.4252e-05 1.3516e-05 7e-07 1e-16 2e-20
6: 1.3957e-05 1.3865e-05 9e-08 8e-17 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 3.8219e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 3.8216e-05 -2.0047e-02 2e-02 9e-17 7e-16
2: 3.7968e-05 -2.4619e-04 3e-04 9e-17 8e-18
3: 2.7422e-05 -1.0354e-05 4e-05 2e-16 1e-18
4: 1.5567e-05 1.1084e-05 4e-06 3e-16 6e-20
5: 1.4219e-05 1.3473e-05 7e-07 2e-16 2e-20
6: 1.3934e-05 1.3841e-05 9e-08 2e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 3.8038e-05 -2.0000e+00 2e+00 0e+00 4e-16
1: 3.8036e-05 -2.0046e-02 2e-02 2e-16 5e-16
2: 3.7788e-05 -2.4541e-04 3e-04 2e-16 8e-18
3: 2.7234e-05 -1.0352e-05 4e-05 1e-16 1e-18
4: 1.5337e-05 1.0898e-05 4e-06 1e-16 3e-20
5: 1.4009e-05 1.3212e-05 8e-07 2e-16 3e-20
6: 1.3715e-05 1.3630e-05 9e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 3.1102e-05 -2.0000e+00 2e+00 1e-16 3e-16
1: 3.1101e-05 -2.0026e-02 2e-02 7e-17 6e-16
2: 3.0967e-05 -2.2576e-04 3e-04 1e-16 9e-18
3: 2.4002e-05 -9.8021e-06 3e-05 6e-17 1e-18
4: 1.3788e-05 1.0276e-05 4e-06 6e-17 4e-20
5: 1.2891e-05 1.2300e-05 6e-07 8e-17 2e-20
6: 1.2686e-05 1.2632e-05 5e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.7315e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.7314e-05 -2.0023e-02 2e-02 1e-16 4e-16
2: 2.7216e-05 -2.2283e-04 3e-04 9e-17 5e-18
3: 2.1730e-05 -9.9456e-06 3e-05 1e-16 6e-19
4: 1.2450e-05 9.3987e-06 3e-06 9e-17 3e-20
5: 1.1645e-05 1.1229e-05 4e-07 7e-17 2e-20
6: 1.1512e-05 1.1484e-05 3e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.7028e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.7027e-05 -2.0023e-02 2e-02 1e-16 6e-16
2: 2.6935e-05 -2.2233e-04 2e-04 8e-17 7e-18
3: 2.1684e-05 -9.8053e-06 3e-05 1e-16 8e-19
4: 1.2522e-05 9.5598e-06 3e-06 1e-16 3e-20
5: 1.1760e-05 1.1375e-05 4e-07 1e-16 2e-20
6: 1.1638e-05 1.1614e-05 2e-08 2e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.5448e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.5447e-05 -2.0022e-02 2e-02 8e-17 7e-16
2: 2.5370e-05 -2.2153e-04 2e-04 9e-17 8e-18
3: 2.0817e-05 -9.8719e-06 3e-05 8e-17 1e-18
4: 1.2179e-05 9.3508e-06 3e-06 2e-16 2e-20
5: 1.1429e-05 1.1231e-05 2e-07 1e-16 2e-20
6: 1.1372e-05 1.1367e-05 5e-09 1e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.6756e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.6755e-05 -2.0022e-02 2e-02 1e-16 5e-16
2: 2.6670e-05 -2.2201e-04 2e-04 6e-17 7e-18
3: 2.1737e-05 -9.6179e-06 3e-05 7e-17 8e-19
4: 1.2798e-05 9.9570e-06 3e-06 1e-16 2e-20
5: 1.2193e-05 1.1803e-05 4e-07 1e-16 3e-20
6: 1.2072e-05 1.2057e-05 1e-08 2e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.7398e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.7397e-05 -2.0023e-02 2e-02 7e-17 7e-16
2: 2.7310e-05 -2.2251e-04 2e-04 1e-16 9e-18
3: 2.2340e-05 -9.5017e-06 3e-05 8e-17 1e-18
4: 1.3354e-05 1.0518e-05 3e-06 1e-16 2e-20
5: 1.2709e-05 1.2343e-05 4e-07 1e-16 2e-20
6: 1.2592e-05 1.2576e-05 2e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.7322e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.7321e-05 -2.0023e-02 2e-02 9e-17 8e-16
2: 2.7236e-05 -2.2245e-04 2e-04 1e-16 1e-17
3: 2.2338e-05 -9.4759e-06 3e-05 7e-17 2e-18
4: 1.3468e-05 1.0633e-05 3e-06 1e-16 3e-20
5: 1.2820e-05 1.2461e-05 4e-07 1e-16 2e-20
6: 1.2705e-05 1.2688e-05 2e-08 9e-17 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.7756e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.7756e-05 -2.0023e-02 2e-02 7e-17 3e-16
2: 2.7669e-05 -2.2302e-04 3e-04 2e-16 4e-18
3: 2.2704e-05 -9.4891e-06 3e-05 1e-16 6e-19
4: 1.3791e-05 1.0925e-05 3e-06 1e-16 3e-20
5: 1.3062e-05 1.2720e-05 3e-07 2e-16 2e-20
6: 1.2949e-05 1.2923e-05 3e-08 1e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.8245e-05 -2.0000e+00 2e+00 1e-16 2e-16
1: 2.8244e-05 -2.0024e-02 2e-02 2e-16 8e-16
2: 2.8149e-05 -2.2352e-04 3e-04 1e-16 9e-18
3: 2.2865e-05 -9.5411e-06 3e-05 8e-17 1e-18
4: 1.3830e-05 1.0913e-05 3e-06 1e-16 3e-20
5: 1.3054e-05 1.2734e-05 3e-07 2e-16 2e-20
6: 1.2943e-05 1.2915e-05 3e-08 2e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.3923e-05 -2.0000e+00 2e+00 0e+00 2e-16
1: 2.3922e-05 -2.0019e-02 2e-02 7e-17 6e-16
2: 2.3862e-05 -2.1896e-04 2e-04 8e-17 8e-18
3: 2.0172e-05 -9.1044e-06 3e-05 6e-17 9e-19
4: 1.2466e-05 9.7517e-06 3e-06 8e-17 3e-20
5: 1.1784e-05 1.1432e-05 4e-07 2e-16 9e-21
6: 1.1685e-05 1.1664e-05 2e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.3648e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.3648e-05 -2.0019e-02 2e-02 8e-17 5e-16
2: 2.3589e-05 -2.1863e-04 2e-04 8e-17 8e-18
3: 1.9988e-05 -9.0253e-06 3e-05 7e-17 9e-19
4: 1.2397e-05 9.6887e-06 3e-06 6e-17 2e-20
5: 1.1711e-05 1.1392e-05 3e-07 8e-17 2e-20
6: 1.1622e-05 1.1606e-05 2e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.3761e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.3760e-05 -2.0019e-02 2e-02 9e-17 4e-16
2: 2.3699e-05 -2.1875e-04 2e-04 1e-16 8e-18
3: 1.9976e-05 -9.0747e-06 3e-05 6e-17 9e-19
4: 1.2471e-05 9.7162e-06 3e-06 9e-17 2e-20
5: 1.1729e-05 1.1411e-05 3e-07 9e-17 1e-20
6: 1.1637e-05 1.1621e-05 2e-08 1e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.3668e-05 -2.0000e+00 2e+00 0e+00 3e-16
1: 2.3667e-05 -2.0019e-02 2e-02 8e-17 6e-16
2: 2.3606e-05 -2.1869e-04 2e-04 9e-17 8e-18
3: 1.9892e-05 -9.0643e-06 3e-05 9e-17 9e-19
4: 1.2435e-05 9.6708e-06 3e-06 1e-16 3e-20
5: 1.1625e-05 1.1346e-05 3e-07 1e-16 2e-20
6: 1.1545e-05 1.1531e-05 1e-08 2e-16 2e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.3824e-05 -2.0000e+00 2e+00 1e-16 4e-16
1: 2.3823e-05 -2.0019e-02 2e-02 1e-16 8e-16
2: 2.3761e-05 -2.1875e-04 2e-04 2e-16 1e-17
3: 2.0025e-05 -9.0290e-06 3e-05 2e-16 1e-18
4: 1.2525e-05 9.7602e-06 3e-06 1e-16 2e-20
5: 1.1726e-05 1.1434e-05 3e-07 1e-16 1e-20
6: 1.1639e-05 1.1624e-05 1e-08 2e-16 1e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.4366e-05 -2.0000e+00 2e+00 1e-16 3e-16
1: 2.4365e-05 -2.0020e-02 2e-02 8e-17 7e-16
2: 2.4304e-05 -2.1943e-04 2e-04 2e-16 9e-18
3: 2.0561e-05 -9.0808e-06 3e-05 8e-17 1e-18
4: 1.2961e-05 1.0220e-05 3e-06 2e-16 4e-20
5: 1.2204e-05 1.1990e-05 2e-07 1e-16 3e-20
6: 1.2164e-05 1.2154e-05 1e-08 2e-16 3e-20
Optimal solution found.
pcost dcost gap pres dres
0: 2.4372e-05 -2.0000e+00 2e+00 0e+00 4e-16
1: 2.4371e-05 -2.0020e-02 2e-02 7e-17 6e-16
2: 2.4310e-05 -2.1945e-04 2e-04 2e-16 9e-18
3: 2.0587e-05 -9.0867e-06 3e-05 8e-17 1e-18
4: 1.2986e-05 1.0246e-05 3e-06 1e-16 3e-20
5: 1.2257e-05 1.2082e-05 2e-07 9e-17 2e-20
6: 1.2231e-05 1.2223e-05 8e-09 1e-16 1e-20
Optimal solution found.
In [110]:
positionSheetRB
Out[110]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
date
2014-03-28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-05-30
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-07-18
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-07-25
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-08-01
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-09-05
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-10-31
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-11-21
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-01-16
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-01-23
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-01-30
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-02-06
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-02-13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-02-27
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-06
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-13
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-20
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-03-27
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-04-10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-04-17
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-04-24
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-08
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-15
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-22
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-05-29
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-06-05
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-06-12
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-06-26
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-07-03
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2015-07-10
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
...
...
...
...
...
...
...
...
...
...
...
2016-10-14
0.064517
0.245561
0.183338
0.243889
0.031969
0.044466
0.044320
0.042665
0.067848
0.031428
2016-10-21
0.064677
0.245262
0.182762
0.244726
0.032064
0.044581
0.044375
0.042938
0.067207
0.031407
2016-10-28
0.065911
0.248035
0.179339
0.243814
0.032238
0.045276
0.045298
0.043669
0.063447
0.032976
2016-11-04
0.071190
0.246508
0.178741
0.237267
0.033453
0.045938
0.046435
0.044161
0.061814
0.034493
2016-11-11
0.075288
0.256242
0.157578
0.237664
0.034925
0.048168
0.048968
0.046696
0.057535
0.036936
2016-11-18
0.079856
0.260523
0.147677
0.237113
0.035398
0.049297
0.050048
0.047569
0.055127
0.037393
2016-11-25
0.079211
0.260001
0.153348
0.229403
0.036084
0.050679
0.051499
0.049866
0.051559
0.038348
2016-12-02
0.081201
0.261049
0.156483
0.221080
0.035493
0.050385
0.051577
0.052736
0.051759
0.038238
2016-12-09
0.080603
0.265021
0.150830
0.219110
0.035517
0.049900
0.051065
0.052593
0.056255
0.039106
2016-12-16
0.087871
0.261796
0.140288
0.217470
0.034457
0.049927
0.051352
0.053622
0.063488
0.039731
2016-12-23
0.087999
0.272364
0.140820
0.212587
0.034277
0.049039
0.050618
0.053392
0.059597
0.039307
2016-12-30
0.087392
0.271736
0.141031
0.213247
0.034549
0.049063
0.050407
0.053255
0.059500
0.039821
2017-01-06
0.087335
0.272129
0.140152
0.213268
0.034797
0.049087
0.050447
0.053753
0.058547
0.040484
2017-01-13
0.088473
0.269905
0.144131
0.212121
0.035042
0.048816
0.050190
0.053894
0.056869
0.040559
2017-01-20
0.076463
0.286360
0.139838
0.205462
0.040228
0.046774
0.049748
0.052966
0.052974
0.049187
2017-02-03
0.072585
0.286093
0.140947
0.200814
0.042221
0.049157
0.053662
0.055784
0.048858
0.049879
2017-02-10
0.069341
0.285229
0.140837
0.201659
0.043422
0.049357
0.054044
0.055929
0.049630
0.050553
2017-02-17
0.060658
0.285908
0.141714
0.197521
0.048568
0.050460
0.055510
0.058106
0.049565
0.051989
2017-02-24
0.062711
0.280919
0.143372
0.200183
0.049205
0.048529
0.052629
0.054964
0.053647
0.053841
2017-03-03
0.059709
0.285426
0.139119
0.196788
0.048469
0.050028
0.054030
0.056391
0.055217
0.054823
2017-03-10
0.058870
0.285710
0.135250
0.198404
0.049158
0.050109
0.054236
0.056590
0.056164
0.055511
2017-03-17
0.054042
0.290552
0.131268
0.196601
0.047688
0.052255
0.055372
0.058247
0.057115
0.056859
2017-03-24
0.051529
0.287527
0.136714
0.194717
0.047261
0.053365
0.056297
0.058942
0.057080
0.056569
2017-04-07
0.058687
0.280132
0.132175
0.187318
0.049676
0.056709
0.057566
0.060890
0.056449
0.060399
2017-04-14
0.059597
0.277783
0.132063
0.186112
0.049675
0.058345
0.059067
0.061972
0.054954
0.060431
2017-04-21
0.060141
0.277241
0.131461
0.184395
0.049749
0.059057
0.059667
0.062855
0.054795
0.060639
2017-04-28
0.059106
0.276919
0.130206
0.183665
0.049511
0.060911
0.060640
0.064975
0.053800
0.060268
2017-05-05
0.060553
0.276184
0.131221
0.183034
0.049299
0.060540
0.060250
0.064313
0.053990
0.060617
2017-05-12
0.060675
0.283780
0.125199
0.183370
0.052834
0.059550
0.059395
0.060560
0.050877
0.063761
2017-05-19
0.061303
0.283655
0.126257
0.182784
0.053541
0.058807
0.058715
0.059856
0.051748
0.063333
118 rows × 10 columns
In [111]:
#positionSheet1 = positionSheet.shift(1)
positionSheet1 = positionSheetMR .shift(1).fillna(method='ffill').fillna(0)
positionSheet2 = positionSheetRB .shift(1).fillna(method='ffill').fillna(0)
positionSheet2
Out[111]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
date
2014-03-28
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-05-30
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-07-18
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-07-25
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-08-01
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-09-05
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-10-31
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2014-11-21
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-01-16
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-01-23
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-01-30
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-02-06
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-02-13
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-02-27
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-03-06
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-03-13
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-03-20
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-03-27
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-04-10
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-04-17
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-04-24
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-05-08
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-05-15
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-05-22
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-05-29
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-06-05
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-06-12
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-06-26
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-07-03
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
2015-07-10
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
0.000000
...
...
...
...
...
...
...
...
...
...
...
2016-10-14
0.062037
0.244759
0.183937
0.248508
0.031808
0.042483
0.042083
0.042914
0.070481
0.030991
2016-10-21
0.064517
0.245561
0.183338
0.243889
0.031969
0.044466
0.044320
0.042665
0.067848
0.031428
2016-10-28
0.064677
0.245262
0.182762
0.244726
0.032064
0.044581
0.044375
0.042938
0.067207
0.031407
2016-11-04
0.065911
0.248035
0.179339
0.243814
0.032238
0.045276
0.045298
0.043669
0.063447
0.032976
2016-11-11
0.071190
0.246508
0.178741
0.237267
0.033453
0.045938
0.046435
0.044161
0.061814
0.034493
2016-11-18
0.075288
0.256242
0.157578
0.237664
0.034925
0.048168
0.048968
0.046696
0.057535
0.036936
2016-11-25
0.079856
0.260523
0.147677
0.237113
0.035398
0.049297
0.050048
0.047569
0.055127
0.037393
2016-12-02
0.079211
0.260001
0.153348
0.229403
0.036084
0.050679
0.051499
0.049866
0.051559
0.038348
2016-12-09
0.081201
0.261049
0.156483
0.221080
0.035493
0.050385
0.051577
0.052736
0.051759
0.038238
2016-12-16
0.080603
0.265021
0.150830
0.219110
0.035517
0.049900
0.051065
0.052593
0.056255
0.039106
2016-12-23
0.087871
0.261796
0.140288
0.217470
0.034457
0.049927
0.051352
0.053622
0.063488
0.039731
2016-12-30
0.087999
0.272364
0.140820
0.212587
0.034277
0.049039
0.050618
0.053392
0.059597
0.039307
2017-01-06
0.087392
0.271736
0.141031
0.213247
0.034549
0.049063
0.050407
0.053255
0.059500
0.039821
2017-01-13
0.087335
0.272129
0.140152
0.213268
0.034797
0.049087
0.050447
0.053753
0.058547
0.040484
2017-01-20
0.088473
0.269905
0.144131
0.212121
0.035042
0.048816
0.050190
0.053894
0.056869
0.040559
2017-02-03
0.076463
0.286360
0.139838
0.205462
0.040228
0.046774
0.049748
0.052966
0.052974
0.049187
2017-02-10
0.072585
0.286093
0.140947
0.200814
0.042221
0.049157
0.053662
0.055784
0.048858
0.049879
2017-02-17
0.069341
0.285229
0.140837
0.201659
0.043422
0.049357
0.054044
0.055929
0.049630
0.050553
2017-02-24
0.060658
0.285908
0.141714
0.197521
0.048568
0.050460
0.055510
0.058106
0.049565
0.051989
2017-03-03
0.062711
0.280919
0.143372
0.200183
0.049205
0.048529
0.052629
0.054964
0.053647
0.053841
2017-03-10
0.059709
0.285426
0.139119
0.196788
0.048469
0.050028
0.054030
0.056391
0.055217
0.054823
2017-03-17
0.058870
0.285710
0.135250
0.198404
0.049158
0.050109
0.054236
0.056590
0.056164
0.055511
2017-03-24
0.054042
0.290552
0.131268
0.196601
0.047688
0.052255
0.055372
0.058247
0.057115
0.056859
2017-04-07
0.051529
0.287527
0.136714
0.194717
0.047261
0.053365
0.056297
0.058942
0.057080
0.056569
2017-04-14
0.058687
0.280132
0.132175
0.187318
0.049676
0.056709
0.057566
0.060890
0.056449
0.060399
2017-04-21
0.059597
0.277783
0.132063
0.186112
0.049675
0.058345
0.059067
0.061972
0.054954
0.060431
2017-04-28
0.060141
0.277241
0.131461
0.184395
0.049749
0.059057
0.059667
0.062855
0.054795
0.060639
2017-05-05
0.059106
0.276919
0.130206
0.183665
0.049511
0.060911
0.060640
0.064975
0.053800
0.060268
2017-05-12
0.060553
0.276184
0.131221
0.183034
0.049299
0.060540
0.060250
0.064313
0.053990
0.060617
2017-05-19
0.060675
0.283780
0.125199
0.183370
0.052834
0.059550
0.059395
0.060560
0.050877
0.063761
118 rows × 10 columns
In [112]:
#totalNWMR
In [113]:
#totalNWRB
In [114]:
weekly_return
Out[114]:
JR000007
JR000050
JR000052
JR000053
JR000169
JR000170
JR000171
JR000185
JR000186
JR000278
date
2014-03-28
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
2014-05-30
0.040553
0.001358
-0.021461
-0.011104
0.016304
0.004699
0.002953
0.003000
0.038110
0.003071
2014-07-18
-0.026572
0.010033
0.041935
0.009612
0.001783
0.010290
0.016683
0.010967
0.021406
0.029592
2014-07-25
0.015469
-0.002416
-0.010010
0.015571
0.038256
0.000000
0.001931
0.001972
0.018966
0.015857
2014-08-01
0.000896
0.006190
-0.005679
0.009112
0.023136
0.000926
0.000963
0.000984
0.004374
0.011707
2014-09-05
0.028648
0.010253
0.029742
-0.014239
0.015075
0.008326
0.014437
0.007866
0.075982
0.033751
2014-10-31
-0.026110
0.023299
0.048160
0.025806
-0.000825
0.039450
0.037951
0.044878
0.030141
0.030784
2014-11-21
0.027703
0.003536
0.001678
0.000172
-0.013212
0.004413
0.010969
0.013072
-0.004013
0.007240
2015-01-16
0.008696
0.100808
-0.090646
0.005065
0.360669
0.289104
0.275769
0.266359
0.111633
0.343217
2015-01-23
-0.024138
0.007339
0.010769
0.010164
0.056581
-0.062031
-0.048193
-0.055313
-0.018046
-0.010033
2015-01-30
0.004417
-0.002170
0.004416
-0.000761
-0.044820
-0.019622
-0.012658
-0.003852
0.011150
-0.052703
2015-02-06
-0.002639
0.004117
0.016050
-0.001608
-0.034735
-0.028910
-0.031674
-0.021655
-0.048137
-0.029957
2015-02-13
0.029982
-0.000464
0.006181
-0.000509
0.071338
0.030534
0.028037
0.030830
0.004953
0.042647
2015-02-27
0.016267
0.000851
0.008874
0.003985
-0.007071
0.024444
0.025758
0.023006
-0.004372
0.040197
2015-03-06
-0.049705
0.003402
0.015426
-0.008193
0.040950
0.000000
0.005170
0.001499
0.001677
-0.018305
2015-03-13
0.010638
0.001156
0.002932
0.009027
-0.015393
0.033984
0.030125
0.034431
0.006218
0.044890
2015-03-20
0.002632
0.001155
0.005979
0.002785
0.066010
0.049650
0.049215
0.047033
0.026856
0.065433
2015-03-27
-0.044619
0.000308
0.009048
0.006985
0.049973
0.029314
0.029232
0.029717
0.014581
0.009926
2015-04-10
-0.009158
0.007378
0.022842
0.003928
0.010864
0.126861
0.118890
0.120134
0.083036
0.083538
2015-04-17
-0.011091
0.000229
-0.011710
-0.003746
-0.015865
0.009190
0.010626
-0.004194
-0.006600
0.015873
2015-04-24
-0.006542
0.005263
0.028164
-0.001421
-0.019761
0.013090
0.012850
0.024669
-0.012580
0.036272
2015-05-08
0.010348
0.003490
0.026826
0.035397
0.010610
-0.023596
-0.022491
-0.022901
-0.037363
-0.008616
2015-05-15
0.040037
0.001285
0.043604
-0.022145
0.002625
0.047756
0.046608
0.043870
-0.002008
0.043998
2015-05-22
0.058192
0.005815
0.018041
0.005951
0.065969
0.087864
0.087373
0.077720
0.003725
0.104058
2015-05-29
0.004230
0.013214
0.034172
-0.000657
-0.033399
0.024230
0.027994
0.011752
-0.003711
-0.009896
2015-06-05
0.035383
0.008966
0.037229
0.028447
0.117886
0.061114
0.059506
0.054910
0.013709
0.054260
2015-06-12
0.003255
0.004774
0.017812
0.015829
-0.012273
0.025081
0.025226
0.029530
0.020947
0.027088
2015-06-26
0.018654
0.009941
-0.025695
0.008263
-0.124252
-0.121432
-0.109099
-0.110841
-0.025988
-0.156923
2015-07-03
0.048567
0.000796
0.014326
-0.002498
-0.032580
-0.085611
-0.090151
-0.091307
-0.001996
-0.131908
2015-07-10
0.134396
0.030084
0.030815
0.041158
0.020098
-0.015792
-0.024055
-0.012635
0.063319
-0.075075
...
...
...
...
...
...
...
...
...
...
...
2016-10-14
-0.012405
0.001655
0.005043
0.011739
0.017647
0.002775
0.002959
0.006568
0.015426
0.004816
2016-10-21
-0.004187
0.001377
0.005482
0.000000
0.001927
-0.000553
-0.000590
-0.001631
0.024352
0.005992
2016-10-28
0.022425
-0.001169
0.013492
-0.002759
0.014423
0.000554
0.001181
0.001089
0.043021
-0.004765
2016-11-04
0.020562
0.001032
0.011945
0.006740
-0.006161
-0.002767
-0.002948
-0.003808
0.004862
-0.002394
2016-11-11
0.000000
0.000344
0.028564
0.006272
0.010014
0.003885
0.002957
0.005461
0.065238
-0.004199
2016-11-18
0.017461
0.000962
-0.019492
-0.002311
-0.009443
0.000553
-0.001179
-0.002173
-0.042879
-0.005422
2016-11-25
0.034983
0.000000
-0.001966
0.004001
0.009533
0.000000
0.000000
0.001633
0.044903
0.027256
2016-12-02
0.027423
0.000000
-0.001343
-0.013772
0.011331
-0.001105
-0.000590
-0.003261
-0.018019
0.000000
2016-12-09
-0.019863
0.001236
-0.000314
0.003261
0.000000
-0.000553
0.000000
-0.001636
0.021433
-0.012972
2016-12-16
-0.008233
0.001303
-0.007263
-0.002968
-0.019141
-0.006087
-0.005907
-0.008738
0.023564
-0.038829
2016-12-23
-0.000639
0.001233
0.009394
0.002055
-0.009519
-0.001670
-0.001783
-0.003306
-0.049277
-0.010566
2016-12-30
-0.012780
0.000000
0.004609
0.005233
-0.000961
-0.000558
0.000000
-0.001658
-0.009356
0.009422
2017-01-06
-0.005825
-0.000137
-0.004187
0.004784
0.014430
0.000558
0.000000
0.002215
-0.007474
0.009956
2017-01-13
-0.000651
0.000068
0.010644
0.005251
-0.015173
-0.010039
-0.010714
-0.012155
0.011856
-0.007394
2017-01-20
0.009121
-0.002873
0.001637
0.000139
0.014444
0.000000
0.000602
0.000000
-0.001760
0.013035
2017-02-03
0.021304
0.001029
-0.000398
-0.005223
0.004271
0.001127
0.001804
0.001678
0.010730
0.004289
2017-02-10
-0.042351
0.000617
0.000486
0.001400
0.017486
0.003939
0.003601
0.003908
0.004137
0.007322
2017-02-17
-0.078548
-0.001027
0.005125
0.000070
0.020437
0.002242
0.002392
0.002781
-0.000993
0.010902
2017-02-24
-0.002149
0.003565
0.003648
0.003146
0.020027
0.040268
0.041169
0.040488
-0.018781
0.011384
2017-03-03
-0.039483
-0.000205
-0.009109
-0.004739
-0.013387
0.003226
0.001146
0.001066
0.003139
-0.003555
2017-03-10
0.026906
0.000273
0.016441
-0.000140
-0.002714
0.002144
0.001717
0.003727
-0.019333
0.011891
2017-03-17
-0.060408
0.001161
-0.006913
-0.002591
0.002268
-0.001604
-0.001714
-0.001592
0.003603
0.005288
2017-03-24
0.076685
0.000273
-0.012653
0.003721
0.006335
0.002142
0.002862
0.002657
0.001846
0.030392
2017-04-07
0.012950
0.000887
0.020043
-0.009653
0.000899
-0.004276
-0.003995
-0.004240
0.007628
-0.000567
2017-04-14
0.066761
-0.000341
0.003087
0.000989
-0.014376
-0.004294
-0.004011
-0.004258
-0.014378
-0.009081
2017-04-21
0.043276
0.000136
-0.013392
-0.014042
0.008660
0.004852
0.006329
0.009086
-0.003299
0.014891
2017-04-28
-0.038928
0.000341
-0.002152
0.001431
0.008134
0.006974
0.006289
0.004767
-0.006671
-0.001693
2017-05-05
0.031873
-0.000273
0.002113
-0.002287
-0.013447
-0.011721
-0.011932
-0.013706
-0.000260
-0.001131
2017-05-12
-0.015444
0.000136
-0.013135
-0.002650
0.000454
-0.017251
-0.016676
-0.022448
-0.002291
0.000566
2017-05-19
-0.016993
0.000204
-0.000935
0.005027
0.011807
0.015359
0.015205
0.019136
-0.010544
0.014140
118 rows × 10 columns
In [115]:
mrpos = positionSheet1.iloc[-1]
mrpos.name = 'Minimized_Risk'
rppos = positionSheet2.iloc[-1]
rppos.name = 'Risk_Parity'
posref = pd.concat([mrpos,rppos],axis=1)
posref['Equal_Weighetd'] = 1. / posref.shape[0]
posref = posref.round(4)
In [117]:
# 上传
#posref.reset_index().to_sql(name='multiple_funds_position',con=db_engine, if_exists='replace',index=False)
In [ ]:
# calculate networth and show the plot
retMR = (positionSheet1 * weekly_return).sum(axis=1)
retRB = (positionSheet2 * weekly_return).sum(axis=1)
retEW= (weekly_return.sum(axis=1)/ NumOfAsset)
retEW.name = 'Equal_Weighetd'
retMR .name ='Minimized_Risk'
retRB .name = 'Risk_Parity'
retTotal = pd.concat([retMR ,retRB ,retEW],axis=1)
retTotal.index.name = 'time'
retTotal = retTotal.dropna()
retTotal = retTotal.loc[retTotal[retTotal[retMR .name] ==0].index[-1]:]
retTotal.iloc[0] = 0
#retTotal = retTotal / retTotal.iloc[0]
fig = plt.figure(figsize=(14,9))
# Add a subplot
ax = fig.add_subplot(111)
retTotal.cumsum().plot(figsize=(22,14),ax=ax,title ='Cumulative Return',fontsize =13)
ax.set_title(ax.get_title(),alpha=0.7, fontsize=30, ha='right')
In [ ]:
retTotal = retTotal.round(4)
In [ ]:
from sqlalchemy import create_engine
import sqlalchemy.engine.url as url
#MSText(length=255)
db_engine = create_engine('mysql://{0}:{1}@{2}:{3}/{4}'.format('tai', 'tai2015', '119.254.153.20', 13311, 'PrivateEquityFund_W',encoding='utf-8'))
#retTotal.reset_index().to_sql(name='multiple_funds_comb_ret',con=db_engine, if_exists='replace',index=False)
In [ ]:
In [ ]:
In [ ]:
# --------------------------------------- Risk Parity -------------------------------------------------------
In [ ]:
In [ ]:
In [ ]:
def object_fun(x,return_cov):
'''objective function for Risk budget portfolio
Input: x ,n-d array ,the weight vector
return_cov, the covariance of the asset return
Output: ovjective function'''
N = x.shape[0] # get the number of asset
covMatrix = np.matrix(return_cov)
x = np.matrix(x)
y = np.array(x) * (np.array(covMatrix * x.T).T)
totalRisk = x * covMatrix * x.T
b = totalRisk / N
y = np.squeeze(np.asarray(y)) # return 1 dimension array in order to perform indexing
totalY = y.sum()
fval = 0
for i in range(0,N):
xi = (y[i]/totalY - b ) ** 2
fval =fval +xi
return fval
In [ ]:
def cal_RB_weight(cov):
'''
To calculate weight of portfolio with risk parity(the special case for risk budget portfolio)
Input: Cov: n-d array, obtained from df.values
Output: 1-d array, the weight vector
'''
bnds = ((0,1),) * cov.shape[0] # bounds for weights (number of bounds = to number of assets)
cons = ({'type': 'eq', 'fun': lambda x: np.sum(x)-1.0})
x0 = np.ones(cov.shape[0]) * 1 / cov.shape[0]
res= sp.optimize.minimize(object_fun, x0, args=cov,method='SLSQP',constraints=cons,bounds=bnds)
if res.success:
allocation = res.x
allocation[allocation<0]=0 # since fund can not be shorted!
denom = np.sum(allocation)
if denom != 0: # normalization process
allocation = allocation/denom
else:
allocation = x0
return allocation
In [ ]:
def fitnessERC(x, *args):
N = x.shape[0] #
p = np.squeeze(np.asarray(args))
Acov = np.cov(p.T)
print Acov
Acov = np.matrix(Acov)
x = np.matrix(x)
y = np.array(x) * np.array( Acov * x.T ).T #
var = x * Acov * x.T
b = var/N # risk budget , here we assume that risk budget is equally weighted
fval = 0 # initial value
y = np.squeeze(np.asarray(y))
for i in range(0,N):
xij = (y[i]/y.sum() - b)**2
fval = fval + xij
return fval
In [ ]:
bnds = ((0,1),) * 10 #bounds for weights (number of bounds = to number of assets)
cons = ({'type': 'eq', 'fun': lambda x: np.sum(x)-1.0})
x0 = np.ones(10) * 0.1
res= sp.optimize.minimize(object_fun, x0, args=fund_cov.values,method='SLSQP',constraints=cons,bounds=bnds)
print res.x
if res.success:
allocation = res.x
allocation[allocation<0]=0
denom = np.sum(allocation)
if denom != 0: # normalization process
allocation = allocation/denom
else:
allocation = x0
In [ ]:
s = np.array([5,8,10])
In [ ]:
d = np.array([[1,2,3],[4,5,6],[7,5,6]])
d = np.matrix(d)
d
In [ ]:
s * np.squeeze(np.array((d * np.matrix(s).T).T))
In [ ]:
np.squeeze(np.asarray(s *(np.array((d * np.matrix(s).T).T))))[2]
In [ ]:
np.squeeze(np.array((d * np.matrix(s).T).T))
In [ ]:
s * np.array((d * np.matrix(s).T).T)
Content source: kamiseko/factor-test
Similar notebooks: