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)