In [856]:
#!/Tsan/bin/python
# -*- coding: utf-8 -*-

In [1759]:
# Libraries to use
from __future__ import division 
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import statsmodels
import cvxopt as cv
from cvxopt import solvers

In [858]:
# Import My own library for factor testing
import factorFilterFunctions as ff
#from config import *

In [859]:
%matplotlib inline

In [860]:
# basic stocl pool
ZZ500Weight = 'LZ_GPA_INDEX_CSI500WEIGHT.csv'
HS300Weight = 'LZ_GPA_INDEX_HS300WEIGHT.csv'

In [861]:
filenamePrice ='LZ_GPA_DERI_AdjustedPriceForward_20.csv'

In [862]:
# Factors
# Value factor
filenamePE='LZ_GPA_VAL_PE.csv'  # 市盈率
filenamePB='LZ_GPA_VAL_PB.csv'  # 市净率
filenamePS = 'LZ_GPA_VAL_PS.csv' # 市销率
filenamePCF = 'LZ_GPA_VAL_PC.csv' # 市现率

# Growth factor
filenameYOYGR = 'LZ_GPA_FIN_IND_QFA_YOYGR.csv'  # 单季度.营业总收入同比增长率(%)
filenameYOYNETPROFIT = 'LZ_GPA_FIN_IND_QFA_YOYNETPROFIT.csv' # 单季度.归属母公司股东的净利润同比增长率(%)
filenameYOYOCF = 'LZ_GPA_FIN_IND_YOYOCF.csv' # 同比增长率-经营活动产生的现金流量净额(%)
filenameYOYROE = 'LZ_GPA_FIN_IND_YOYROE.csv' # 同比增长率-净资产收益率(摊薄)(%)
filenameYOYBPS = 'LZ_GPA_FIN_IND_YOYBPS.csv' # 相对年初增长率-每股净资产(%)

# Financial factor
filenameCAPITALIZEDTODA = 'LZ_GPA_FIN_IND_CAPITALIZEDTODA.csv'  # 资本支出/折旧和摊销
filenameCASHRATIO = 'LZ_GPA_FIN_IND_CASHRATIO.csv' # 保守速动比率
filenameCASHTOLIQDEBT = 'LZ_GPA_FIN_IND_CASHTOLIQDEBT.csv' # 货币资金/流动负债
filenameOCFTODEBT = 'LZ_GPA_FIN_IND_OCFTODEBT.csv' # 经营活动产生的现金流量净额/负债合计
filenamePROFITTOOP = 'LZ_GPA_FIN_IND_PROFITTOOP.csv' # 利润总额/营业收入

# Momentum factor
filenameTRUEMOM = 'LZ_GPA_USR_MOM.csv' # 真动量
filenameMOM1M = 'LZ_GPA_DERI_Momentum_1M.csv' # 一月反转
filenameMOM3M = 'LZ_GPA_TURNOVER_TurnoverAvg_3M.csv' # 三月反转
filenamePVO = 'LZ_GPA_DERI_PVO.csv' # 一年偏度
filenameRV1Y = 'LZ_GPA_DERI_RealizedVolatility_1Y.csv' # 一年收益波动
filenameABNORMALVOLUME = 'LZ_GPA_DERI_NormalizedAbormalVolume.csv' # 归一化异常交易量
filenameSKEW = 'LZ_GPA_DERI_TSKEW.csv'# 偏度

# Volatility factor


# Liquidity factor
filenameTURNOVER1M = 'LZ_GPA_TURNOVER_TurnoverAvg_1M.csv' # 一月换手率均值
filenameAMOUNTAVG1M = 'LZ_GPA_DERI_AmountAvg_1M.csv'      #  日均成交量
filenameILLIQ = 'LZ_GPA_DERI_ILLIQ.csv'                   # 非流动性因子
filenameVOLUME = 'LZ_GPA_QUOTE_TVOLUME.csv'               # 成交量

In [863]:
filenameFCAP = 'LZ_GPA_VAL_A_FCAP.csv'

filenameBENCH = 'LZ_GPA_INDXQUOTE_CLOSE.csv'

In [864]:
# some useful parameters
startTime =  datetime.strptime('20120101', '%Y%m%d')
endTime = datetime.strptime('20161231', '%Y%m%d')
facNum = 5 # factor Num
path = ff.data_path # path
timeStampNum = 2500 # Number of time period
thresholdNum = 0.05  # thresholdNum to filter stocks by Nan's amount
HS300Index ='000300.SH' # HS300 index code
ZZ500Index = '000905.SH' #   ZZ500 index code

In [865]:
stockPool = pd.read_csv(path+ZZ500Weight,infer_datetime_format=True,parse_dates=[0],index_col=0).loc[startTime:endTime]
#stockPool = stockPool.iloc[-1].dropna(how='any').index.tolist()  # get today's ZX500 stock pool
stockPool1 = pd.read_csv(path+HS300Weight,infer_datetime_format=True,parse_dates=[0],index_col=0).loc[startTime:endTime]

In [866]:
stockPool = stockPool.dropna(how = 'all',axis =1).columns.tolist()
stockPool1 = stockPool1.dropna(how = 'all',axis =1).columns.tolist()

In [867]:
stockPool = list((set(stockPool1)|set(stockPool)))

In [868]:
len(stockPool)


Out[868]:
1186

In [869]:
class dataCleaning():
    
    def __init__(self,data):
        self.__data = data
    #@property
    #def _constructor(self):
    #    return dataCleaning

    #@property
    #def _constructor_sliced(self):
    #   return SubclassedSeries
        
    def narrowData(self):
        return self.__data[stockPool].loc[startTime:endTime]
    
    def Normalize(self,narrowedData):
        dataWinsorized = narrowedData.copy()
        dataWinsorizedTrans = dataWinsorized.T
        MAD = 1.483*np.abs(dataWinsorizedTrans-dataWinsorizedTrans.median(skipna=True))
        return ((dataWinsorizedTrans - dataWinsorizedTrans.mean(axis=0, skipna=True))/dataWinsorizedTrans.std(axis=0, skipna=True)).T

In [870]:
PriceDF = pd.read_csv(path+filenamePrice,infer_datetime_format=True,parse_dates=[0],index_col=0)[stockPool].loc[startTime:endTime]

In [871]:
LFCAPData = np.log10(pd.read_csv(path+filenameFCAP,infer_datetime_format=True,parse_dates=[0],index_col=0))

PBData = pd.read_csv(path+filenamePB,infer_datetime_format=True,parse_dates=[0],index_col=0)

YOYBPSData = pd.read_csv(path+filenameYOYBPS,infer_datetime_format=True,parse_dates=[0],index_col=0)

AMOUNTAVG1MData = pd.read_csv(path+filenameAMOUNTAVG1M,infer_datetime_format=True,parse_dates=[0],index_col=0)

TURNOVER1MData = pd.read_csv(path+filenameTURNOVER1M,infer_datetime_format=True,parse_dates=[0],index_col=0)

PROFITOOPData = pd.read_csv(path+filenamePROFITTOOP,infer_datetime_format=True,parse_dates=[0],index_col=0)

benchmarkData = pd.read_csv(path+filenameBENCH,infer_datetime_format=True,parse_dates=[0],index_col=0)[ZZ500Index].loc[startTime:endTime]

In [872]:
#isinstance(dataCleaning(PBData).narrowData(),dataCleaning)

In [873]:
PBData = dataCleaning(PBData).Normalize(dataCleaning(PBData).narrowData())
LFCAPData  = dataCleaning(LFCAPData ).Normalize(dataCleaning(LFCAPData ).narrowData())
YOYBPSData = dataCleaning(YOYBPSData).Normalize(dataCleaning(YOYBPSData).narrowData())
AMOUNTAVG1MData = dataCleaning(AMOUNTAVG1MData).Normalize(dataCleaning(AMOUNTAVG1MData).narrowData())
TURNOVER1MData = dataCleaning(TURNOVER1MData).Normalize(dataCleaning(TURNOVER1MData).narrowData())
PROFITOOPData = dataCleaning(PROFITOOPData).Normalize(dataCleaning(PROFITOOPData).narrowData())

In [874]:
print PBData.shape[1], LFCAPData.shape[1], YOYBPSData.shape[1], AMOUNTAVG1MData.shape[1], TURNOVER1MData.shape[1], PROFITOOPData.shape[1]


1186 1186 1186 1186 1186 1186

In [875]:
#PROFITOOPData

In [991]:
# independentfactor should be a list contains of dataframe
def orthoFactor(factordf, independentfactor):
    '''
    Muti variable regression for return.
    returndf and dataframes in factorDict should have same index and same columns
    output: Dataframe, the orthogonalized result of factordf
    input: 
    factordf: Dataframe, factor to be orthogonalized
    independentfactor: List,  the values are the factor dataframe as independence in regression(all \
    with same columns and index)
    '''
    emptydf = pd.DataFrame(index = factordf.index, columns = factordf.columns, data= None, dtype =float)
    dfNum = len(independentfactor)
    if dfNum == 0:
        print 'Input is an empty list!'
        raise ValueError
    for date in factordf.index:
        factordfSlice = factordf.loc[date]
        mapfunction = map(lambda x: x.loc[date], independentfactor)
        if dfNum > 1:
            totaldf = pd.concat(mapfunction, axis=1)         
        else:
            totaldf = independentfactor[0].loc[date]
        result = sm.OLS(factordfSlice.T,totaldf ).fit()
        emptydf .loc[date] = result.resid
    return emptydf

In [ ]:


In [876]:
PBData = PBData .loc[:, PBData .isnull().sum() < (len(PBData) * thresholdNum)]
LFCAPData  = LFCAPData .loc[:, LFCAPData .isnull().sum() < (len(LFCAPData) * thresholdNum)]
YOYBPSData = YOYBPSData .loc[:, YOYBPSData .isnull().sum() < (len(YOYBPSData) * thresholdNum)]
AMOUNTAVG1MData = AMOUNTAVG1MData .loc[:, AMOUNTAVG1MData .isnull().sum() < (len(AMOUNTAVG1MData) * thresholdNum)]
TURNOVER1MData = TURNOVER1MData .loc[:, TURNOVER1MData .isnull().sum() < (len(TURNOVER1MData) * thresholdNum)]
PROFITOOPData  = PROFITOOPData  .loc[:, PROFITOOPData .isnull().sum() < (len(PROFITOOPData ) * thresholdNum)]

PriceDF = PriceDF.loc[:, (PriceDF.isnull().sum() < (len(PriceDF) * thresholdNum))]

In [877]:
print PBData.shape[1], LFCAPData.shape[1], YOYBPSData.shape[1] ,AMOUNTAVG1MData.shape[1], TURNOVER1MData.shape[1], PROFITOOPData.shape[1]


1078 1093 1140 1086 1086 1143

In [878]:
len(list((DFcolumns(PBData)) & (DFcolumns(YOYBPSData))))


Out[878]:
1078

In [879]:
def DFcolumns(df):
    return set(df.columns.tolist())

In [880]:
##
stkPool = list((DFcolumns(PBData)) & (DFcolumns(YOYBPSData)) & (DFcolumns(AMOUNTAVG1MData)) & (DFcolumns(TURNOVER1MData)) & (DFcolumns(PROFITOOPData))\
        & (DFcolumns(PriceDF)))
len(stkPool)


Out[880]:
1071

In [881]:
#
def fillData(df,stkPool):
    return df[stkPool].fillna(method='ffill').fillna(method='bfill')

In [882]:
PBData = fillData(PBData,stkPool)
LFCAPData = fillData(LFCAPData,stkPool)
YOYBPSData = fillData(YOYBPSData,stkPool)
AMOUNTAVG1MData = fillData(AMOUNTAVG1MData,stkPool)
TURNOVER1MData = fillData(TURNOVER1MData,stkPool)
PROFITOOPData = fillData(PROFITOOPData,stkPool)

PriceDF = fillData(PriceDF,stkPool)

In [932]:
LFCAPData.shape


Out[932]:
(1214, 1071)

In [962]:
orthorizedDF = orthoFactor(YOYBPSData,[PROFITOOPData])

In [963]:
correlationDF1 = ff.showCorrelation(orthorizedDF ,PROFITOOPData, orthorizedDF.index, filterdic = None).astype(float)
correlationDF.describe()


Out[963]:
Pearson Spearman
count 1214.000000 1214.000000
mean 0.001389 -0.048090
std 0.000902 0.114718
min -0.000074 -0.368550
25% 0.000825 -0.108443
50% 0.001245 -0.043231
75% 0.001831 0.025140
max 0.005471 0.235347

In [965]:
correlationDF = ff.showCorrelation(YOYBPSData ,PROFITOOPData, orthorizedDF.index, filterdic = None).astype(float)
correlationDF.describe()


Out[965]:
Pearson Spearman
count 1214.000000 1214.000000
mean 0.095275 0.363892
std 0.061983 0.155586
min 0.008090 0.145976
25% 0.051428 0.261719
50% 0.084243 0.284862
75% 0.128098 0.560356
max 0.284805 0.634266

In [924]:
orthoFactor(PBData,[LFCAPData,YOYBPSData])


Out[924]:
600507.SH 002344.SZ 000793.SZ 300039.SZ 600059.SH 600501.SH 000713.SZ 002233.SZ 600360.SH 600565.SH ... 600150.SH 600469.SH 600282.SH 600739.SH 600406.SH 600687.SH 600866.SH 000860.SZ 601908.SH 002195.SZ
LZ_GPA_DERI_AdjustedPriceForward_20-d
2012-01-05 -0.377263 0.817910 -0.019514 0.336389 -0.093000 -0.182212 0.080297 -0.260826 -0.537475 -0.373930 ... -0.525790 -0.599379 -0.700208 -0.452856 3.866487 1.164736 -0.499238 -0.372012 -0.310752 0.661021
2012-01-06 -0.370344 0.807951 -0.033858 0.331630 -0.083475 -0.174873 -0.008016 -0.224641 -0.529716 -0.342368 ... -0.519258 -0.584974 -0.695577 -0.428696 3.870769 1.150617 -0.514991 -0.372073 -0.306836 0.694119
2012-01-09 -0.071479 0.059052 -0.032903 0.007236 -0.038524 -0.052797 -0.032796 -0.053024 -0.091473 -0.072893 ... -0.081841 -0.098388 -0.108975 -0.073139 0.398672 0.086776 -0.089531 -0.069367 -0.069264 0.036300
2012-01-10 -0.384463 0.819567 -0.052424 0.333428 -0.084771 -0.174435 0.052174 -0.184946 -0.544890 -0.386419 ... -0.523893 -0.608049 -0.721006 -0.443349 3.792828 1.014716 -0.510021 -0.364589 -0.295955 0.685328
2012-01-11 -0.351141 0.848830 -0.059945 0.303477 -0.099169 -0.173968 0.072290 -0.207998 -0.550314 -0.398641 ... -0.531301 -0.606901 -0.721213 -0.451356 3.833209 1.010454 -0.520227 -0.373125 -0.307323 0.867596
2012-01-12 -0.354879 0.825741 -0.062891 0.277584 -0.100246 -0.163848 0.050273 -0.198887 -0.543286 -0.395281 ... -0.525191 -0.608871 -0.715954 -0.448372 3.730190 1.004743 -0.515610 -0.373257 -0.274771 0.825780
2012-01-13 -0.359135 0.852530 -0.066427 0.212000 -0.100076 -0.160491 0.071527 -0.201071 -0.535010 -0.380636 ... -0.525414 -0.599971 -0.698903 -0.446049 3.640257 1.063589 -0.515156 -0.380268 -0.249726 0.750593
2012-01-16 -0.063506 0.049467 -0.033724 -0.011128 -0.039969 -0.050416 -0.021238 -0.050410 -0.084665 -0.070060 ... -0.075766 -0.090983 -0.098770 -0.068086 0.307385 0.080681 -0.083799 -0.066131 -0.060669 0.039613
2012-01-17 -0.383307 0.819627 -0.060211 0.191063 -0.100658 -0.175895 0.100906 -0.174632 -0.534827 -0.386578 ... -0.514510 -0.599052 -0.696447 -0.419269 3.246474 1.041166 -0.526365 -0.373186 -0.264369 0.792163
2012-01-18 -0.358955 0.830417 -0.046008 0.096701 -0.104818 -0.131947 0.089588 -0.141667 -0.519464 -0.368077 ... -0.501264 -0.576544 -0.683348 -0.413558 2.980489 1.076957 -0.518671 -0.366998 -0.268545 0.746471
2012-01-19 -0.313907 0.822933 -0.074655 0.114729 -0.101154 -0.131056 0.076453 -0.142674 -0.514722 -0.364155 ... -0.505614 -0.571818 -0.684399 -0.410972 3.215128 1.064456 -0.521502 -0.367195 -0.257241 0.747641
2012-01-20 -0.332382 0.832103 -0.073348 0.140857 -0.083534 -0.130506 0.115427 -0.129396 -0.519211 -0.366632 ... -0.502428 -0.581331 -0.696047 -0.415542 3.296044 0.954641 -0.519727 -0.365992 -0.269966 0.747591
2012-01-30 -0.060857 0.045649 -0.035377 -0.019125 -0.036537 -0.045186 -0.020280 -0.045681 -0.080985 -0.067601 ... -0.074561 -0.087913 -0.096731 -0.066457 0.289017 0.059303 -0.081455 -0.062864 -0.059833 0.038217
2012-01-31 -0.324949 0.756538 -0.045469 0.094221 -0.076774 -0.114725 0.102240 -0.156484 -0.506691 -0.356949 ... -0.490059 -0.573849 -0.690995 -0.410805 3.184598 0.937866 -0.518326 -0.335713 -0.325442 0.727783
2012-02-01 -0.336803 0.780350 -0.049176 0.110883 -0.088960 -0.125822 0.115681 -0.184522 -0.503575 -0.348880 ... -0.509664 -0.573022 -0.698539 -0.423006 3.231219 0.968262 -0.518324 -0.339624 -0.330276 0.739096
2012-02-02 -0.346427 0.783075 -0.048989 0.158718 -0.098722 -0.130647 0.108440 -0.180117 -0.510103 -0.355490 ... -0.514464 -0.583205 -0.710651 -0.429332 2.573931 0.943224 -0.526131 -0.343096 -0.338157 0.761898
2012-02-03 -0.351912 0.796011 -0.066312 0.146498 -0.103455 -0.137763 0.087147 -0.197506 -0.498791 -0.367396 ... -0.509631 -0.589046 -0.717183 -0.436746 2.713986 0.910628 -0.502228 -0.359699 -0.326308 0.772123
2012-02-06 -0.057980 0.032798 -0.035383 -0.017089 -0.038114 -0.044362 -0.023230 -0.045012 -0.071612 -0.061828 ... -0.066792 -0.078315 -0.087344 -0.061435 0.196482 0.038245 -0.071608 -0.058298 -0.056173 0.027243
2012-02-07 -0.350134 0.802353 -0.070964 0.176326 -0.118323 -0.148448 0.092582 -0.196484 -0.514567 -0.370171 ... -0.521637 -0.594412 -0.716631 -0.456290 2.815243 0.924235 -0.517525 -0.368157 -0.304970 0.742707
2012-02-08 -0.362548 0.786847 -0.087677 0.172758 -0.116275 -0.144909 0.075944 -0.184565 -0.510018 -0.374052 ... -0.529023 -0.588432 -0.721427 -0.456657 2.820072 0.873962 -0.513456 -0.374289 -0.304294 0.785436
2012-02-09 -0.349320 0.779579 -0.089553 0.155069 -0.104427 -0.156789 0.066655 -0.185322 -0.508767 -0.370008 ... -0.527121 -0.597691 -0.723583 -0.461920 2.833014 0.860006 -0.499962 -0.373549 -0.312451 0.706845
2012-02-10 -0.347984 0.785497 -0.091976 0.134662 -0.113039 -0.158017 0.079552 -0.182097 -0.513246 -0.370912 ... -0.527930 -0.600436 -0.721632 -0.457014 2.802865 0.847890 -0.508709 -0.359956 -0.311670 0.694972
2012-02-13 -0.053332 0.020823 -0.035520 -0.018611 -0.036356 -0.042798 -0.026747 -0.043758 -0.064145 -0.056903 ... -0.062011 -0.071284 -0.078836 -0.058251 0.160204 0.023343 -0.064749 -0.053883 -0.054862 0.014432
2012-02-14 -0.351588 0.785421 -0.091626 0.236449 -0.100825 -0.146561 0.049635 -0.182472 -0.498224 -0.364123 ... -0.515362 -0.586651 -0.724815 -0.459163 2.743962 0.822793 -0.503773 -0.358792 -0.353768 0.691112
2012-02-15 -0.351949 0.774538 -0.082955 0.231104 -0.114745 -0.143132 0.035049 -0.188726 -0.485686 -0.374076 ... -0.508280 -0.592609 -0.721476 -0.439669 2.668842 0.790809 -0.485484 -0.363444 -0.338975 0.685115
2012-02-16 -0.335502 0.786184 -0.075333 0.191617 -0.113048 -0.148885 0.051613 -0.196409 -0.492570 -0.361859 ... -0.512003 -0.587650 -0.725524 -0.444811 2.655974 0.793378 -0.492938 -0.372651 -0.317755 0.681697
2012-02-17 -0.341953 0.785847 -0.084138 0.173122 -0.120887 -0.130635 0.033961 -0.205620 -0.503071 -0.357876 ... -0.509370 -0.590527 -0.727264 -0.434818 2.680334 0.799252 -0.503841 -0.379277 -0.312529 0.646844
2012-02-20 -0.057819 0.019251 -0.035674 -0.023005 -0.037279 -0.040251 -0.028492 -0.043567 -0.063792 -0.055166 ... -0.061499 -0.069480 -0.077697 -0.057707 0.154049 0.020701 -0.063577 -0.054422 -0.052292 0.010678
2012-02-21 -0.446541 0.761323 -0.088370 0.121508 -0.079759 -0.148112 0.020782 -0.211096 -0.516010 -0.374841 ... -0.522388 -0.611913 -0.743642 -0.447026 2.851428 0.789567 -0.515494 -0.368927 -0.323436 0.687160
2012-02-22 -0.457233 0.766921 -0.093438 0.122156 -0.093021 -0.130599 0.017420 -0.215502 -0.526713 -0.386035 ... -0.526292 -0.619238 -0.753113 -0.444397 2.855218 0.756287 -0.519217 -0.376292 -0.298534 0.710147
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2016-11-22 -0.029003 -0.031366 -0.031362 -0.029086 -0.034689 -0.031727 -0.035769 -0.035115 -0.031327 -0.033086 ... -0.032680 -0.039987 -0.034874 -0.032673 -0.025602 -0.027154 -0.031145 -0.032403 -0.032285 -0.034725
2016-11-23 -0.028937 -0.031597 -0.031410 -0.029164 -0.034640 -0.031511 -0.035818 -0.035121 -0.031267 -0.033114 ... -0.032698 -0.040014 -0.034715 -0.032712 -0.025581 -0.027091 -0.031252 -0.032319 -0.032438 -0.034756
2016-11-24 -0.028881 -0.031459 -0.031355 -0.029251 -0.034398 -0.031459 -0.035838 -0.035020 -0.031016 -0.033059 ... -0.032726 -0.039969 -0.034484 -0.032198 -0.025890 -0.027082 -0.031456 -0.032179 -0.032607 -0.035120
2016-11-25 -0.028487 -0.031639 -0.031420 -0.029242 -0.034561 -0.031548 -0.035967 -0.035186 -0.031264 -0.033199 ... -0.032787 -0.039980 -0.034554 -0.032398 -0.025924 -0.027106 -0.031581 -0.032330 -0.032750 -0.034902
2016-11-28 -0.028602 -0.031864 -0.031401 -0.029159 -0.034682 -0.031758 -0.036073 -0.035254 -0.031525 -0.032989 ... -0.032853 -0.040207 -0.034654 -0.032547 -0.025747 -0.027108 -0.031743 -0.032454 -0.032471 -0.035123
2016-11-29 -0.028217 -0.031999 -0.031839 -0.029089 -0.034880 -0.031258 -0.036330 -0.035748 -0.031782 -0.033256 ... -0.033018 -0.040785 -0.035175 -0.032995 -0.025634 -0.026933 -0.031741 -0.032669 -0.032883 -0.035336
2016-11-30 -0.028319 -0.032141 -0.031640 -0.028611 -0.034702 -0.031233 -0.036099 -0.035636 -0.031586 -0.033240 ... -0.033051 -0.040497 -0.035039 -0.032770 -0.025714 -0.026919 -0.031654 -0.032606 -0.032880 -0.034956
2016-12-01 -0.028169 -0.032142 -0.031750 -0.028740 -0.034793 -0.031309 -0.036143 -0.035627 -0.031617 -0.033350 ... -0.032864 -0.040378 -0.034990 -0.032808 -0.025744 -0.026986 -0.031636 -0.032688 -0.032874 -0.035039
2016-12-02 -0.028527 -0.032165 -0.031613 -0.028904 -0.034845 -0.031472 -0.036098 -0.035590 -0.031677 -0.033200 ... -0.032538 -0.040129 -0.034994 -0.032703 -0.025460 -0.026788 -0.031687 -0.032677 -0.032931 -0.035081
2016-12-05 -0.028444 -0.032362 -0.031589 -0.029075 -0.034735 -0.031374 -0.036031 -0.035542 -0.031657 -0.033134 ... -0.031890 -0.039998 -0.034987 -0.033302 -0.025120 -0.026665 -0.031565 -0.032588 -0.032887 -0.034854
2016-12-06 -0.028517 -0.032345 -0.031637 -0.029144 -0.034779 -0.031607 -0.035966 -0.035407 -0.031438 -0.033191 ... -0.031990 -0.039938 -0.034938 -0.033332 -0.024918 -0.026686 -0.031424 -0.032558 -0.032848 -0.034738
2016-12-07 -0.028009 -0.032106 -0.031694 -0.029133 -0.034738 -0.031684 -0.035919 -0.035188 -0.031553 -0.033208 ... -0.031759 -0.039925 -0.034714 -0.033254 -0.025021 -0.026847 -0.031391 -0.032495 -0.032786 -0.034727
2016-12-08 -0.027939 -0.032178 -0.031502 -0.029233 -0.034725 -0.031869 -0.035924 -0.035327 -0.031526 -0.033009 ... -0.031924 -0.039792 -0.034825 -0.033364 -0.025211 -0.026791 -0.031451 -0.032463 -0.032882 -0.034762
2016-12-09 -0.028136 -0.032068 -0.031411 -0.029299 -0.034606 -0.031813 -0.035890 -0.035355 -0.031587 -0.032904 ... -0.031552 -0.039631 -0.034621 -0.033166 -0.025230 -0.026770 -0.031441 -0.032312 -0.032894 -0.034681
2016-12-12 -0.027933 -0.032158 -0.031384 -0.029478 -0.034651 -0.031677 -0.035953 -0.035489 -0.031867 -0.032732 ... -0.031559 -0.039611 -0.034571 -0.033387 -0.024730 -0.026196 -0.031431 -0.032205 -0.032961 -0.034941
2016-12-13 -0.027349 -0.032197 -0.031443 -0.029488 -0.034613 -0.031526 -0.035906 -0.035330 -0.032031 -0.032812 ... -0.031025 -0.039712 -0.034560 -0.033376 -0.025133 -0.026251 -0.031468 -0.032084 -0.033101 -0.034946
2016-12-14 -0.027623 -0.032238 -0.031471 -0.029512 -0.034646 -0.031188 -0.036190 -0.035462 -0.032058 -0.032968 ... -0.031150 -0.039259 -0.034694 -0.033427 -0.024074 -0.026151 -0.031341 -0.032075 -0.033074 -0.035068
2016-12-15 -0.026584 -0.031811 -0.031220 -0.029553 -0.034463 -0.031101 -0.035997 -0.035257 -0.031800 -0.032444 ... -0.031020 -0.038998 -0.034357 -0.033156 -0.024162 -0.026312 -0.031215 -0.031831 -0.032865 -0.034882
2016-12-16 -0.025964 -0.031764 -0.030823 -0.029487 -0.034370 -0.031019 -0.035573 -0.035180 -0.031822 -0.032220 ... -0.031418 -0.039083 -0.034393 -0.033032 -0.024443 -0.026395 -0.031070 -0.031881 -0.032803 -0.034655
2016-12-19 -0.026374 -0.031921 -0.030631 -0.029634 -0.034429 -0.030985 -0.035508 -0.035217 -0.032028 -0.032246 ... -0.031319 -0.039023 -0.034303 -0.033104 -0.024345 -0.026377 -0.031050 -0.031829 -0.032836 -0.034818
2016-12-20 -0.026968 -0.031824 -0.030617 -0.029560 -0.034455 -0.031081 -0.035661 -0.035297 -0.031759 -0.032317 ... -0.031351 -0.039138 -0.034281 -0.033113 -0.024713 -0.026363 -0.030901 -0.031840 -0.032851 -0.034685
2016-12-21 -0.027072 -0.031824 -0.030690 -0.029570 -0.034434 -0.030924 -0.035602 -0.035315 -0.031789 -0.032373 ... -0.030848 -0.038641 -0.034195 -0.033064 -0.024636 -0.026463 -0.030987 -0.031840 -0.032899 -0.034722
2016-12-22 -0.027081 -0.031920 -0.030822 -0.029621 -0.034506 -0.031162 -0.035776 -0.035040 -0.031991 -0.032231 ... -0.030726 -0.038676 -0.033987 -0.033183 -0.024096 -0.026423 -0.030995 -0.032003 -0.032994 -0.034987
2016-12-23 -0.027433 -0.032070 -0.030571 -0.029572 -0.034325 -0.031075 -0.035838 -0.035145 -0.031857 -0.032108 ... -0.030713 -0.038774 -0.033934 -0.033276 -0.023841 -0.026290 -0.030943 -0.032056 -0.033005 -0.034994
2016-12-26 -0.027701 -0.032895 -0.030728 -0.029486 -0.034337 -0.031026 -0.035841 -0.035197 -0.031935 -0.032209 ... -0.030771 -0.038863 -0.034228 -0.033421 -0.023926 -0.026293 -0.030798 -0.032205 -0.033047 -0.034834
2016-12-27 -0.027739 -0.032917 -0.030708 -0.029499 -0.034309 -0.031011 -0.035779 -0.035205 -0.031874 -0.031972 ... -0.030922 -0.038907 -0.034300 -0.033462 -0.023841 -0.026276 -0.030634 -0.032166 -0.033123 -0.034930
2016-12-28 -0.027894 -0.032868 -0.030856 -0.029599 -0.034325 -0.030928 -0.035767 -0.035268 -0.031820 -0.032059 ... -0.030847 -0.038597 -0.034273 -0.033442 -0.023916 -0.026238 -0.030436 -0.032082 -0.033059 -0.034924
2016-12-29 -0.027766 -0.032645 -0.030841 -0.029382 -0.034207 -0.030842 -0.035545 -0.035067 -0.031905 -0.032235 ... -0.031128 -0.038629 -0.033952 -0.033308 -0.024041 -0.026279 -0.030488 -0.032035 -0.032873 -0.034861
2016-12-30 -0.027871 -0.032796 -0.031049 -0.029444 -0.034246 -0.031020 -0.035497 -0.035345 -0.032028 -0.032231 ... -0.031458 -0.038720 -0.034007 -0.033415 -0.023975 -0.026233 -0.030306 -0.031729 -0.032713 -0.035035
2012-01-04 -0.071250 0.053166 -0.035383 0.000753 -0.037675 -0.052847 -0.014652 -0.054814 -0.088625 -0.075696 ... -0.076637 -0.096018 -0.103514 -0.073245 0.360620 0.075080 -0.083320 -0.066678 -0.066159 0.039261

1214 rows × 1071 columns


In [884]:
returnDF = PriceDF.pct_change()[1:] 
returnOfBench = benchmarkData.pct_change()[1:]

In [885]:
activeReturnDF = returnDF .apply(lambda x: x - returnOfBench )
activeReturnDF.head().iloc[:,2].values


Out[885]:
array([ 0.04409089, -0.01318374, -0.01007904, -0.01510373, -0.00549787])

In [886]:
factorReturn = pd.DataFrame(index = returnDF.index, columns = ['LFCA', 'PB', 'YOYBPS', 'AMOUNTAVG1MData', 'TURNOVER1M' ,\
                                                              'PROFITOOP'],data= None ,dtype =float)
factorPvalue =  pd.DataFrame(index = returnDF.index, columns = ['LFCA', 'PB', 'YOYBPS', 'AMOUNTAVG1MData', 'TURNOVER1M' ,\
                                                              'PROFITOOP'],data= None ,dtype =float)

In [887]:
specificReturn = pd.DataFrame(index = returnDF.index, columns = LFCAPData.columns ,dtype =float )

In [1655]:
# construct the multiple factor structural risk model
def multiFactorReg(returndf,factorDict,WLS =False, weightdf = None):
    '''
    Muti variable regression for return.
    returndf and dataframes in factorDict should have same index and same columns
    output: 3 Dataframe, respectively idiosyncratic return for each stock, factor Return and factor P-value
    input: 
    returndf: Dataframe, can either be return or acticve return
    factorDict: Dictionary, the keys are the names of factors and the values are the corresponding factor dataframe(all \
    with same columns and index)
    WLS: True to use WLS , False to use OLS. If True, then weightdf should not be none.
    weightdf: Dataframe , which has no nan and the shape is same as dataframes in factorDict
    '''
    specificReturn = pd.DataFrame(index = returndf.index, columns =returndf.columns , data= None, dtype =float)
    factorReturn = pd.DataFrame(index = returndf.index, columns =factorDict.keys(), data= None, dtype =float )
    factorPvalue = pd.DataFrame(index = returndf.index, columns =factorDict.keys(), data= None, dtype =float )
    dfNum = len(factorDict.keys())
    if dfNum == 0:
        print 'Input is an empty list!'
        raise ValueError
    for date in returndf.index:
        returndfSlice = returndf.loc[date]
        mapfunction = map(lambda x: x.loc[date], factorDict.values())
        if dfNum > 1:
            totaldf = pd.concat(mapfunction, axis=1)         
        else:
            totaldf = factorDict.values()[0].loc[date]
        if WLS:
            w = weightdf.loc[date]
            result = sm.WLS(returndfSlice.T,totaldf,weights = 1/w ).fit()
        else:
            result = sm.OLS(returndfSlice.T,totaldf ).fit()
        specificReturn .loc[date] = result.resid
        factorReturn .loc[date] = result.params.values
        factorPvalue . loc[date] = result.pvalues.values
    return specificReturn, factorReturn, factorPvalue

In [1609]:
factordic = {'LFCA':LFCAPData, 'PB':PBData, 'YOYBPS':YOYBPSData, 'AMOUNTAVG1MData':AMOUNTAVG1MData, 'TURNOVER1M' :TURNOVER1MData,\
                                                              'PROFITOOP':PROFITOOPData}

In [1630]:
LFCAPData.isnull().sum().sum()


Out[1630]:
0

In [1637]:
# set weight for WLS
weightdf = pd.read_csv(path+filenameFCAP,infer_datetime_format=True,parse_dates=[0],index_col=0).loc[startTime:endTime]
weightdf = fillData(weightdf,stkPool)

In [1638]:
# the square root is the weight
weight = np.sqrt(weightdf)

In [1658]:
weight.head()


Out[1658]:
600507.SH 002344.SZ 000793.SZ 300039.SZ 600059.SH 600501.SH 000713.SZ 002233.SZ 600360.SH 600565.SH ... 600150.SH 600469.SH 600282.SH 600739.SH 600406.SH 600687.SH 600866.SH 000860.SZ 601908.SH 002195.SZ
LZ_GPA_VAL_A_FCAP-d
2012-01-04 711.270946 574.155505 870.935818 525.024377 780.268345 399.585194 634.964954 639.330922 514.907060 469.382573 ... 1648.336085 530.289177 676.953174 1289.269776 1834.775229 423.73024 544.524875 771.964985 354.288018 378.226706
2012-01-05 707.604577 561.174702 874.051878 516.066956 760.670330 388.327007 602.355839 616.206172 504.933738 469.382573 ... 1626.974455 526.386025 670.702318 1285.559640 1827.605310 423.73024 530.467120 752.112365 339.499632 363.379142
2012-01-06 712.184589 561.174702 870.155060 516.465412 765.814063 390.710216 581.142989 630.038866 508.946520 480.000000 ... 1636.071029 534.163809 674.459784 1310.789708 1833.916319 423.73024 524.539927 753.277528 342.052628 367.716712
2012-01-09 725.751229 570.496268 883.334105 528.798302 780.268345 399.843240 590.327556 650.236390 520.147979 484.479102 ... 1669.106866 541.829957 684.378842 1339.624353 1841.917238 423.73024 536.328813 775.648450 350.970084 367.716712
2012-01-10 738.188508 580.470263 894.801493 534.986304 794.839725 408.267291 619.237301 670.840310 531.113246 489.652938 ... 1701.189865 554.484050 698.993562 1352.298471 1861.487006 423.73024 555.421189 791.319699 360.666051 379.157155

5 rows × 1071 columns


In [1657]:
multiFactorReg(activeReturnDF,factordic,True,weight)[1].tail()


Out[1657]:
YOYBPS LFCA PB AMOUNTAVG1MData PROFITOOP TURNOVER1M
LZ_GPA_DERI_AdjustedPriceForward_20-d
2016-12-26 0.000797 -0.000401 -0.019623 0.000409 0.000525 0.000185
2016-12-27 0.000567 -0.001730 -0.045106 -0.000859 -0.000065 0.000978
2016-12-28 -0.000239 -0.001174 -0.006216 -0.000166 0.000043 0.000013
2016-12-29 0.002062 0.000228 -0.029632 -0.000372 -0.000048 0.000123
2016-12-30 -0.001254 -0.000490 0.007642 -0.001005 -0.000121 -0.003643

In [1656]:
multiFactorReg(activeReturnDF,factordic)[1].tail()


Out[1656]:
YOYBPS LFCA PB AMOUNTAVG1MData PROFITOOP TURNOVER1M
LZ_GPA_DERI_AdjustedPriceForward_20-d
2016-12-26 0.000630 -0.000336 -0.021739 0.000888 0.000517 0.000488
2016-12-27 0.000728 -0.001363 -0.045923 -0.000637 -0.000036 0.000850
2016-12-28 -0.000173 -0.000523 -0.007289 -0.000497 0.000020 0.000286
2016-12-29 0.002175 0.000331 -0.030243 -0.000112 -0.000041 -0.000049
2016-12-30 -0.000833 0.000770 0.001810 -0.001624 0.000049 -0.003794

In [983]:
for date in returnDF.index:
    activeReturnSlice = activeReturnDF .loc[date]
    LFCAPDataSlice = LFCAPData.loc[date]
    PBDataSlice = PBData.loc[date]
    YOYBPSDataSlice = YOYBPSData.loc[date]
    AMOUNTAVG1MDataSlice = AMOUNTAVG1MData .loc[date]
    TURNOVER1MDataSlice = TURNOVER1MData.loc[date]
    PROFITOOPDataSlice = PROFITOOPData.loc[date]
    totalDF = pd.concat([LFCAPDataSlice,PBDataSlice,YOYBPSDataSlice,AMOUNTAVG1MDataSlice,TURNOVER1MDataSlice,PROFITOOPDataSlice],axis=1)
    #print totalDF,PBDataSlice
    result = sm.OLS(activeReturnSlice.T,totalDF ).fit()
    factorReturn . loc[date] = result.params.values
    factorPvalue . loc[date] = result.pvalues.values
    specificReturn .loc[date] = result.resid
result.summary()


Out[983]:
OLS Regression Results
Dep. Variable: 2016-12-30 00:00:00 R-squared: 0.091
Model: OLS Adj. R-squared: 0.085
Method: Least Squares F-statistic: 17.68
Date: Thu, 30 Mar 2017 Prob (F-statistic): 1.33e-19
Time: 11:40:49 Log-Likelihood: 3088.4
No. Observations: 1071 AIC: -6165.
Df Residuals: 1065 BIC: -6135.
Df Model: 6
Covariance Type: nonrobust
coef std err t P>|t| [0.025 0.975]
2016-12-30 00:00:00 0.0008 0.001 1.482 0.139 -0.000 0.002
2016-12-30 00:00:00 0.0018 0.014 0.133 0.894 -0.025 0.028
2016-12-30 00:00:00 -0.0008 0.001 -0.868 0.386 -0.003 0.001
2016-12-30 00:00:00 -0.0016 0.000 -3.344 0.001 -0.003 -0.001
2016-12-30 00:00:00 -0.0038 0.001 -7.448 0.000 -0.005 -0.003
2016-12-30 00:00:00 4.907e-05 0.000 0.113 0.910 -0.001 0.001
Omnibus: 236.186 Durbin-Watson: 1.991
Prob(Omnibus): 0.000 Jarque-Bera (JB): 2483.423
Skew: 0.693 Prob(JB): 0.00
Kurtosis: 10.330 Cond. No. 39.8

In [1287]:
factorReturn.head()


Out[1287]:
LFCA PB YOYBPS AMOUNTAVG1MData TURNOVER1M PROFITOOP
LZ_GPA_DERI_AdjustedPriceForward_20-d
2012-01-05 0.010764 -0.001083 -0.000036 0.001894 0.001312 -0.039442
2012-01-06 0.000101 -0.000361 0.000318 0.002294 0.001647 -0.022882
2012-01-09 -0.002122 -0.032656 0.000115 0.000528 0.000192 0.050028
2012-01-10 -0.001900 -0.001688 -0.001064 0.000217 -0.001661 0.029091
2012-01-11 -0.003104 0.002084 -0.000630 0.000544 -0.000638 -0.013784

In [1278]:
def calEWMcovariance(facRetdf,decay=0.94):
    '''
    To calculate EWM covariance matrix of given facRetdf
    output: Dataframe, the ewm cov-matrix of the factors
    input:
    facRetdf: Dataframe, factor return dataframe
    decay: float, decay-factors
    Decay factors were set at:
    − 0.94 (1-day) from 112 days of data;
    − 0.97 (1-month) from 227 days of data.
    '''
    m,n = facRetdf.shape
    facDF = facRetdf - facRetdf.mean()
    for i in xrange(m):
        facDF.iloc[i] = np.sqrt(decay**(m-1-i)) * facDF.iloc[i]
    ewmCovMatrix = facDF.T.dot(facDF) *(1-decay)/(1-decay**m)
    return ewmCovMatrix

In [1345]:
compara = 1/0.94 - 1
ewmMatrix = factorReturn.ewm(ignore_na=True, min_periods=0, com=compara).cov(pairwise = True)[-200:].iloc[-1]

In [1274]:
calEWMcovariance(factorReturn.iloc[-200:], decay=0.94)


Out[1274]:
LFCA PB YOYBPS AMOUNTAVG1MData TURNOVER1M PROFITOOP
LFCA 2.034060e-06 0.000005 -4.466577e-07 -0.000002 -0.000004 7.074628e-07
PB 4.835629e-06 0.000682 -3.420188e-05 -0.000011 -0.000013 2.197088e-05
YOYBPS -4.466577e-07 -0.000034 3.698684e-06 0.000002 0.000004 1.653468e-07
AMOUNTAVG1MData -1.761929e-06 -0.000011 1.644020e-06 0.000004 0.000006 -1.845071e-06
TURNOVER1M -3.809698e-06 -0.000013 4.183206e-06 0.000006 0.000020 1.768827e-06
PROFITOOP 7.074628e-07 0.000022 1.653468e-07 -0.000002 0.000002 6.582387e-06

In [1350]:
# calculate monthly scaled variance  forecast for the market index by DEWIV
alphaS = 21*returnOfBench.ewm(ignore_na=True, min_periods=0, com=compara).cov(pairwise = True)[-200:].iloc[-1]

In [1351]:
alphaS


Out[1351]:
0.0002192128126956748

In [1307]:
benchmarkWeight = pd.read_csv(path+ZZ500Weight,infer_datetime_format=True,parse_dates=[0],index_col=0)[stkPool].loc[startTime:endTime].fillna(0)

In [1308]:
benchmarkWeight


Out[1308]:
600507.SH 002344.SZ 000793.SZ 300039.SZ 600059.SH 600501.SH 000713.SZ 002233.SZ 600360.SH 600565.SH ... 600150.SH 600469.SH 600282.SH 600739.SH 600406.SH 600687.SH 600866.SH 000860.SZ 601908.SH 002195.SZ
LZ_GPA_INDEX_CSI500WEIGHT-d
2012-01-04 0.1384 0.0000 0.3659 0.0000 0.2749 0.1272 0.1678 0.2312 0.1507 0.0000 ... 0.0 0.1177 0.0000 0.0 0.0 0.0000 0.1689 0.2531 0.0000 0.0
2012-01-05 0.1424 0.0000 0.3737 0.0000 0.2701 0.1272 0.1702 0.2268 0.1492 0.0000 ... 0.0 0.1187 0.0000 0.0 0.0 0.0000 0.1763 0.2516 0.0000 0.0
2012-01-06 0.1463 0.0000 0.3908 0.0000 0.2666 0.1247 0.1590 0.2188 0.1490 0.0000 ... 0.0 0.1214 0.0000 0.0 0.0 0.0000 0.1737 0.2479 0.0000 0.0
2012-01-09 0.1476 0.0000 0.3857 0.0000 0.2690 0.1257 0.1474 0.2278 0.1507 0.0000 ... 0.0 0.1245 0.0000 0.0 0.0 0.0000 0.1691 0.2476 0.0000 0.0
2012-01-10 0.1473 0.0000 0.3820 0.0000 0.2684 0.1265 0.1461 0.2331 0.1513 0.0000 ... 0.0 0.1231 0.0000 0.0 0.0 0.0000 0.1699 0.2523 0.0000 0.0
2012-01-11 0.1463 0.0000 0.3764 0.0000 0.2675 0.1267 0.1544 0.2383 0.1515 0.0000 ... 0.0 0.1238 0.0000 0.0 0.0 0.0000 0.1750 0.2522 0.0000 0.0
2012-01-12 0.1529 0.0000 0.3744 0.0000 0.2643 0.1271 0.1573 0.2332 0.1507 0.0000 ... 0.0 0.1245 0.0000 0.0 0.0 0.0000 0.1728 0.2500 0.0000 0.0
2012-01-13 0.1512 0.0000 0.3726 0.0000 0.2633 0.1279 0.1543 0.2347 0.1507 0.0000 ... 0.0 0.1225 0.0000 0.0 0.0 0.0000 0.1723 0.2483 0.0000 0.0
2012-01-16 0.1496 0.0000 0.3729 0.0000 0.2637 0.1267 0.1570 0.2324 0.1488 0.0000 ... 0.0 0.1208 0.0000 0.0 0.0 0.0000 0.1685 0.2445 0.0000 0.0
2012-01-17 0.1530 0.0000 0.3770 0.0000 0.2615 0.1255 0.1599 0.2323 0.1502 0.0000 ... 0.0 0.1218 0.0000 0.0 0.0 0.0000 0.1665 0.2478 0.0000 0.0
2012-01-18 0.1449 0.0000 0.3726 0.0000 0.2622 0.1247 0.1599 0.2385 0.1504 0.0000 ... 0.0 0.1226 0.0000 0.0 0.0 0.0000 0.1670 0.2469 0.0000 0.0
2012-01-19 0.1479 0.0000 0.3764 0.0000 0.2600 0.1294 0.1581 0.2455 0.1512 0.0000 ... 0.0 0.1248 0.0000 0.0 0.0 0.0000 0.1658 0.2462 0.0000 0.0
2012-01-20 0.1572 0.0000 0.3667 0.0000 0.2610 0.1289 0.1560 0.2445 0.1523 0.0000 ... 0.0 0.1260 0.0000 0.0 0.0 0.0000 0.1651 0.2468 0.0000 0.0
2012-01-30 0.1543 0.0000 0.3669 0.0000 0.2652 0.1285 0.1602 0.2472 0.1525 0.0000 ... 0.0 0.1254 0.0000 0.0 0.0 0.0000 0.1670 0.2486 0.0000 0.0
2012-01-31 0.1558 0.0000 0.3695 0.0000 0.2681 0.1290 0.1597 0.2399 0.1532 0.0000 ... 0.0 0.1232 0.0000 0.0 0.0 0.0000 0.1664 0.2543 0.0000 0.0
2012-02-01 0.1550 0.0000 0.3771 0.0000 0.2672 0.1307 0.1593 0.2398 0.1535 0.0000 ... 0.0 0.1248 0.0000 0.0 0.0 0.0000 0.1651 0.2567 0.0000 0.0
2012-02-02 0.1534 0.0000 0.3764 0.0000 0.2645 0.1293 0.1609 0.2335 0.1555 0.0000 ... 0.0 0.1264 0.0000 0.0 0.0 0.0000 0.1665 0.2569 0.0000 0.0
2012-02-03 0.1521 0.0000 0.3752 0.0000 0.2615 0.1289 0.1593 0.2346 0.1557 0.0000 ... 0.0 0.1259 0.0000 0.0 0.0 0.0000 0.1664 0.2565 0.0000 0.0
2012-02-06 0.1510 0.0000 0.3685 0.0000 0.2600 0.1285 0.1566 0.2308 0.1593 0.0000 ... 0.0 0.1254 0.0000 0.0 0.0 0.0000 0.1736 0.2511 0.0000 0.0
2012-02-07 0.1501 0.0000 0.3635 0.0000 0.2588 0.1272 0.1574 0.2340 0.1568 0.0000 ... 0.0 0.1240 0.0000 0.0 0.0 0.0000 0.1716 0.2498 0.0000 0.0
2012-02-08 0.1511 0.0000 0.3669 0.0000 0.2562 0.1268 0.1573 0.2304 0.1547 0.0000 ... 0.0 0.1235 0.0000 0.0 0.0 0.0000 0.1688 0.2480 0.0000 0.0
2012-02-09 0.1493 0.0000 0.3618 0.0000 0.2570 0.1271 0.1551 0.2331 0.1560 0.0000 ... 0.0 0.1252 0.0000 0.0 0.0 0.0000 0.1702 0.2467 0.0000 0.0
2012-02-10 0.1516 0.0000 0.3605 0.0000 0.2597 0.1259 0.1539 0.2331 0.1567 0.0000 ... 0.0 0.1234 0.0000 0.0 0.0 0.0000 0.1741 0.2467 0.0000 0.0
2012-02-13 0.1518 0.0000 0.3592 0.0000 0.2573 0.1260 0.1555 0.2337 0.1559 0.0000 ... 0.0 0.1231 0.0000 0.0 0.0 0.0000 0.1721 0.2508 0.0000 0.0
2012-02-14 0.1511 0.0000 0.3578 0.0000 0.2601 0.1262 0.1526 0.2289 0.1607 0.0000 ... 0.0 0.1231 0.0000 0.0 0.0 0.0000 0.1736 0.2497 0.0000 0.0
2012-02-15 0.1502 0.0000 0.3573 0.0000 0.2590 0.1272 0.1513 0.2317 0.1584 0.0000 ... 0.0 0.1251 0.0000 0.0 0.0 0.0000 0.1723 0.2492 0.0000 0.0
2012-02-16 0.1499 0.0000 0.3597 0.0000 0.2554 0.1281 0.1496 0.2307 0.1618 0.0000 ... 0.0 0.1241 0.0000 0.0 0.0 0.0000 0.1774 0.2475 0.0000 0.0
2012-02-17 0.1529 0.0000 0.3616 0.0000 0.2555 0.1275 0.1515 0.2288 0.1605 0.0000 ... 0.0 0.1255 0.0000 0.0 0.0 0.0000 0.1758 0.2444 0.0000 0.0
2012-02-20 0.1521 0.0000 0.3592 0.0000 0.2539 0.1298 0.1494 0.2266 0.1583 0.0000 ... 0.0 0.1252 0.0000 0.0 0.0 0.0000 0.1733 0.2429 0.0000 0.0
2012-02-21 0.1518 0.0000 0.3560 0.0000 0.2555 0.1288 0.1487 0.2270 0.1569 0.0000 ... 0.0 0.1238 0.0000 0.0 0.0 0.0000 0.1727 0.2435 0.0000 0.0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2016-11-21 0.0846 0.1798 0.0000 0.1389 0.1233 0.0000 0.0000 0.0934 0.0000 0.2512 ... 0.0 0.0000 0.1317 0.0 0.0 0.2434 0.0000 0.2052 0.1120 0.0
2016-11-22 0.0852 0.1780 0.0000 0.1394 0.1234 0.0000 0.0000 0.0926 0.0000 0.2505 ... 0.0 0.0000 0.1334 0.0 0.0 0.2430 0.0000 0.2056 0.1156 0.0
2016-11-23 0.0860 0.1773 0.0000 0.1400 0.1227 0.0000 0.0000 0.0906 0.0000 0.2497 ... 0.0 0.0000 0.1393 0.0 0.0 0.2412 0.0000 0.2052 0.1217 0.0
2016-11-24 0.0864 0.1722 0.0000 0.1389 0.1231 0.0000 0.0000 0.0902 0.0000 0.2484 ... 0.0 0.0000 0.1424 0.0 0.0 0.2423 0.0000 0.2073 0.1192 0.0
2016-11-25 0.0867 0.1740 0.0000 0.1378 0.1258 0.0000 0.0000 0.0903 0.0000 0.2480 ... 0.0 0.0000 0.1455 0.0 0.0 0.2426 0.0000 0.2096 0.1158 0.0
2016-11-28 0.0899 0.1713 0.0000 0.1375 0.1240 0.0000 0.0000 0.0890 0.0000 0.2451 ... 0.0 0.0000 0.1458 0.0 0.0 0.2415 0.0000 0.2074 0.1146 0.0
2016-11-29 0.0890 0.1682 0.0000 0.1383 0.1239 0.0000 0.0000 0.0897 0.0000 0.2535 ... 0.0 0.0000 0.1464 0.0 0.0 0.2409 0.0000 0.2067 0.1151 0.0
2016-11-30 0.0919 0.1700 0.0000 0.1381 0.1255 0.0000 0.0000 0.0876 0.0000 0.2519 ... 0.0 0.0000 0.1431 0.0 0.0 0.2427 0.0000 0.2100 0.1132 0.0
2016-12-01 0.0909 0.1650 0.0000 0.1432 0.1255 0.0000 0.0000 0.0865 0.0000 0.2490 ... 0.0 0.0000 0.1419 0.0 0.0 0.2440 0.0000 0.2067 0.1115 0.0
2016-12-02 0.0922 0.1653 0.0000 0.1420 0.1245 0.0000 0.0000 0.0871 0.0000 0.2465 ... 0.0 0.0000 0.1435 0.0 0.0 0.2425 0.0000 0.2050 0.1118 0.0
2016-12-05 0.0892 0.1644 0.0000 0.1399 0.1230 0.0000 0.0000 0.0870 0.0000 0.2499 ... 0.0 0.0000 0.1427 0.0 0.0 0.2462 0.0000 0.2044 0.1108 0.0
2016-12-06 0.0896 0.1598 0.0000 0.1376 0.1242 0.0000 0.0000 0.0871 0.0000 0.2505 ... 0.0 0.0000 0.1420 0.0 0.0 0.2476 0.0000 0.2060 0.1108 0.0
2016-12-07 0.0890 0.1597 0.0000 0.1370 0.1231 0.0000 0.0000 0.0885 0.0000 0.2486 ... 0.0 0.0000 0.1423 0.0 0.0 0.2474 0.0000 0.2057 0.1110 0.0
2016-12-08 0.0931 0.1632 0.0000 0.1375 0.1227 0.0000 0.0000 0.0903 0.0000 0.2467 ... 0.0 0.0000 0.1454 0.0 0.0 0.2449 0.0000 0.2053 0.1109 0.0
2016-12-09 0.0936 0.1625 0.0000 0.1362 0.1235 0.0000 0.0000 0.0890 0.0000 0.2531 ... 0.0 0.0000 0.1440 0.0 0.0 0.2459 0.0000 0.2078 0.1101 0.0
2016-12-12 0.0000 0.1578 0.0000 0.1314 0.1199 0.0000 0.0000 0.0846 0.0000 0.2535 ... 0.0 0.0000 0.1411 0.0 0.0 0.2385 0.0000 0.2026 0.1051 0.0
2016-12-13 0.0000 0.1559 0.0000 0.1286 0.1186 0.0000 0.0000 0.0824 0.0000 0.2576 ... 0.0 0.0000 0.1421 0.0 0.0 0.2486 0.0000 0.2060 0.1042 0.0
2016-12-14 0.0000 0.1559 0.0000 0.1289 0.1201 0.0000 0.0000 0.0851 0.0000 0.2564 ... 0.0 0.0000 0.1434 0.0 0.0 0.2475 0.0000 0.2113 0.1028 0.0
2016-12-15 0.0000 0.1556 0.0000 0.1290 0.1203 0.0000 0.0000 0.0842 0.0000 0.2528 ... 0.0 0.0000 0.1413 0.0 0.0 0.2490 0.0000 0.2125 0.1035 0.0
2016-12-16 0.0000 0.1604 0.0000 0.1289 0.1198 0.0000 0.0000 0.0838 0.0000 0.2637 ... 0.0 0.0000 0.1429 0.0 0.0 0.2474 0.0000 0.2130 0.1034 0.0
2016-12-19 0.0000 0.1610 0.0000 0.1295 0.1209 0.0000 0.0000 0.0844 0.0000 0.2697 ... 0.0 0.0000 0.1415 0.0 0.0 0.2459 0.0000 0.2109 0.1040 0.0
2016-12-20 0.0000 0.1584 0.0000 0.1280 0.1206 0.0000 0.0000 0.0846 0.0000 0.2696 ... 0.0 0.0000 0.1444 0.0 0.0 0.2458 0.0000 0.2136 0.1039 0.0
2016-12-21 0.0000 0.1601 0.0000 0.1289 0.1198 0.0000 0.0000 0.0832 0.0000 0.2671 ... 0.0 0.0000 0.1444 0.0 0.0 0.2465 0.0000 0.2130 0.1035 0.0
2016-12-22 0.0000 0.1598 0.0000 0.1288 0.1199 0.0000 0.0000 0.0828 0.0000 0.2653 ... 0.0 0.0000 0.1458 0.0 0.0 0.2448 0.0000 0.2123 0.1026 0.0
2016-12-23 0.0000 0.1594 0.0000 0.1283 0.1203 0.0000 0.0000 0.0875 0.0000 0.2713 ... 0.0 0.0000 0.1529 0.0 0.0 0.2450 0.0000 0.2101 0.1025 0.0
2016-12-26 0.0000 0.1434 0.0000 0.1280 0.1230 0.0000 0.0000 0.0859 0.0000 0.2746 ... 0.0 0.0000 0.1544 0.0 0.0 0.2474 0.0000 0.2086 0.1026 0.0
2016-12-27 0.0000 0.1451 0.0000 0.1291 0.1246 0.0000 0.0000 0.0868 0.0000 0.2738 ... 0.0 0.0000 0.1506 0.0 0.0 0.2470 0.0000 0.2076 0.1035 0.0
2016-12-28 0.0000 0.1453 0.0000 0.1292 0.1257 0.0000 0.0000 0.0872 0.0000 0.2814 ... 0.0 0.0000 0.1497 0.0 0.0 0.2472 0.0000 0.2097 0.1029 0.0
2016-12-29 0.0000 0.1457 0.0000 0.1285 0.1252 0.0000 0.0000 0.0863 0.0000 0.2786 ... 0.0 0.0000 0.1497 0.0 0.0 0.2479 0.0000 0.2116 0.1033 0.0
2016-12-30 0.0000 0.1479 0.0000 0.1297 0.1262 0.0000 0.0000 0.0867 0.0000 0.2731 ... 0.0 0.0000 0.1561 0.0 0.0 0.2486 0.0000 0.2133 0.1057 0.0

1214 rows × 1071 columns


In [1310]:
riskExposureDF = pd.concat(map(lambda x: x.iloc[-1], factordic .values()), axis=1)

In [1344]:
factordic .values()[3].iloc[-1].head()


Out[1344]:
600507.SH    0.116149
002344.SZ   -0.233700
000793.SZ    0.247426
300039.SZ   -0.350758
600059.SH   -0.355085
Name: 2016-12-30 00:00:00, dtype: float64

In [1328]:
# note that dictionary is not  used in the given order, so make sure keys pair the values!
factordic.keys()


Out[1328]:
['YOYBPS', 'LFCA', 'PB', 'AMOUNTAVG1MData', 'PROFITOOP', 'TURNOVER1M']

In [1341]:
riskExposureDF.columns= factordic.keys()

In [1359]:
riskExposureDF.head()


Out[1359]:
YOYBPS LFCA PB AMOUNTAVG1MData PROFITOOP TURNOVER1M
600507.SH 0.340788 -0.469033 -0.029513 0.116149 0.022185 0.396599
002344.SZ 0.146407 -0.094015 -0.033699 -0.233700 0.475590 -0.224775
000793.SZ 0.103897 0.469627 -0.032676 0.247426 0.328214 0.206770
300039.SZ 0.148159 -0.867833 -0.028938 -0.350758 0.231069 -0.123416
600059.SH 0.038965 -0.560382 -0.033503 -0.355085 0.037209 -0.329140

In [1708]:
## Only conserve the diagonal element 
spEwmMatrix = calEWMcovariance(specificReturn[-200:],decay=0.94)
tempo = spEwmMatrix .copy()
digVal = np.diag(spEwmMatrix)
a = np.fill_diagonal(tempo.values ,0)
finalSpMat = spEwmMatrix -tempo

In [1709]:
finalSpMat.head()


Out[1709]:
600507.SH 002344.SZ 000793.SZ 300039.SZ 600059.SH 600501.SH 000713.SZ 002233.SZ 600360.SH 600565.SH ... 600150.SH 600469.SH 600282.SH 600739.SH 600406.SH 600687.SH 600866.SH 000860.SZ 601908.SH 002195.SZ
600507.SH 0.000776 0.000000 0.000000 0.000000 0.000000 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
002344.SZ 0.000000 0.000232 0.000000 0.000000 0.000000 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
000793.SZ 0.000000 0.000000 0.000292 0.000000 0.000000 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
300039.SZ 0.000000 0.000000 0.000000 0.000068 0.000000 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
600059.SH 0.000000 0.000000 0.000000 0.000000 0.000076 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0

5 rows × 1071 columns


In [1734]:
# calculate monthly specific risk of the market index
alphaSP =  reduce(lambda x,y: x.dot(y),[benchmarkWeight.iloc[-1], finalSpMat, benchmarkWeight.iloc[-1].T ])

In [1735]:
alphaSP


Out[1735]:
0.0056262019909718306

In [1736]:
# calculate total variance of the market index
alphaM = reduce(lambda x,y: x.dot(y),[benchmarkWeight.iloc[-1], riskExposureDF, ewmMatrix, riskExposureDF.T, benchmarkWeight.iloc[-1].T ])+alphaSP

In [1737]:
alphaM


Out[1737]:
0.0068822011027059246

In [1738]:
ewmMatrix


Out[1738]:
LFCA PB YOYBPS AMOUNTAVG1MData TURNOVER1M PROFITOOP
LFCA 1.762443e-07 5.634039e-06 -6.009490e-07 -4.492347e-07 -1.102177e-06 2.088250e-08
PB 5.634039e-06 2.066807e-04 -2.181768e-05 -1.545421e-05 -3.750233e-05 7.431083e-07
YOYBPS -6.009490e-07 -2.181768e-05 2.305524e-06 1.639584e-06 3.981940e-06 -7.862712e-08
AMOUNTAVG1MData -4.492347e-07 -1.545421e-05 1.639584e-06 1.190497e-06 2.903686e-06 -5.634254e-08
TURNOVER1M -1.102177e-06 -3.750233e-05 3.981940e-06 2.903686e-06 7.088528e-06 -1.370613e-07
PROFITOOP 2.088250e-08 7.431083e-07 -7.862712e-08 -5.634254e-08 -1.370613e-07 2.689893e-09

In [1739]:
# can not use np.dot on two series to construct a matrix 
benchmarkWeightDF = pd.DataFrame(benchmarkWeight.iloc[-1])

In [1741]:
lastPart =  reduce(lambda x,y: x.dot(y),[ewmMatrix, riskExposureDF.T, benchmarkWeightDF, \
                                         benchmarkWeightDF.T, riskExposureDF,ewmMatrix ])
lastPart


Out[1741]:
LFCA PB YOYBPS AMOUNTAVG1MData TURNOVER1M PROFITOOP
LFCA 1.893724e-10 7.009437e-09 -7.394211e-10 -5.219816e-10 -1.265786e-09 2.515478e-11
PB 7.009437e-09 2.594476e-07 -2.736896e-08 -1.932065e-08 -4.685187e-08 9.310801e-10
YOYBPS -7.394211e-10 -2.736896e-08 2.887135e-09 2.038123e-09 4.942374e-09 -9.821906e-11
AMOUNTAVG1MData -5.219816e-10 -1.932065e-08 2.038123e-09 1.438778e-09 3.488984e-09 -6.933606e-11
TURNOVER1M -1.265786e-09 -4.685187e-08 4.942374e-09 3.488984e-09 8.460660e-09 -1.681374e-10
PROFITOOP 2.515478e-11 9.310801e-10 -9.821906e-11 -6.933606e-11 -1.681374e-10 3.341369e-12

In [1758]:
finalCovMatrix = ewmMatrix + ((alphaS - alphaM)/(alphaS - alphaSP)) * lastPart
finalCovMatrix


Out[1758]:
LFCA PB YOYBPS AMOUNTAVG1MData TURNOVER1M PROFITOOP
LFCA 1.764777e-07 5.642676e-06 -6.018602e-07 -4.498780e-07 -1.103736e-06 2.091350e-08
PB 5.642676e-06 2.070004e-04 -2.185141e-05 -1.547802e-05 -3.756006e-05 7.442557e-07
YOYBPS -6.018602e-07 -2.185141e-05 2.309082e-06 1.642096e-06 3.988031e-06 -7.874815e-08
AMOUNTAVG1MData -4.498780e-07 -1.547802e-05 1.642096e-06 1.192270e-06 2.907985e-06 -5.642798e-08
TURNOVER1M -1.103736e-06 -3.756006e-05 3.988031e-06 2.907985e-06 7.098954e-06 -1.372685e-07
PROFITOOP 2.091350e-08 7.442557e-07 -7.874815e-08 -5.642798e-08 -1.372685e-07 2.694010e-09

In [1813]:
stocks = pd.read_csv(path+ZZ500Weight,infer_datetime_format=True,parse_dates=[0],index_col=0)[stkPool].loc[startTime:endTime].iloc[-1].dropna()

optStkPool = stocks.index.tolist()

riskExposureDFSlice = riskExposureDF.loc[optStkPool]

In [1814]:
# final covriance to optimize
toOptCov = reduce(lambda x,y: x.dot(y),[riskExposureDFSlice,finalCovMatrix,riskExposureDFSlice.T])

In [1815]:
toOptCov


Out[1815]:
002344.SZ 300039.SZ 600059.SH 002233.SZ 600565.SH 600801.SH 000528.SZ 000723.SZ 000685.SZ 002431.SZ ... 000012.SZ 600022.SH 002437.SZ 600073.SH 600525.SH 600122.SH 600282.SH 600687.SH 000860.SZ 601908.SH
002344.SZ 3.510169e-08 -3.272505e-08 7.986614e-08 -1.878550e-08 -5.913683e-07 3.429871e-08 8.368185e-08 -3.130485e-07 1.126379e-07 -1.306778e-07 ... -7.810697e-07 -1.832812e-08 5.037155e-07 -3.829681e-08 3.181988e-07 -2.349386e-07 -2.028958e-07 4.124120e-07 -2.239477e-07 2.492116e-07
300039.SZ -3.272505e-08 7.313947e-08 -1.309054e-07 4.625036e-08 1.105586e-06 -4.880696e-08 -1.385531e-07 5.631090e-07 -1.892288e-07 1.869038e-07 ... 1.460498e-06 7.822929e-08 -9.683517e-07 9.695614e-08 -5.549034e-07 4.639757e-07 4.057849e-07 -7.260637e-07 4.557881e-07 -4.287810e-07
600059.SH 7.986614e-08 -1.309054e-07 2.569433e-07 -8.070319e-08 -2.082284e-06 1.006386e-07 2.710843e-07 -1.072368e-06 3.683434e-07 -3.832332e-07 ... -2.750715e-06 -1.231887e-07 1.809497e-06 -1.685144e-07 1.067285e-06 -8.601997e-07 -7.496606e-07 1.392362e-06 -8.379748e-07 8.281741e-07
002233.SZ -1.878550e-08 4.625036e-08 -8.070319e-08 2.944145e-08 6.895780e-07 -2.964296e-08 -8.549451e-08 3.502168e-07 -1.169497e-07 1.138499e-07 ... 9.109339e-07 5.092715e-08 -6.052156e-07 6.173454e-08 -3.441273e-07 2.906049e-07 2.543937e-07 -4.506466e-07 2.861003e-07 -2.656008e-07
600565.SH -5.913683e-07 1.105586e-06 -2.082284e-06 6.895780e-07 1.718606e-05 -7.985186e-07 -2.200003e-06 8.806224e-06 -2.995836e-06 3.046095e-06 ... 2.270317e-05 1.106849e-06 -1.498848e-05 1.443190e-06 -8.726368e-06 7.150511e-06 6.241698e-06 -1.139924e-05 6.992445e-06 -6.758728e-06
600801.SH 3.429871e-08 -4.880696e-08 1.006386e-07 -2.964296e-08 -7.985186e-07 4.036271e-08 1.060100e-07 -4.135794e-07 1.436663e-07 -1.532106e-07 ... -1.054855e-06 -4.239021e-08 6.910559e-07 -6.178122e-08 4.137497e-07 -3.271235e-07 -2.845441e-07 5.389537e-07 -3.172336e-07 3.217399e-07
000528.SZ 8.368185e-08 -1.385531e-07 2.710843e-07 -8.549451e-08 -2.200003e-06 1.060100e-07 2.860365e-07 -1.132507e-06 3.887173e-07 -4.036586e-07 ... -2.906234e-06 -1.310940e-07 1.912377e-06 -1.785791e-07 1.126773e-06 -9.093582e-07 -7.926059e-07 1.470120e-06 -8.861414e-07 8.742055e-07
000723.SZ -3.130485e-07 5.631090e-07 -1.072368e-06 3.502168e-07 8.806224e-06 -4.135794e-07 -1.132507e-06 4.519639e-06 -1.541464e-06 1.578998e-06 ... 1.163300e-05 5.535130e-07 -7.671558e-06 7.318157e-07 -4.483610e-06 3.656356e-06 3.190141e-06 -5.854771e-06 3.571545e-06 -3.474499e-06
000685.SZ 1.126379e-07 -1.892288e-07 3.683434e-07 -1.169497e-07 -2.995836e-06 1.436663e-07 3.887173e-07 -1.541464e-06 5.284395e-07 -5.475916e-07 ... -3.957506e-06 -1.801980e-07 2.605073e-06 -2.442073e-07 1.532771e-06 -1.239282e-06 -1.080360e-06 2.000139e-06 -1.208145e-06 1.188950e-06
002431.SZ -1.306778e-07 1.869038e-07 -3.832332e-07 1.138499e-07 3.046095e-06 -1.532106e-07 -4.036586e-07 1.578998e-06 -5.475916e-07 5.859712e-07 ... 4.023557e-06 1.612877e-07 -2.634941e-06 2.359247e-07 -1.578092e-06 1.247832e-06 1.085396e-06 -2.055823e-06 1.210025e-06 -1.227082e-06
002038.SZ 2.231891e-07 -3.835957e-07 7.411163e-07 -2.375954e-07 -6.047422e-06 2.879588e-07 7.822984e-07 -3.109005e-06 1.063946e-06 -1.098341e-06 ... -7.988635e-06 -3.692509e-07 5.261812e-06 -4.962008e-07 3.088977e-06 -2.504748e-06 -2.184166e-06 4.031799e-06 -2.443445e-06 2.395293e-06
000636.SZ 1.689030e-08 -2.403207e-08 4.969653e-08 -1.456959e-08 -3.940252e-07 1.996693e-08 5.235397e-08 -2.039174e-07 7.090241e-08 -7.536777e-08 ... -5.205500e-07 -2.102451e-08 3.411555e-07 -3.049989e-08 2.041247e-07 -1.614587e-07 -1.404520e-07 2.658872e-07 -1.566048e-07 1.587292e-07
000513.SZ 9.072315e-08 -1.086947e-07 2.382775e-07 -6.482176e-08 -1.841534e-06 9.812053e-08 2.504463e-07 -9.623993e-07 3.386762e-07 -3.746009e-07 ... -2.432394e-06 -8.188253e-08 1.583554e-06 -1.335872e-07 9.682909e-07 -7.455750e-07 -6.467654e-07 1.258870e-06 -7.183222e-07 7.550720e-07
300291.SZ 2.659873e-08 1.010779e-08 1.396991e-08 9.233136e-09 7.663020e-09 1.199430e-08 1.348222e-08 -1.448017e-08 1.601942e-08 -4.592215e-08 ... 1.042058e-08 3.653127e-08 -2.873995e-08 2.132159e-08 2.874622e-08 2.343343e-08 2.442944e-08 3.164879e-08 3.348817e-08 2.728685e-08
600640.SH 2.089477e-07 -3.687437e-07 7.067734e-07 -2.288853e-07 -5.787878e-06 2.735158e-07 7.462693e-07 -2.972253e-06 1.015301e-06 -1.042841e-06 ... -7.645862e-06 -3.597151e-07 5.039928e-06 -4.784827e-07 2.950742e-06 -2.400777e-06 -2.094200e-06 3.852377e-06 -2.343873e-06 2.287238e-06
000926.SZ 5.326837e-08 -1.015791e-07 1.905246e-07 -6.339763e-08 -1.575861e-06 7.292353e-08 2.013485e-07 -8.065232e-07 2.741551e-07 -2.772469e-07 ... -2.081839e-06 -1.029076e-07 1.375424e-06 -1.330423e-07 7.990023e-07 -6.564150e-07 -5.731355e-07 1.043913e-06 -6.423114e-07 6.186717e-07
000960.SZ -1.453834e-07 2.952043e-07 -5.430712e-07 1.852732e-07 4.530345e-06 -2.056588e-07 -5.742724e-07 2.314186e-06 -7.829298e-07 7.844945e-07 ... 5.984802e-06 3.058601e-07 -3.959664e-06 3.885206e-07 -2.287558e-06 1.892832e-06 1.653812e-06 -2.990543e-06 1.855123e-06 -1.769790e-06
600522.SH 1.688858e-07 -3.316767e-07 6.160844e-07 -2.076185e-07 -5.117138e-06 2.345403e-07 6.512611e-07 -2.616934e-06 8.874070e-07 -8.940733e-07 ... -6.759985e-06 -3.392912e-07 4.468897e-06 -4.352314e-07 2.589535e-06 -2.134504e-06 -1.864278e-06 3.384265e-06 -2.090172e-06 2.004302e-06
002019.SZ -2.037130e-08 -1.407253e-08 -1.831093e-09 -1.124944e-08 -9.104932e-08 -6.371814e-09 -8.067964e-10 -3.012095e-08 7.882909e-10 2.576790e-08 ... -1.206516e-07 -3.758714e-08 9.910611e-08 -2.570129e-08 1.768473e-08 -5.564436e-08 -5.206270e-08 2.822052e-08 -6.370751e-08 9.315245e-09
000572.SZ -2.685515e-07 5.136140e-07 -9.608485e-07 3.209423e-07 7.954373e-06 -3.671518e-07 -1.015411e-06 4.072459e-06 -1.383225e-06 1.400940e-06 ... 1.050793e-05 5.191544e-07 -6.941357e-06 6.719450e-07 -4.032633e-06 3.313405e-06 2.893040e-06 -5.268967e-06 3.242176e-06 -3.122378e-06
600850.SH 2.831760e-07 -5.300604e-07 9.982666e-07 -3.305866e-07 -8.239796e-06 3.828247e-07 1.054726e-06 -4.221579e-06 1.436186e-06 -1.459448e-06 ... -1.088504e-05 -5.312780e-07 7.186740e-06 -6.921793e-07 4.183405e-06 -3.428588e-06 -2.992882e-06 5.464820e-06 -3.352966e-06 3.240065e-06
600266.SH 4.548792e-08 -5.031809e-08 1.139302e-07 -2.968368e-08 -8.689471e-07 4.754352e-08 1.196302e-07 -4.559293e-07 1.615462e-07 -1.814405e-07 ... -1.147728e-06 -3.505098e-08 7.450444e-07 -6.097050e-08 4.601541e-07 -3.497918e-07 -3.030252e-07 5.976726e-07 -3.359262e-07 3.593125e-07
600586.SH 5.697725e-08 -9.319130e-08 1.831673e-07 -5.741807e-08 -1.483677e-06 7.179870e-08 1.932478e-07 -7.640142e-07 2.625290e-07 -2.730325e-07 ... -1.959983e-06 -8.773341e-08 1.289369e-06 -1.200056e-07 7.605551e-07 -6.128738e-07 -5.341090e-07 9.921789e-07 -5.970237e-07 5.901800e-07
600835.SH 1.956348e-07 -3.214546e-07 6.299256e-07 -1.983194e-07 -5.107910e-06 2.464939e-07 6.645942e-07 -2.630880e-06 9.032534e-07 -9.402421e-07 ... -6.747460e-06 -3.023316e-07 4.438499e-06 -4.136318e-07 2.617732e-06 -2.110250e-06 -1.839102e-06 3.415165e-06 -2.055787e-06 2.031197e-06
600298.SH 2.791553e-07 -5.545997e-07 1.026875e-06 -3.474475e-07 -8.541616e-06 3.902594e-07 1.085639e-06 -4.366290e-06 1.479508e-06 -1.487496e-06 ... -1.128393e-05 -5.700744e-07 7.461864e-06 -7.286079e-07 4.319156e-06 -3.565030e-06 -3.114115e-06 5.645308e-06 -3.492070e-06 3.342515e-06
002640.SZ 2.537650e-07 -4.529509e-07 8.650813e-07 -2.814385e-07 -7.095465e-06 3.341621e-07 9.135340e-07 -3.642203e-06 1.243109e-06 -1.274361e-06 ... -9.373201e-06 -4.441398e-07 6.180406e-06 -5.884276e-07 3.614465e-06 -2.944944e-06 -2.569229e-06 4.719442e-06 -2.876076e-06 2.801269e-06
601777.SH -4.242305e-07 8.006377e-07 -1.503750e-06 4.997504e-07 1.242670e-05 -5.758170e-07 -1.588923e-06 6.365234e-06 -2.164009e-06 2.196652e-06 ... 1.641598e-05 8.048310e-07 -1.084043e-05 1.046123e-06 -6.305669e-06 5.172846e-06 4.515886e-06 -8.237827e-06 5.059820e-06 -4.883222e-06
000547.SZ 4.230441e-07 -7.613551e-07 1.450437e-06 -4.733926e-07 -1.190998e-05 5.595438e-07 1.531811e-06 -6.111612e-06 2.084711e-06 -2.133993e-06 ... -1.573325e-05 -7.493856e-07 1.037637e-05 -9.899388e-07 6.063466e-06 -4.945376e-06 -4.314875e-06 7.917768e-06 -4.830870e-06 4.698741e-06
300113.SZ 1.518737e-07 -3.072412e-07 5.661010e-07 -1.927193e-07 -4.719504e-06 2.145824e-07 5.986122e-07 -2.410799e-06 8.159638e-07 -8.176116e-07 ... -6.234765e-06 -3.181996e-07 4.124932e-06 -4.043934e-07 2.383590e-06 -1.971582e-06 -1.722564e-06 3.115961e-06 -1.932170e-06 1.844174e-06
600418.SH -9.870201e-08 2.285480e-07 -4.061504e-07 1.447085e-07 3.442656e-06 -1.508636e-07 -4.300508e-07 1.750513e-06 -5.873459e-07 5.754291e-07 ... 4.548041e-06 2.482207e-07 -3.018650e-06 3.043068e-07 -1.724031e-06 1.447257e-06 1.266237e-06 -2.256442e-06 1.423040e-06 -1.331598e-06
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
600397.SH 9.997290e-08 -2.012558e-07 3.716051e-07 -1.261424e-07 -3.095415e-06 1.410377e-07 3.929355e-07 -1.581162e-06 5.354722e-07 -5.365458e-07 ... -4.089309e-06 -2.083352e-07 2.705409e-06 -2.649293e-07 1.563790e-06 -1.292874e-06 -1.129533e-06 2.044163e-06 -1.266914e-06 1.209974e-06
600478.SH 3.656662e-07 -7.046398e-07 1.315845e-06 -4.404714e-07 -1.090275e-05 5.023529e-07 1.390694e-06 -5.579824e-06 1.894481e-06 -1.915342e-06 ... -1.440297e-05 -7.150479e-07 9.516694e-06 -9.228363e-07 5.524437e-06 -4.543440e-06 -3.967391e-06 7.218616e-06 -4.446772e-06 4.277009e-06
600422.SH 2.200489e-07 -4.424777e-07 8.166738e-07 -2.774209e-07 -6.803216e-06 3.098514e-07 8.635222e-07 -3.475936e-06 1.176952e-06 -1.180535e-06 ... -8.987477e-06 -4.571946e-07 5.945240e-06 -5.820721e-07 3.437335e-06 -2.841216e-06 -2.482193e-06 4.493223e-06 -2.783983e-06 2.659664e-06
601233.SH -1.858801e-07 3.854500e-07 -7.050545e-07 2.422670e-07 5.897067e-06 -2.661725e-07 -7.457247e-07 3.009995e-06 -1.016961e-06 1.015200e-06 ... 7.790353e-06 4.026576e-07 -5.157015e-06 5.083159e-07 -2.973588e-06 2.466403e-06 2.155450e-06 -3.888133e-06 2.418589e-06 -2.299912e-06
600859.SH 4.202504e-07 -7.712709e-07 1.460930e-06 -4.802872e-07 -1.202730e-05 5.619330e-07 1.543226e-06 -6.166881e-06 2.100788e-06 -2.142557e-06 ... -1.588835e-05 -7.661777e-07 1.048445e-05 -1.005034e-06 6.114740e-06 -4.999354e-06 -4.363008e-06 7.986230e-06 -4.886360e-06 4.737181e-06
002439.SZ 9.369028e-08 -1.512570e-07 2.981305e-07 -9.316033e-08 -2.411340e-06 1.169962e-07 3.144768e-07 -1.242862e-06 4.272784e-07 -4.461735e-07 ... -3.185333e-06 -1.409519e-07 2.094262e-06 -1.942358e-07 1.237401e-06 -9.952037e-07 -8.671327e-07 1.614053e-06 -9.689923e-07 9.603943e-07
002353.SZ -5.098818e-07 9.575844e-07 -1.801143e-06 5.974780e-07 1.487458e-05 -6.902256e-07 -1.903061e-06 7.620475e-06 -2.591647e-06 2.632967e-06 ... 1.964968e-05 9.605923e-07 -1.297418e-05 1.250586e-06 -7.550329e-06 6.190258e-06 5.403775e-06 -9.863407e-06 6.054188e-06 -5.847500e-06
300136.SZ 4.322776e-08 -9.990596e-08 1.776470e-07 -6.324568e-08 -1.505405e-06 6.601014e-08 1.880979e-07 -7.654900e-07 2.568826e-07 -2.517179e-07 ... -1.988772e-06 -1.084625e-07 1.319958e-06 -1.330134e-07 7.539668e-07 -6.328079e-07 -5.536499e-07 9.867878e-07 -6.221940e-07 5.823580e-07
000937.SZ -2.387296e-07 4.787115e-07 -8.838501e-07 3.001493e-07 7.361159e-06 -3.353748e-07 -9.345122e-07 3.761809e-06 -1.273793e-06 1.278945e-06 ... 9.724446e-06 4.936817e-07 -6.431938e-06 6.293518e-07 -3.719997e-06 3.073706e-06 2.685209e-06 -4.862614e-06 3.011501e-06 -2.878483e-06
600790.SH -9.987432e-07 1.871466e-06 -3.522472e-06 1.167470e-06 2.908122e-05 -1.350350e-06 -3.721705e-06 1.489997e-05 -5.068143e-06 5.150922e-06 ... 3.841700e-05 1.875567e-06 -2.536427e-05 2.443565e-06 -1.476389e-05 1.210114e-05 1.056339e-05 -1.928646e-05 1.183440e-05 -1.143454e-05
600079.SH 1.311555e-07 -1.817775e-07 3.772500e-07 -1.102927e-07 -2.983518e-06 1.516773e-07 3.972203e-07 -1.548392e-06 5.384664e-07 -5.790774e-07 ... -3.940954e-06 -1.538790e-07 2.578530e-06 -2.286147e-07 1.549523e-06 -1.219851e-06 -1.060591e-06 2.017888e-06 -1.181662e-06 1.205458e-06
600160.SH 1.028986e-07 -1.325458e-07 2.825670e-07 -7.975716e-08 -2.209386e-06 1.149758e-07 2.972621e-07 -1.150590e-06 4.024813e-07 -4.389878e-07 ... -2.918332e-06 -1.062040e-07 1.904739e-06 -1.648519e-07 1.154484e-06 -8.989857e-07 -7.807460e-07 1.502203e-06 -8.685296e-07 8.991913e-07
600536.SH -7.102924e-08 1.325970e-07 -2.497039e-07 8.271975e-08 2.060848e-06 -9.574177e-08 -2.638122e-07 1.056206e-06 -3.592855e-07 3.656429e-07 ... 2.722391e-06 1.325078e-07 -1.797107e-06 1.729819e-07 -1.046551e-06 8.573442e-07 7.483542e-07 -1.367096e-06 8.383340e-07 -8.105902e-07
002572.SZ 1.649172e-07 -2.325905e-07 4.796995e-07 -1.413912e-07 -3.803889e-06 1.923188e-07 5.051974e-07 -1.972586e-06 6.850362e-07 -7.342717e-07 ... -5.024610e-06 -1.992749e-07 3.289418e-06 -2.932491e-07 1.972795e-06 -1.557004e-06 -1.354074e-06 2.569596e-06 -1.509180e-06 1.534322e-06
600088.SH 2.159165e-07 -3.964397e-07 7.509470e-07 -2.468590e-07 -6.182368e-06 2.888556e-07 7.932566e-07 -3.169765e-06 1.079823e-06 -1.101011e-06 ... -8.167091e-06 -3.940285e-07 5.389489e-06 -5.166855e-07 3.143025e-06 -2.569899e-06 -2.242808e-06 4.104996e-06 -2.511866e-06 2.434932e-06
600497.SH -8.829450e-07 1.625719e-06 -3.075907e-06 1.012735e-06 2.533506e-05 -1.182382e-06 -3.249273e-06 1.298926e-05 -4.423616e-06 4.509852e-06 ... 3.346812e-05 1.616796e-06 -2.208648e-05 2.118878e-06 -1.287767e-05 1.053263e-05 9.192318e-06 -1.681960e-05 1.029541e-05 -9.976081e-06
600967.SH -1.900229e-07 3.609776e-07 -6.766143e-07 2.254485e-07 5.596411e-06 -2.588078e-07 -7.149849e-07 2.865984e-06 -9.738842e-07 9.875588e-07 ... 7.392988e-06 3.638032e-07 -4.882799e-06 4.719264e-07 -2.838527e-06 2.330379e-06 2.034565e-06 -3.708533e-06 2.279858e-06 -2.198011e-06
600195.SH 8.842922e-08 -1.444883e-07 2.838326e-07 -8.906226e-08 -2.299302e-06 1.112109e-07 2.994409e-07 -1.184350e-06 4.068736e-07 -4.236654e-07 ... -3.037381e-06 -1.356831e-07 1.997836e-06 -1.858976e-07 1.178808e-06 -9.496639e-07 -8.275920e-07 1.537807e-06 -9.250268e-07 9.147545e-07
000998.SZ -6.645823e-07 1.326040e-06 -2.451845e-06 8.310852e-07 2.040689e-05 -9.310902e-07 -2.592257e-06 1.043038e-05 -3.533092e-06 3.550191e-06 ... 2.695851e-05 1.364940e-06 -1.782878e-05 1.742575e-06 -1.031609e-05 8.518988e-06 7.441817e-06 -1.348410e-05 8.345522e-06 -7.982975e-06
002327.SZ -1.159658e-07 2.188138e-07 -4.106687e-07 1.366404e-07 3.394371e-06 -1.571707e-07 -4.339173e-07 1.739056e-06 -5.910811e-07 6.005758e-07 ... 4.483963e-06 2.195799e-07 -2.960707e-06 2.857119e-07 -1.722500e-06 1.412869e-06 1.233409e-06 -2.250317e-06 1.381933e-06 -1.333941e-06
000012.SZ -7.810697e-07 1.460498e-06 -2.750715e-06 9.109339e-07 2.270317e-05 -1.054855e-06 -2.906234e-06 1.163300e-05 -3.957506e-06 4.023557e-06 ... 2.999144e-05 1.462415e-06 -1.980035e-05 1.906585e-06 -1.152756e-05 9.446109e-06 8.245553e-06 -1.505845e-05 9.237366e-06 -8.928280e-06
600022.SH -1.832812e-08 7.822929e-08 -1.231887e-07 5.092715e-08 1.106849e-06 -4.239021e-08 -1.310940e-07 5.535130e-07 -1.801980e-07 1.612877e-07 ... 1.462415e-06 9.784938e-08 -9.816196e-07 1.081454e-07 -5.380084e-07 4.754199e-07 4.179325e-07 -7.071310e-07 4.726919e-07 -4.130044e-07
002437.SZ 5.037155e-07 -9.683517e-07 1.809497e-06 -6.052156e-07 -1.498848e-05 6.910559e-07 1.912377e-06 -7.671558e-06 2.605073e-06 -2.634941e-06 ... -1.980035e-05 -9.816196e-07 1.308213e-05 -1.267882e-06 7.595915e-06 -6.245288e-06 -5.453313e-06 9.925134e-06 -6.112008e-06 5.880933e-06
600073.SH -3.829681e-08 9.695614e-08 -1.685144e-07 6.173454e-08 1.443190e-06 -6.178122e-08 -1.785791e-07 7.318157e-07 -2.442073e-07 2.359247e-07 ... 1.906585e-06 1.081454e-07 -1.267882e-06 1.299472e-07 -7.189838e-07 6.090126e-07 5.332869e-07 -9.417149e-07 6.000120e-07 -5.547381e-07
600525.SH 3.181988e-07 -5.549034e-07 1.067285e-06 -3.441273e-07 -8.726368e-06 4.137497e-07 1.126773e-06 -4.483610e-06 1.532771e-06 -1.578092e-06 ... -1.152756e-05 -5.380084e-07 7.595915e-06 -7.189838e-07 4.452672e-06 -3.617236e-06 -3.154842e-06 5.812565e-06 -3.530232e-06 3.452029e-06
600122.SH -2.349386e-07 4.639757e-07 -8.601997e-07 2.906049e-07 7.150511e-06 -3.271235e-07 -9.093582e-07 3.656356e-06 -1.239282e-06 1.247832e-06 ... 9.446109e-06 4.754199e-07 -6.245288e-06 6.090126e-07 -3.617236e-06 2.983446e-06 2.605901e-06 -4.727631e-06 2.921867e-06 -2.799537e-06
600282.SH -2.028958e-07 4.057849e-07 -7.496606e-07 2.543937e-07 6.241698e-06 -2.845441e-07 -7.926059e-07 3.190141e-06 -1.080360e-06 1.085396e-06 ... 8.245553e-06 4.179325e-07 -5.453313e-06 5.332869e-07 -3.154842e-06 2.605901e-06 2.276461e-06 -4.123775e-06 2.552967e-06 -2.441259e-06
600687.SH 4.124120e-07 -7.260637e-07 1.392362e-06 -4.506466e-07 -1.139924e-05 5.389537e-07 1.470120e-06 -5.854771e-06 2.000139e-06 -2.055823e-06 ... -1.505845e-05 -7.071310e-07 9.925134e-06 -9.417149e-07 5.812565e-06 -4.727631e-06 -4.123775e-06 7.588503e-06 -4.615195e-06 4.505708e-06
000860.SZ -2.239477e-07 4.557881e-07 -8.379748e-07 2.861003e-07 6.992445e-06 -3.172336e-07 -8.861414e-07 3.571545e-06 -1.208145e-06 1.210025e-06 ... 9.237366e-06 4.726919e-07 -6.112008e-06 6.000120e-07 -3.530232e-06 2.921867e-06 2.552967e-06 -4.615195e-06 2.863836e-06 -2.731113e-06
601908.SH 2.492116e-07 -4.287810e-07 8.281741e-07 -2.656008e-07 -6.758728e-06 3.217399e-07 8.742055e-07 -3.474499e-06 1.188950e-06 -1.227082e-06 ... -8.928280e-06 -4.130044e-07 5.880933e-06 -5.547381e-07 3.452029e-06 -2.799537e-06 -2.441259e-06 4.505708e-06 -2.731113e-06 2.676774e-06

455 rows × 455 columns


In [1858]:
# optimize 
factorNum = riskExposureDFSlice.shape[1]
stkNum = toOptCov.shape[1]
P = cv.matrix(toOptCov.values)
q = cv.matrix(0.0, (stkNum, 1))
G = cv.matrix(np.concatenate((riskExposureDFSlice.T.values,np.diag(np.ones(stkNum)), - np.diag(np.ones(stkNum)))))
h = cv.matrix(reduce(lambda x,y : np.append(x,y),[0.01 * np.ones(factorNum),0.005 * 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)


     pcost       dcost       gap    pres   dres
 0:  1.1130e-07 -2.4052e+00  1e+03  3e+01  4e+01
 1:  8.0202e-06 -2.5895e+00  4e+01  1e+00  2e+00
 2:  4.6714e-09 -2.2694e+00  3e+00  4e-02  5e-02
 3:  1.3119e-08 -2.7487e-01  3e-01  2e-04  3e-04
 4:  1.3173e-08 -2.7550e-03  3e-03  2e-06  3e-06
 5:  1.3061e-08 -3.2210e-05  3e-05  3e-08  4e-08
 6:  7.5533e-09 -2.6842e-06  3e-06  2e-09  3e-09
 7:  2.4456e-09 -1.8428e-07  2e-07  1e-10  2e-10
 8:  1.8356e-09 -5.5905e-08  6e-08  2e-16  3e-21
Optimal solution found.

In [1893]:
print sol['x']


[ 2.03e-03]
[ 2.24e-03]
[ 2.32e-03]
[ 2.30e-03]
[ 1.85e-03]
[ 2.32e-03]
[ 2.35e-03]
[ 2.40e-03]
[ 2.19e-03]
[ 3.06e-03]
[ 2.18e-03]
[ 2.39e-03]
[ 1.81e-03]
[ 1.77e-03]
[ 2.42e-03]
[ 2.55e-03]
[ 2.03e-03]
[ 2.83e-03]
[ 3.07e-03]
[ 2.05e-03]
[ 2.77e-03]
[ 2.07e-03]
[ 2.37e-03]
[ 2.11e-03]
[ 3.13e-03]
[ 2.45e-03]
[ 1.94e-03]
[ 2.53e-03]
[ 2.84e-03]
[ 1.85e-03]
[ 1.90e-03]
[ 2.32e-03]
[ 1.81e-03]
[ 1.83e-03]
[ 2.06e-03]
[ 2.50e-03]
[ 2.21e-03]
[ 2.11e-03]
[ 2.20e-03]
[ 2.30e-03]
[ 1.56e-03]
[ 1.97e-03]
[ 2.13e-03]
[ 2.63e-03]
[ 2.31e-03]
[ 1.43e-03]
[ 2.08e-03]
[ 2.65e-03]
[ 1.51e-03]
[ 2.32e-03]
[ 1.98e-03]
[ 2.12e-03]
[ 2.43e-03]
[ 2.01e-03]
[ 2.88e-03]
[ 2.79e-03]
[ 1.40e-03]
[ 2.32e-03]
[ 2.27e-03]
[ 1.33e-03]
[ 2.44e-03]
[ 2.38e-03]
[ 2.03e-03]
[ 2.29e-03]
[ 2.65e-03]
[ 2.18e-03]
[ 2.48e-03]
[ 1.89e-03]
[ 2.12e-03]
[ 1.70e-03]
[ 2.32e-03]
[ 1.84e-03]
[ 2.21e-03]
[ 2.07e-03]
[ 1.88e-03]
[ 9.88e-04]
[ 2.07e-03]
[ 2.36e-03]
[ 1.86e-03]
[ 2.21e-03]
[ 2.13e-03]
[ 1.28e-03]
[ 1.53e-03]
[ 2.40e-03]
[ 2.02e-03]
[ 2.46e-03]
[ 2.49e-03]
[ 2.28e-03]
[ 2.21e-03]
[ 2.21e-03]
[ 2.18e-03]
[ 2.57e-03]
[ 3.12e-03]
[ 2.00e-03]
[ 2.50e-03]
[ 1.90e-03]
[ 2.11e-03]
[ 2.17e-03]
[ 2.07e-03]
[ 2.35e-03]
[ 2.30e-03]
[ 3.15e-03]
[ 1.31e-03]
[ 1.33e-03]
[ 2.48e-03]
[ 2.17e-03]
[ 2.36e-03]
[ 1.98e-03]
[ 2.18e-03]
[ 2.09e-03]
[ 1.85e-03]
[ 2.43e-03]
[ 2.29e-03]
[ 2.19e-03]
[ 2.80e-03]
[ 2.28e-03]
[ 2.72e-03]
[ 1.73e-03]
[ 2.36e-03]
[ 2.00e-03]
[ 2.58e-03]
[ 2.12e-03]
[ 3.10e-03]
[ 2.34e-03]
[ 2.64e-03]
[ 2.14e-03]
[ 2.44e-03]
[ 1.73e-03]
[ 1.57e-03]
[ 2.19e-03]
[ 2.00e-03]
[ 2.29e-03]
[ 2.21e-03]
[ 2.76e-03]
[ 2.34e-03]
[ 2.29e-03]
[ 2.17e-03]
[ 2.28e-03]
[ 1.33e-03]
[ 1.85e-03]
[ 1.97e-03]
[ 2.18e-03]
[ 2.52e-03]
[ 2.99e-03]
[ 2.42e-03]
[ 1.77e-03]
[ 1.92e-03]
[ 1.35e-03]
[ 2.09e-03]
[ 2.98e-03]
[ 2.50e-03]
[ 2.14e-03]
[ 2.21e-03]
[ 1.98e-03]
[ 2.33e-03]
[ 2.47e-03]
[ 2.04e-03]
[ 2.84e-03]
[ 1.94e-03]
[ 2.24e-03]
[ 2.23e-03]
[ 2.20e-03]
[ 2.96e-03]
[ 2.01e-03]
[ 2.15e-03]
[ 2.22e-03]
[ 2.20e-03]
[ 2.91e-03]
[ 1.72e-03]
[ 3.17e-03]
[ 2.44e-03]
[ 3.06e-03]
[ 2.48e-03]
[ 1.37e-03]
[ 1.73e-03]
[ 3.03e-03]
[ 2.44e-03]
[ 1.78e-03]
[ 1.88e-03]
[ 2.07e-03]
[ 2.30e-03]
[ 2.02e-03]
[ 1.13e-03]
[ 2.06e-03]
[ 3.14e-03]
[ 2.81e-03]
[ 2.34e-03]
[ 2.06e-03]
[ 2.15e-03]
[ 2.28e-03]
[ 2.18e-03]
[ 2.13e-03]
[ 2.52e-03]
[ 2.08e-03]
[ 1.60e-03]
[ 2.39e-03]
[ 2.18e-03]
[ 2.56e-03]
[ 1.84e-03]
[ 2.33e-03]
[ 2.28e-03]
[ 2.32e-03]
[ 2.24e-03]
[ 2.13e-03]
[ 2.37e-03]
[ 2.33e-03]
[ 2.31e-03]
[ 2.66e-03]
[ 1.92e-03]
[ 2.46e-03]
[ 1.99e-03]
[ 2.52e-03]
[ 2.46e-03]
[ 2.17e-03]
[ 2.48e-03]
[ 2.35e-03]
[ 2.13e-03]
[ 2.40e-03]
[ 2.66e-03]
[ 2.13e-03]
[ 2.08e-03]
[ 2.21e-03]
[ 2.07e-03]
[ 2.38e-03]
[ 2.76e-03]
[ 2.32e-03]
[ 2.58e-03]
[ 1.95e-03]
[ 2.15e-03]
[ 1.83e-03]
[ 2.58e-03]
[ 2.17e-03]
[ 2.25e-03]
[ 2.38e-03]
[ 2.22e-03]
[ 1.50e-03]
[ 1.23e-03]
[ 2.26e-03]
[ 2.13e-03]
[ 2.61e-03]
[ 1.41e-03]
[ 2.36e-03]
[ 2.43e-03]
[ 1.06e-03]
[ 3.01e-03]
[ 2.64e-03]
[ 2.13e-03]
[ 2.02e-03]
[ 2.55e-03]
[ 2.33e-03]
[ 1.39e-03]
[ 2.31e-03]
[ 2.34e-03]
[ 2.59e-03]
[ 2.46e-03]
[ 2.18e-03]
[ 1.97e-03]
[ 2.32e-03]
[ 2.17e-03]
[ 2.10e-03]
[ 2.55e-03]
[ 2.38e-03]
[ 1.96e-03]
[ 2.58e-03]
[ 1.78e-03]
[ 1.96e-03]
[ 2.31e-03]
[ 1.33e-03]
[ 1.68e-03]
[ 1.84e-03]
[ 1.39e-03]
[ 2.23e-03]
[ 2.06e-03]
[ 2.54e-03]
[ 2.31e-03]
[ 2.39e-03]
[ 2.23e-03]
[ 2.25e-03]
[ 2.41e-03]
[ 2.16e-03]
[ 1.82e-03]
[ 2.04e-03]
[ 2.47e-03]
[ 1.63e-03]
[ 1.78e-03]
[ 2.50e-03]
[ 2.38e-03]
[ 2.58e-03]
[ 1.57e-03]
[ 2.32e-03]
[ 2.95e-03]
[ 2.32e-03]
[ 2.19e-03]
[ 1.87e-03]
[ 2.25e-03]
[ 2.16e-03]
[ 1.61e-03]
[ 2.21e-03]
[ 2.21e-03]
[ 2.29e-03]
[ 1.85e-03]
[ 2.44e-03]
[ 2.74e-03]
[ 2.20e-03]
[ 1.88e-03]
[ 2.17e-03]
[ 2.26e-03]
[ 1.88e-03]
[ 2.08e-03]
[ 2.52e-03]
[ 2.21e-03]
[ 2.34e-03]
[ 1.98e-03]
[ 2.64e-03]
[ 1.23e-03]
[ 2.02e-03]
[ 1.91e-03]
[ 2.25e-03]
[ 2.31e-03]
[ 2.37e-03]
[ 2.19e-03]
[ 2.71e-03]
[ 2.01e-03]
[ 2.89e-03]
[ 2.25e-03]
[ 1.81e-03]
[ 2.11e-03]
[ 2.50e-03]
[ 2.15e-03]
[ 3.25e-03]
[ 2.29e-03]
[ 2.38e-03]
[ 2.28e-03]
[ 2.44e-03]
[ 1.90e-03]
[ 2.11e-03]
[ 2.18e-03]
[ 1.87e-03]
[ 2.01e-03]
[ 2.32e-03]
[ 2.72e-03]
[ 2.36e-03]
[ 2.36e-03]
[ 2.13e-03]
[ 2.10e-03]
[ 2.11e-03]
[ 2.03e-03]
[ 1.82e-03]
[ 2.34e-03]
[ 2.16e-03]
[ 2.09e-03]
[ 2.18e-03]
[ 2.32e-03]
[ 1.77e-03]
[ 1.78e-03]
[ 1.14e-03]
[ 2.36e-03]
[ 1.92e-03]
[ 1.42e-03]
[ 2.50e-03]
[ 1.26e-03]
[ 1.91e-03]
[ 1.70e-03]
[ 2.06e-03]
[ 3.04e-03]
[ 1.66e-03]
[ 1.40e-03]
[ 2.38e-03]
[ 2.48e-03]
[ 1.85e-03]
[ 3.09e-03]
[ 2.22e-03]
[ 2.18e-03]
[ 2.23e-03]
[ 2.06e-03]
[ 1.97e-03]
[ 2.33e-03]
[ 1.96e-03]
[ 2.49e-03]
[ 2.51e-03]
[ 2.54e-03]
[ 1.86e-03]
[ 2.05e-03]
[ 2.66e-03]
[ 2.29e-03]
[ 2.42e-03]
[ 2.36e-03]
[ 2.07e-03]
[ 2.04e-03]
[ 2.05e-03]
[ 2.13e-03]
[ 2.18e-03]
[ 2.91e-03]
[ 1.89e-03]
[ 3.25e-03]
[ 2.41e-03]
[ 1.55e-03]
[ 1.97e-03]
[ 2.17e-03]
[ 1.80e-03]
[ 2.35e-03]
[ 2.13e-03]
[ 2.24e-03]
[ 2.26e-03]
[ 2.03e-03]
[ 2.15e-03]
[ 2.10e-03]
[ 2.21e-03]
[ 2.15e-03]
[ 2.15e-03]
[ 1.26e-03]
[ 3.07e-03]
[ 1.64e-03]
[ 2.27e-03]
[ 2.45e-03]
[ 2.28e-03]
[ 2.23e-03]
[ 2.31e-03]
[ 2.09e-03]
[ 1.72e-03]
[ 3.21e-03]
[ 2.42e-03]
[ 2.20e-03]
[ 1.04e-03]
[ 2.62e-03]
[ 2.83e-03]
[ 3.08e-03]
[ 3.08e-03]
[ 1.84e-03]
[ 2.75e-03]
[ 2.24e-03]
[ 1.89e-03]
[ 2.65e-03]
[ 1.85e-03]
[ 1.47e-03]
[ 1.83e-03]
[ 1.86e-03]
[ 2.40e-03]
[ 1.69e-03]
[ 2.62e-03]
[ 1.81e-03]
[ 2.19e-03]
[ 2.29e-03]
[ 1.23e-03]
[ 2.29e-03]
[ 1.69e-03]
[ 1.91e-03]
[ 3.22e-03]
[ 2.11e-03]
[ 2.29e-03]
[ 1.94e-03]
[ 1.93e-03]
[ 2.33e-03]
[ 1.82e-03]
[ 2.23e-03]


In [1838]:
min(sol['x'])


Out[1838]:
0.0009830422747636666

In [1743]:
####
dates = [pd.Timestamp('2012-05-01'), pd.Timestamp('2012-05-02'), pd.Timestamp('2012-05-03')]
s = pd.DataFrame(index = dates ,data =[[5,6,7],[8,6,0],[1,2,3]],columns=[1,2,3] )
d = pd.DataFrame(index = dates,data =[[1,2,3,1],[2,3,1,2],[3,1,2,3]],columns=['hs','hc','hv','hg'] )

In [1744]:
dd =d.copy()
for i in dates:    
    sSlice = s.loc[i]
    dSlice = d.loc[i]
    dd.loc[i] = sSlice.loc[dSlice].values
print dd


            hs  hc  hv  hg
2012-05-01   5   6   7   5
2012-05-02   6   0   8   6
2012-05-03   3   1   2   3

In [ ]:


In [1745]:
#d.apply(lambda x: s[x.values] ,axis=0)

In [1746]:
color_set=sns.light_palette((210, 90, 60), input="husl")
(factorPvalue[factorPvalue < 0.05].count()/len(factorPvalue)).plot(figsize=(18,12),kind='bar',color=sns.color_palette(color_set,10))


Out[1746]:
<matplotlib.axes._subplots.AxesSubplot at 0x48b8f1c88>

In [1747]:
factorReturn.cumsum().plot(figsize=(20,14))


Out[1747]:
<matplotlib.axes._subplots.AxesSubplot at 0x3cc65be0>

In [1748]:
factorReturn.describe()


Out[1748]:
LFCA PB YOYBPS AMOUNTAVG1MData TURNOVER1M PROFITOOP
count 1213.000000 1213.000000 1.213000e+03 1213.000000 1.213000e+03 1213.000000
mean 0.000141 0.002316 -5.227725e-04 -0.000193 -2.785043e-04 -0.002794
std 0.003075 0.016524 2.344843e-02 0.001843 4.866383e-03 0.026907
min -0.018767 -0.125414 -1.648972e-01 -0.008586 -2.507348e-02 -0.214040
25% -0.001375 -0.001447 -1.309543e-03 -0.001188 -2.148667e-03 -0.001897
50% -0.000038 0.000683 -1.956031e-11 -0.000154 -1.911719e-09 -0.000105
75% 0.001088 0.003506 1.262657e-03 0.000836 1.897404e-03 0.000922
max 0.023949 0.167757 1.667218e-01 0.007942 2.223251e-02 0.134320

In [1749]:
result2 = sm.OLS(factorReturn['PB'],factorReturn['LFCA']).fit()

In [1750]:
result2.summary()


Out[1750]:
OLS Regression Results
Dep. Variable: PB R-squared: 0.001
Model: OLS Adj. R-squared: -0.000
Method: Least Squares F-statistic: 0.7824
Date: Fri, 31 Mar 2017 Prob (F-statistic): 0.377
Time: 18:25:13 Log-Likelihood: 3244.8
No. Observations: 1213 AIC: -6488.
Df Residuals: 1212 BIC: -6482.
Df Model: 1
Covariance Type: nonrobust
coef std err t P>|t| [0.025 0.975]
LFCA -0.1377 0.156 -0.885 0.377 -0.443 0.168
Omnibus: 713.930 Durbin-Watson: 1.699
Prob(Omnibus): 0.000 Jarque-Bera (JB): 37059.981
Skew: 1.998 Prob(JB): 0.00
Kurtosis: 29.782 Cond. No. 1.00

In [1751]:
specificReturn


Out[1751]:
600507.SH 002344.SZ 000793.SZ 300039.SZ 600059.SH 600501.SH 000713.SZ 002233.SZ 600360.SH 600565.SH ... 600150.SH 600469.SH 600282.SH 600739.SH 600406.SH 600687.SH 600866.SH 000860.SZ 601908.SH 002195.SZ
LZ_GPA_DERI_AdjustedPriceForward_20-d
2012-01-05 0.025697 -0.003473 0.037548 0.008942 -0.016753 -0.008695 -0.063853 -0.037907 0.003391 0.043417 ... -0.006358 0.025833 0.017931 0.015733 0.014046 0.047862 -0.010460 -0.016782 -0.034919 -0.028392
2012-01-06 0.009798 -0.002888 -0.014238 -0.001026 0.008056 0.008517 -0.076295 0.035727 0.012290 0.042267 ... 0.007569 0.025505 0.007684 0.032604 0.004787 -0.002140 -0.026344 -0.000980 0.006110 0.020084
2012-01-09 -0.002461 -0.003983 -0.008909 0.008975 -0.001940 0.004854 -0.009167 0.023284 0.001697 -0.023664 ... 0.002377 -0.014051 -0.012760 0.004765 -0.013658 -0.037539 0.002730 0.019514 0.008411 -0.039856
2012-01-10 -0.006802 -0.005576 -0.014090 -0.018444 -0.002437 -0.000083 0.061007 0.024528 -0.000246 -0.021472 ... -0.000986 0.005041 0.000619 -0.019920 -0.011203 -0.040650 0.030107 -0.000083 0.021606 0.021836
2012-01-11 0.045727 0.012534 -0.004739 -0.021131 -0.011484 0.000325 0.017528 -0.022103 -0.006171 -0.014216 ... -0.007070 0.005366 0.003864 -0.006986 0.004961 -0.005496 -0.012906 -0.007782 -0.008659 0.094104
2012-01-12 -0.009627 -0.009251 -0.003969 -0.016977 -0.002378 0.007948 -0.016876 0.007746 0.001761 -0.001463 ... 0.000756 -0.014743 -0.005369 -0.002584 -0.018490 0.001313 -0.001444 -0.005423 0.036530 -0.017246
2012-01-13 -0.010242 0.020971 -0.002325 -0.040364 -0.000066 0.000146 0.017963 -0.008312 -0.005817 0.007578 ... -0.004806 -0.007751 0.008292 0.002108 -0.022852 0.039016 -0.015669 -0.015496 0.032646 -0.026735
2012-01-16 0.020199 -0.021680 0.007342 -0.001592 -0.010316 -0.006682 0.018280 -0.001341 0.008870 0.003953 ... 0.005323 0.008468 0.018731 0.021012 -0.070429 0.035611 -0.011880 0.010993 -0.011707 -0.003665
2012-01-17 -0.054877 -0.000032 -0.011085 -0.017507 0.003734 -0.005410 0.000674 0.026957 0.001241 -0.006605 ... 0.004167 0.006175 0.001763 0.006243 -0.022848 -0.051361 0.002953 -0.003269 0.002274 0.025791
2012-01-18 0.022522 0.011270 0.009701 -0.068346 -0.007530 0.042251 -0.008548 0.026919 0.008811 0.014793 ... 0.004430 0.021011 0.000993 -0.006043 -0.054979 0.027621 -0.003274 -0.001775 0.001269 -0.014767
2012-01-19 0.060079 -0.006803 -0.028687 0.011397 0.002379 -0.002305 -0.012110 -0.001180 0.006911 0.002572 ... -0.000286 0.009633 0.001781 0.009646 0.052840 -0.009796 -0.005038 0.000501 0.018976 -0.001055
2012-01-20 -0.019647 -0.008149 -0.000181 0.012686 0.015826 -0.004233 0.027664 0.013963 0.000335 -0.001984 ... 0.021521 -0.005428 -0.004489 0.007368 0.001899 -0.014611 0.011480 0.006558 -0.008054 -0.012641
2012-01-30 0.011053 -0.013475 0.009726 -0.004199 0.012626 0.001401 -0.003782 -0.028172 0.004519 -0.006219 ... -0.010550 -0.017300 -0.000518 0.004420 0.002340 0.000927 -0.003856 0.025063 -0.012913 -0.002352
2012-01-31 -0.003756 -0.017357 0.020711 -0.029217 -0.003476 0.014372 -0.004233 -0.003061 0.003812 0.013702 ... 0.018583 0.014493 -0.015569 -0.002926 -0.016167 -0.000671 -0.006074 0.009975 -0.044988 -0.003558
2012-02-01 -0.010210 0.005883 -0.001169 0.009586 -0.009513 -0.014535 0.010392 -0.023494 0.011447 0.011954 ... -0.011139 0.011274 0.001200 -0.002798 0.005141 0.003310 0.006928 0.001441 -0.012411 -0.002606
2012-02-02 -0.006556 -0.005136 -0.001328 0.037808 -0.010369 -0.001340 -0.009855 0.001722 0.002519 -0.000582 ... -0.005014 -0.002695 -0.005148 -0.007672 -0.010057 -0.016110 0.000715 -0.000305 0.004030 0.006155
2012-02-03 -0.007349 0.003109 -0.016817 -0.011857 -0.004797 -0.007902 -0.016840 -0.015055 0.020752 -0.014320 ... 0.006986 -0.006016 -0.010463 -0.010506 0.039603 -0.021608 0.041952 -0.020348 0.012629 0.001542
2012-02-06 -0.005528 0.005469 -0.011823 0.029207 -0.003050 -0.011378 0.006300 0.017259 -0.015340 -0.015194 ... -0.007103 -0.010491 -0.010895 0.004785 0.027431 -0.011732 -0.011777 -0.003412 0.028627 -0.007434
2012-02-07 0.008390 -0.003556 0.010068 -0.007387 -0.009078 -0.002072 -0.000861 -0.013572 -0.011307 0.008977 ... -0.006898 -0.001997 0.008343 -0.024295 -0.001304 0.014379 -0.013875 -0.005976 -0.004512 -0.011059
2012-02-08 -0.012152 -0.010044 -0.014624 -0.003835 0.002906 0.003406 -0.015299 0.009846 0.009580 -0.003992 ... -0.006144 0.013945 -0.004912 0.005237 -0.002903 -0.024295 0.009027 -0.005572 0.010185 0.001979
2012-02-09 0.016116 -0.005459 -0.002378 -0.014785 0.011079 -0.012501 -0.007977 -0.000302 0.002660 0.005397 ... 0.001038 -0.015223 -0.004033 -0.009586 0.006196 -0.009539 0.021959 0.000662 -0.010483 0.007368
2012-02-10 0.001161 0.001826 -0.003240 -0.016826 -0.008935 -0.001427 0.010385 0.002829 -0.006626 -0.001218 ... -0.005290 -0.003878 0.004429 0.005094 -0.006322 -0.007867 -0.012987 0.017081 0.006077 -0.007486
2012-02-13 -0.004348 -0.009433 -0.002377 0.041532 0.011631 -0.002109 -0.020070 -0.020366 0.029998 -0.011101 ... -0.002728 -0.001064 -0.011710 -0.001984 -0.002504 -0.014350 0.007706 -0.003517 -0.023715 -0.001891
2012-02-14 -0.005020 0.005827 -0.000060 0.031157 -0.002834 0.007338 -0.007546 0.014853 -0.014081 0.012637 ... 0.010812 0.016797 -0.010789 -0.005326 -0.006415 -0.003177 -0.007490 -0.000516 -0.014311 -0.005706
2012-02-15 -0.001737 -0.005583 0.007412 -0.003420 -0.014295 0.004322 -0.012637 -0.006615 0.020089 -0.011643 ... 0.007085 -0.009986 0.007823 0.023290 -0.016891 -0.016486 0.028790 -0.007172 0.010785 -0.003551
2012-02-16 0.019497 0.002844 0.005799 -0.003650 0.000985 -0.006409 0.014222 -0.006275 -0.009168 0.015122 ... -0.008492 0.011382 -0.007276 -0.007312 -0.003675 -0.002756 -0.009829 -0.011589 0.029805 -0.003290
2012-02-17 -0.004990 -0.000246 -0.006921 -0.012979 -0.006523 0.019146 -0.014689 -0.010776 -0.013079 0.007198 ... 0.006536 -0.002213 0.000639 0.017015 0.003368 0.004459 -0.013537 -0.006585 0.010342 -0.019309
2012-02-20 -0.000762 -0.011651 -0.007822 -0.040286 0.006905 -0.008681 -0.004858 0.000353 -0.009046 -0.019164 ... 0.000676 -0.011483 -0.005033 -0.014838 0.032045 -0.002109 -0.003969 0.003308 -0.013040 -0.002108
2012-02-21 -0.016275 -0.008950 0.004661 -0.000365 0.032768 -0.006970 -0.009862 -0.005791 0.002142 0.006485 ... -0.008162 -0.009223 -0.003224 0.004059 -0.000326 -0.010086 -0.001350 0.016590 -0.006796 0.014288
2012-02-22 -0.011953 -0.000159 -0.005043 -0.000245 -0.013014 0.017539 -0.004819 -0.004893 -0.010375 -0.009904 ... -0.004839 -0.005477 -0.009693 0.003160 -0.000570 -0.019620 -0.000302 -0.007680 0.020105 0.007748
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2016-11-21 0.004116 -0.012315 -0.000965 0.002540 -0.001069 0.015198 -0.003783 -0.009838 0.002850 -0.005221 ... 0.006744 0.012791 0.010765 0.007151 -0.021069 -0.003086 -0.000848 -0.000633 0.029898 0.018065
2016-11-22 0.008588 -0.006524 -0.014546 0.002471 -0.006451 -0.001184 0.001560 -0.024366 -0.014749 -0.006824 ... 0.011174 0.001036 0.041535 0.051665 -0.012534 -0.006076 -0.002769 -0.002800 0.052490 -0.027844
2016-11-23 0.003757 -0.026598 -0.005973 -0.006287 0.002678 0.017555 -0.006563 -0.002171 0.007746 -0.002714 ... -0.007023 -0.007030 0.021767 -0.008500 -0.002021 -0.000128 -0.008328 0.009204 -0.021191 -0.000150
2016-11-24 0.002655 0.010088 -0.001484 -0.007074 0.021118 0.001684 -0.008638 0.002739 0.023288 -0.000461 ... -0.019155 -0.011349 0.020292 0.068609 -0.025387 -0.001966 -0.016330 0.010067 -0.030220 -0.035994
2016-11-25 0.035908 -0.014605 0.000058 -0.001145 -0.013527 -0.007813 -0.008431 -0.011698 -0.019321 -0.009498 ... 0.004688 0.010013 0.002060 -0.015354 -0.006859 -0.006832 -0.011420 -0.010807 -0.011395 0.011546
2016-11-28 -0.009264 -0.018041 0.009752 0.007162 -0.000162 -0.014589 0.001061 0.008392 -0.020504 0.032465 ... 0.006745 -0.008057 -0.000885 -0.006892 0.010231 -0.000727 -0.011330 -0.001330 0.005123 -0.014616
2016-11-29 0.032540 0.012524 -0.021000 0.002891 0.013319 0.049835 0.000907 -0.018818 -0.010295 -0.003335 ... 0.026431 -0.021797 -0.023068 -0.009793 -0.004073 0.001587 0.002279 0.015202 -0.019326 0.001329
2016-11-30 -0.010226 -0.026371 0.014858 0.037224 0.000731 -0.001730 0.005836 -0.010111 0.014362 -0.008539 ... -0.019896 0.007475 -0.005220 0.016167 0.002437 0.004305 0.002454 -0.014745 -0.013338 0.037679
2016-12-01 0.013128 0.000493 -0.014953 -0.009253 -0.009240 -0.005665 0.000146 0.005404 -0.001360 -0.011849 ... 0.024119 0.019768 0.007968 -0.007834 -0.006011 -0.007108 0.003505 -0.009391 0.000424 -0.007404
2016-12-02 -0.031747 -0.003301 0.015371 -0.011835 -0.012148 -0.015657 0.001290 0.001381 -0.003682 0.015541 ... 0.042484 0.025365 -0.004533 0.014798 0.017513 0.010304 -0.004684 -0.003220 -0.010651 -0.002369
2016-12-05 0.005434 -0.023616 0.001484 -0.014046 0.010283 0.005787 0.005068 0.004562 0.002820 0.007331 ... 0.084771 0.010870 0.001622 -0.089297 0.021249 0.003972 0.007877 0.009958 0.001822 0.019856
2016-12-06 -0.006845 -0.000693 -0.007594 -0.005681 -0.009284 -0.020962 0.004289 0.014763 0.018684 -0.008087 ... -0.014768 0.005650 0.003753 -0.009610 0.017321 0.000288 0.010379 -0.001049 0.002666 0.010346
2016-12-07 0.045892 0.020283 -0.015690 0.000494 -0.004245 -0.008840 -0.001693 0.018272 -0.015131 -0.010187 ... 0.018825 -0.009593 0.018710 -0.006145 -0.002597 -0.007274 0.002232 -0.002943 -0.000263 -0.004393
2016-12-08 0.005831 -0.004326 0.029605 -0.008784 0.006654 -0.016216 0.000350 -0.014138 0.002712 0.025956 ... -0.012993 0.021909 -0.008980 -0.006309 -0.013237 0.003997 -0.006220 0.011827 -0.006600 -0.001618
2016-12-09 -0.018018 0.000731 -0.004448 -0.004510 0.001487 0.002110 -0.002175 -0.020003 -0.008717 0.000906 ... 0.026872 0.004223 0.007711 0.003453 -0.004103 0.000866 0.002818 0.005212 -0.016663 -0.000147
2016-12-12 0.013583 -0.009366 0.003168 -0.012749 -0.009388 0.010734 -0.007133 -0.016055 -0.022612 0.019399 ... 0.003842 -0.001923 0.008785 -0.026577 0.024233 0.029109 0.000933 0.015489 -0.011285 -0.014813
2016-12-13 0.052545 -0.001282 -0.005146 0.000161 0.012430 0.015912 0.012024 0.030629 -0.013771 -0.006450 ... 0.067248 -0.005695 0.008371 0.003918 -0.029522 -0.002800 -0.000237 0.024233 -0.013403 -0.001609
2016-12-14 -0.021991 -0.003708 -0.004226 -0.001113 -0.000090 0.030691 -0.026090 -0.013705 -0.001227 -0.015985 ... -0.021127 0.063488 -0.014713 -0.010451 0.071338 0.005249 0.012816 0.003353 0.004883 -0.012642
2016-12-15 0.093530 0.031946 0.010375 -0.004773 -0.005439 0.002773 -0.002247 -0.007773 0.015203 0.041862 ... -0.009560 -0.000193 0.011236 -0.004244 0.009400 -0.000135 0.007963 0.003303 0.002096 0.002557
2016-12-16 0.049880 0.003535 0.049997 0.002677 0.007463 0.004271 0.042843 0.005243 -0.005540 0.023208 ... -0.047765 -0.018137 -0.009252 0.020822 -0.016290 -0.006583 0.006597 -0.010722 0.005390 0.019540
2016-12-19 -0.034419 -0.017775 0.024785 -0.015057 -0.005119 0.001086 0.007792 -0.001322 -0.021083 -0.002237 ... 0.015954 0.011016 0.019557 -0.006675 0.004989 -0.000995 -0.001658 0.011185 -0.001744 -0.015854
2016-12-20 -0.044345 0.011837 0.003587 0.006492 -0.007609 -0.008795 -0.021780 -0.016357 0.025412 -0.007512 ... 0.001017 -0.022421 -0.000328 -0.000752 -0.020449 0.002981 0.009770 -0.001188 -0.003776 0.011593
2016-12-21 -0.008973 -0.003106 -0.011988 -0.000767 -0.000366 0.014113 0.006825 -0.006050 -0.003281 -0.007760 ... 0.064926 0.063497 0.007641 0.002840 0.004354 -0.009241 -0.006415 -0.003403 -0.010551 -0.003574
2016-12-22 -0.002591 -0.003378 -0.008124 -0.004816 0.002814 -0.019702 -0.011148 0.056149 -0.016243 0.022487 ... 0.026384 0.009699 0.047394 -0.000297 0.034828 -0.000194 -0.001773 -0.011049 -0.001616 -0.018613
2016-12-23 -0.029777 -0.015927 0.036202 0.000889 0.023664 0.005538 -0.012470 -0.015434 0.010483 0.015981 ... 0.017601 -0.011120 0.011213 -0.001032 0.020064 0.008623 -0.001696 -0.004138 0.001410 0.001846
2016-12-26 -0.023122 0.010769 -0.009817 0.006947 0.012481 0.006357 0.008649 0.008887 -0.003876 -0.004927 ... 0.002493 0.002654 -0.026140 -0.001668 -0.009431 -0.001582 0.010529 -0.005836 0.008052 0.019347
2016-12-27 -0.004435 -0.000807 0.002591 -0.001878 0.006556 0.001184 0.009099 0.002489 0.005987 0.025400 ... -0.019135 -0.001682 -0.007100 -0.004429 0.004407 0.000556 0.012094 0.007637 -0.007560 -0.007801
2016-12-28 -0.012017 0.002621 -0.020771 -0.006607 -0.004481 0.007649 0.002448 -0.011259 0.005490 -0.010482 ... 0.001505 0.034261 -0.000345 -0.006536 -0.005476 0.002957 0.017636 0.008229 0.004232 -0.001179
2016-12-29 0.008727 0.013986 -0.004610 0.008750 0.006758 0.004271 0.006866 0.004027 -0.013295 -0.020404 ... -0.022136 -0.011416 0.042035 0.026898 0.001633 0.001583 -0.010350 0.006314 0.022208 -0.005476
2016-12-30 -0.009606 -0.004527 -0.011325 -0.003919 -0.002088 -0.018438 0.012067 -0.020959 -0.012541 0.006351 ... -0.028871 -0.005890 -0.000246 -0.008862 -0.002014 -0.006388 0.010013 0.047173 0.021147 -0.005549

1213 rows × 1071 columns


In [ ]:


In [1752]:
result1 = sm.OLS(returnOfBench, factorReturn).fit()

In [1753]:
result1 .summary()


Out[1753]:
OLS Regression Results
Dep. Variable: 000905.SH R-squared: 0.622
Model: OLS Adj. R-squared: 0.620
Method: Least Squares F-statistic: 330.4
Date: Fri, 31 Mar 2017 Prob (F-statistic): 1.45e-250
Time: 18:25:13 Log-Likelihood: 3690.4
No. Observations: 1213 AIC: -7369.
Df Residuals: 1207 BIC: -7338.
Df Model: 6
Covariance Type: nonrobust
coef std err t P>|t| [0.025 0.975]
LFCA -0.9030 0.111 -8.110 0.000 -1.121 -0.685
PB -0.0633 0.025 -2.502 0.012 -0.113 -0.014
YOYBPS -0.0399 0.015 -2.699 0.007 -0.069 -0.011
AMOUNTAVG1MData 0.9478 0.196 4.847 0.000 0.564 1.331
TURNOVER1M 3.0072 0.074 40.415 0.000 2.861 3.153
PROFITOOP 0.0688 0.015 4.465 0.000 0.039 0.099
Omnibus: 78.687 Durbin-Watson: 1.702
Prob(Omnibus): 0.000 Jarque-Bera (JB): 306.929
Skew: -0.154 Prob(JB): 2.24e-67
Kurtosis: 5.445 Cond. No. 17.5

In [1754]:
result1.resid.head(10)


Out[1754]:
LZ_GPA_DERI_AdjustedPriceForward_20-d
2012-01-05   -0.030300
2012-01-06   -0.001184
2012-01-09    0.032104
2012-01-10    0.042156
2012-01-11    0.000058
2012-01-12   -0.000444
2012-01-13   -0.028221
2012-01-16   -0.025209
2012-01-17    0.050800
2012-01-18   -0.020976
dtype: float64

In [ ]:


In [1755]:
print PBData.shape,YOYBPSData.shape,AMOUNTAVG1MData .shape, TURNOVER1MData.shape,PROFITOOPData.shape


(1214, 1071) (1214, 1071) (1214, 1071) (1214, 1071) (1214, 1071)

In [ ]:


In [ ]:


In [1756]:
# 
#stDF = pd.read_csv(path+filenameST,infer_datetime_format=True,parse_dates=[0],index_col=0)[-timeStampNum-1:-5]
#tradeDayDF = pd.read_csv(path+filenameTradeday,infer_datetime_format=True,parse_dates=[0],index_col=0)[-timeStampNum-1:-5]
#stopFlagDF = pd.read_csv(path+filenameStopFlag,infer_datetime_format=True,parse_dates=[0],index_col=0)[-timeStampNum-1:-5]

In [1890]:
# calculate my own illq factor

filenameClose = 'LZ_GPA_QUOTE_TCLOSE.csv'
filenameOpen = 'LZ_GPA_QUOTE_TOPEN.csv'
filenameVolume = 'LZ_GPA_QUOTE_TVOLUME.csv'

def calcILLQ():
    openPrice = pd.read_csv(path+filenameOpen,infer_datetime_format=True,parse_dates=[0],index_col=0)
    closePrice = pd.read_csv(path+filenameClose,infer_datetime_format=True,parse_dates=[0],index_col=0).iloc[:-3][openPrice.columns]
    volume = pd.read_csv(path+filenameVolume,infer_datetime_format=True,parse_dates=[0],index_col=0)
    if openPrice.shape != closePrice.shape:
        print openPrice.shape, closePrice.shape
        print 'data shape is not equal!'
    else:
        newdf = np.abs((closePrice - openPrice)/openPrice)/volume
        newdf = newdf.rolling(min_periods=20,window=20,center=False).mean()
        newdf.index.name = 'LZ_GPA_DERI_OWNILLIQ_20-d'
        newdf.to_csv(path+'LZ_GPA_DERI_OWNILLIQ_20.csv',na_rep='NaN',date_format='%Y%m%d')
        return newdf

In [1892]:
calcILLQ().tail()


Out[1892]:
000005.SZ 600601.SH 600602.SH 600651.SH 600652.SH 600653.SH 600654.SH 600656.SH 000004.SZ 000002.SZ ... 002774.SZ 002858.SZ 300629.SZ 603388.SH 603768.SH 603717.SH 300630.SZ 603178.SH 603833.SH 601228.SH
LZ_GPA_DERI_OWNILLIQ_20-d
2017-03-22 6.012271e-08 4.076976e-08 NaN NaN 1.184652e-07 4.917158e-08 NaN NaN 8.081659e-07 1.867476e-08 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-03-23 6.270238e-08 4.251242e-08 NaN 9.072059e-08 1.198358e-07 5.351699e-08 NaN NaN 8.311664e-07 1.844646e-08 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-03-24 5.843715e-08 4.319348e-08 NaN 9.585883e-08 1.212783e-07 5.772829e-08 NaN NaN 8.674819e-07 1.899338e-08 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-03-27 5.994598e-08 4.155151e-08 NaN 9.921860e-08 1.146010e-07 5.484181e-08 NaN NaN 9.165426e-07 2.081014e-08 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-03-28 6.562180e-08 4.574900e-08 NaN 1.040142e-07 1.133371e-07 5.353685e-08 NaN NaN 9.309228e-07 2.129615e-08 ... NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

5 rows × 3256 columns