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

In [94]:
# Libraries to use
from __future__ import division 
import talib as tb
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 cvxopt as cv
from cvxopt import solvers

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

In [3]:
%matplotlib inline

In [4]:
# Files to use 
filenameHS300 = 'LZ_GPA_INDXQUOTE_CLOSE.csv'
filenameIndexVolume = 'LZ_GPA_INDXQUOTE_VOLUME.csv'
filenameHSOpen = 'LZ_GPA_INDXQUOTE_OPEN.csv'
filenameHS300Weight = 'LZ_GPA_INDEX_HS300WEIGHT.csv'
filanemaZX500Weight = 'LZ_GPA_INDEX_CSI500WEIGHT.csv'

In [5]:
# some useful parameters
startTime =  datetime.strptime('20120101', '%Y%m%d')
endTime = datetime.strptime('20161231', '%Y%m%d')


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 [57]:
# Constants
path = ff.data_path
timeStampNum = 1000
thresholdNum = 0.2
HSIndex='000300.SH'
sampleNum = 500

In [72]:
targetAsset = pd.read_csv(path+filenameHS300,infer_datetime_format=True,parse_dates=[0],index_col=0).loc[startTime :endTime].iloc[:,:4]

tANetWorth = targetAsset /targetAsset.iloc[0]

tACovMatrix = tANetWorth.ewm(ignore_na=True, min_periods=0, halflife = 60).cov(pairwise = True).iloc[-1]

endOfMonthList = ff.getLastDayOfMonth(tANetWorth.index)[1]
positionSheet = pd.DataFrame(index=tANetWorth.index, columns = tANetWorth.columns, data= None, dtype =float)
positionSheet


Out[72]:
000001.SH 801010.SI 801020.SI 801030.SI
LZ_GPA_INDXQUOTE_CLOSE-d
2012-01-04 NaN NaN NaN NaN
2012-01-05 NaN NaN NaN NaN
2012-01-06 NaN NaN NaN NaN
2012-01-09 NaN NaN NaN NaN
2012-01-10 NaN NaN NaN NaN
2012-01-11 NaN NaN NaN NaN
2012-01-12 NaN NaN NaN NaN
2012-01-13 NaN NaN NaN NaN
2012-01-16 NaN NaN NaN NaN
2012-01-17 NaN NaN NaN NaN
2012-01-18 NaN NaN NaN NaN
2012-01-19 NaN NaN NaN NaN
2012-01-20 NaN NaN NaN NaN
2012-01-30 NaN NaN NaN NaN
2012-01-31 NaN NaN NaN NaN
2012-02-01 NaN NaN NaN NaN
2012-02-02 NaN NaN NaN NaN
2012-02-03 NaN NaN NaN NaN
2012-02-06 NaN NaN NaN NaN
2012-02-07 NaN NaN NaN NaN
2012-02-08 NaN NaN NaN NaN
2012-02-09 NaN NaN NaN NaN
2012-02-10 NaN NaN NaN NaN
2012-02-13 NaN NaN NaN NaN
2012-02-14 NaN NaN NaN NaN
2012-02-15 NaN NaN NaN NaN
2012-02-16 NaN NaN NaN NaN
2012-02-17 NaN NaN NaN NaN
2012-02-20 NaN NaN NaN NaN
2012-02-21 NaN NaN NaN NaN
... ... ... ... ...
2016-11-21 NaN NaN NaN NaN
2016-11-22 NaN NaN NaN NaN
2016-11-23 NaN NaN NaN NaN
2016-11-24 NaN NaN NaN NaN
2016-11-25 NaN NaN NaN NaN
2016-11-28 NaN NaN NaN NaN
2016-11-29 NaN NaN NaN NaN
2016-11-30 NaN NaN NaN NaN
2016-12-01 NaN NaN NaN NaN
2016-12-02 NaN NaN NaN NaN
2016-12-05 NaN NaN NaN NaN
2016-12-06 NaN NaN NaN NaN
2016-12-07 NaN NaN NaN NaN
2016-12-08 NaN NaN NaN NaN
2016-12-09 NaN NaN NaN NaN
2016-12-12 NaN NaN NaN NaN
2016-12-13 NaN NaN NaN NaN
2016-12-14 NaN NaN NaN NaN
2016-12-15 NaN NaN NaN NaN
2016-12-16 NaN NaN NaN NaN
2016-12-19 NaN NaN NaN NaN
2016-12-20 NaN NaN NaN NaN
2016-12-21 NaN NaN NaN NaN
2016-12-22 NaN NaN NaN NaN
2016-12-23 NaN NaN NaN NaN
2016-12-26 NaN NaN NaN NaN
2016-12-27 NaN NaN NaN NaN
2016-12-28 NaN NaN NaN NaN
2016-12-29 NaN NaN NaN NaN
2016-12-30 NaN NaN NaN NaN

1214 rows × 4 columns


In [24]:
tANetWorth 
t1 = tANetWorth .pct_change().dropna().iloc[1:]
originalShapeRatio = t1.mean()/t1.std()
originalShapeRatio.name = 'Shape_Ratio'

In [43]:
t1 .mean()


Out[43]:
000001.SH    0.000423
801010.SI    0.000811
801020.SI    0.000015
801030.SI    0.000767
dtype: float64

In [20]:
origiMaxdd = tANetWorth .copy()
origiMaxdd .iloc[0] = 0
for date in tANetWorth.index[1:]:
    origiMaxdd .loc[date] = 1-tANetWorth.loc[date]/tANetWorth.loc[:date].max()
origiMaxdd.max()


Out[20]:
000001.SH    0.485970
801010.SI    0.465448
801020.SI    0.536796
801030.SI    0.504192
dtype: float64

In [30]:
calmaRatio = t1.mean()/origiMaxdd.max()
calmaRatio.name = 'Calmar_Ratio'

In [47]:
basePoint = 0.005
InfoDF = pd.concat([originalShapeRatio,calmaRatio],axis=1)
InfoDF.rank()
InfoWeight = np.array([0.6,0.4])
InfoDF = InfoDF.rank() * InfoWeight
InfoDF = InfoDF.sum(axis=1) - InfoDF.sum(axis=1).mean()
(0.3 + InfoDF*basePoint ).values


Out[47]:
array([ 0.2975,  0.3075,  0.2925,  0.3025])

In [48]:
InfoDF*basePoint


Out[48]:
000001.SH   -0.0025
801010.SI    0.0075
801020.SI   -0.0075
801030.SI    0.0025
dtype: float64

In [83]:
basePoint = 0.1
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] >= 120:
        # Adjusted threshold for each asset
        originalShapeRatio = tempdf.mean()/tempdf.std()
        originalShapeRatio.name = 'Shape_Ratio'
        origiMaxdd = tempNWdf.copy()
        origiMaxdd .iloc[0] = 0
        for i in tempNWdf.index[1:]:
            origiMaxdd .loc[i] = 1-tempNWdf.loc[i]/tempNWdf.loc[:i].max()
        calmaRatio = tempdf.mean()/origiMaxdd.max()
        calmaRatio.name = 'Calmar_Ratio'
        InfoDF = pd.concat([originalShapeRatio,calmaRatio],axis=1)
        InfoWeight = np.array([0.6,0.4])   # customized
        InfoDF = InfoDF.rank() * InfoWeight
        InfoDF = InfoDF.sum(axis=1) - InfoDF.sum(axis=1).mean()
        
        temCovMatrix = tempdf.iloc[-120:]. ewm(ignore_na=True, min_periods=0, halflife = 60).cov(pairwise = True).iloc[-1]
        #print temCovMatrix
        # Optimize 
        stkNum = temCovMatrix.shape[1]
        P = cv.matrix(temCovMatrix.values)
        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.3 + InfoDF * basePoint).values, 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)
        positionSheet.loc[date] = np.array(list(sol['x']))


     pcost       dcost       gap    pres   dres
 0:  8.1217e-05 -1.3073e+00  1e+01  3e+00  3e-16
 1:  8.2853e-05 -8.9000e-01  9e-01  1e-02  2e-16
 2:  8.3034e-05 -1.0642e-02  1e-02  1e-04  4e-16
 3:  8.3031e-05 -3.4960e-05  1e-04  1e-06  7e-18
 4:  8.2647e-05  7.2101e-05  1e-05  1e-07  6e-19
 5:  8.0360e-05  7.8001e-05  2e-06  8e-17  4e-20
 6:  7.9933e-05  7.9849e-05  8e-08  6e-17  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.7372e-05 -1.3073e+00  1e+01  3e+00  2e-16
 1:  7.8644e-05 -8.8345e-01  9e-01  4e-16  4e-16
 2:  7.8644e-05 -8.7670e-03  9e-03  2e-16  2e-16
 3:  7.8633e-05 -2.0143e-05  1e-04  1e-16  3e-18
 4:  7.7994e-05  6.8784e-05  9e-06  1e-16  3e-19
 5:  7.6572e-05  7.3484e-05  3e-06  8e-17  2e-20
 6:  7.6314e-05  7.6216e-05  1e-07  8e-17  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.3606e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  9.5975e-05 -8.8578e-01  9e-01  1e-02  6e-16
 2:  9.6224e-05 -1.0539e-02  1e-02  1e-04  2e-16
 3:  9.6214e-05 -2.7299e-05  1e-04  1e-06  6e-18
 4:  9.5296e-05  8.0169e-05  2e-05  2e-07  8e-19
 5:  9.1062e-05  8.8487e-05  3e-06  9e-11  3e-20
 6:  9.0684e-05  9.0655e-05  3e-08  1e-12  4e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  8.1273e-05 -1.3073e+00  1e+01  3e+00  3e-16
 1:  8.1997e-05 -8.8999e-01  9e-01  1e-02  6e-16
 2:  8.2074e-05 -1.0639e-02  1e-02  1e-04  2e-16
 3:  8.2058e-05 -4.3750e-05  1e-04  1e-06  7e-18
 4:  8.0898e-05  6.4698e-05  2e-05  2e-07  9e-19
 5:  7.6111e-05  7.2322e-05  4e-06  5e-09  5e-20
 6:  7.5705e-05  7.5647e-05  6e-08  7e-11  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.7228e-05 -1.3049e+00  1e+01  3e+00  4e-16
 1:  7.7001e-05 -8.8579e-01  9e-01  1e-02  5e-16
 2:  7.6980e-05 -1.0551e-02  1e-02  1e-04  3e-16
 3:  7.6963e-05 -4.4993e-05  1e-04  1e-06  4e-18
 4:  7.5771e-05  6.2184e-05  1e-05  1e-07  5e-19
 5:  7.1932e-05  6.8060e-05  4e-06  5e-09  6e-20
 6:  7.1618e-05  7.1408e-05  2e-07  2e-10  4e-20
 7:  7.1541e-05  7.1532e-05  9e-09  1e-11  6e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.2974e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  9.1054e-05 -8.8580e-01  9e-01  1e-02  5e-16
 2:  9.0865e-05 -1.0545e-02  1e-02  1e-04  3e-16
 3:  9.0845e-05 -3.6107e-05  1e-04  1e-06  5e-18
 4:  8.9545e-05  7.1725e-05  2e-05  2e-07  7e-19
 5:  8.4337e-05  7.8196e-05  6e-06  2e-08  8e-20
 6:  8.4002e-05  8.3634e-05  4e-07  1e-09  7e-20
 7:  8.3859e-05  8.3844e-05  2e-08  5e-11  4e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.1426e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  8.9299e-05 -8.8580e-01  9e-01  1e-02  5e-16
 2:  8.9087e-05 -1.0545e-02  1e-02  1e-04  4e-16
 3:  8.9071e-05 -3.3683e-05  1e-04  1e-06  1e-17
 4:  8.8047e-05  7.2889e-05  2e-05  2e-07  1e-18
 5:  8.4023e-05  7.2351e-05  1e-05  8e-08  6e-19
 6:  8.3193e-05  8.2806e-05  4e-07  2e-09  4e-20
 7:  8.3134e-05  8.3127e-05  7e-09  3e-11  1e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.2536e-05 -1.3049e+00  1e+01  3e+00  8e-17
 1:  9.1348e-05 -8.8577e-01  9e-01  1e-02  6e-16
 2:  9.1227e-05 -1.0536e-02  1e-02  1e-04  3e-16
 3:  9.1217e-05 -3.0664e-05  1e-04  1e-06  6e-18
 4:  9.0608e-05  7.5246e-05  2e-05  2e-07  7e-19
 5:  8.6898e-05  7.3321e-05  1e-05  9e-08  3e-19
 6:  8.6262e-05  8.4976e-05  1e-06  8e-09  7e-20
 7:  8.6058e-05  8.6040e-05  2e-08  8e-11  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.1776e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  9.1164e-05 -8.8578e-01  9e-01  1e-02  6e-16
 2:  9.1104e-05 -1.0538e-02  1e-02  1e-04  3e-16
 3:  9.1100e-05 -2.3351e-05  1e-04  1e-06  5e-18
 4:  9.0799e-05  8.2105e-05  9e-06  1e-07  4e-19
 5:  8.8737e-05  8.2629e-05  6e-06  2e-08  1e-19
 6:  8.8716e-05  8.7620e-05  1e-06  4e-09  5e-20
 7:  8.8771e-05  8.7811e-05  1e-06  1e-09  5e-20
 8:  8.8679e-05  8.8595e-05  8e-08  7e-11  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  8.8104e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  8.7797e-05 -8.8578e-01  9e-01  1e-02  6e-16
 2:  8.7768e-05 -1.0541e-02  1e-02  1e-04  4e-16
 3:  8.7763e-05 -2.5155e-05  1e-04  1e-06  1e-17
 4:  8.7390e-05  8.0827e-05  7e-06  7e-08  5e-19
 5:  8.5689e-05  8.5008e-05  7e-07  3e-09  4e-20
 6:  8.5624e-05  8.5604e-05  2e-08  6e-11  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.2807e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  7.2391e-05 -8.8580e-01  9e-01  1e-02  6e-16
 2:  7.2352e-05 -1.0557e-02  1e-02  1e-04  3e-16
 3:  7.2349e-05 -4.0066e-05  1e-04  1e-06  5e-18
 4:  7.2178e-05  6.5255e-05  7e-06  8e-08  3e-19
 5:  7.0716e-05  6.6476e-05  4e-06  2e-08  9e-20
 6:  7.0681e-05  7.0258e-05  4e-07  2e-09  3e-20
 7:  7.0633e-05  7.0599e-05  3e-08  1e-16  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.4594e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  9.4505e-05 -8.8577e-01  9e-01  1e-02  5e-16
 2:  9.4500e-05 -1.0535e-02  1e-02  1e-04  3e-16
 3:  9.4497e-05 -1.8695e-05  1e-04  1e-06  3e-18
 4:  9.4311e-05  8.6635e-05  8e-06  8e-08  2e-19
 5:  9.2838e-05  8.7440e-05  5e-06  1e-08  6e-20
 6:  9.2786e-05  9.1628e-05  1e-06  3e-09  2e-20
 7:  9.2780e-05  9.1371e-05  1e-06  2e-09  4e-20
 8:  9.2678e-05  9.2592e-05  9e-08  1e-10  1e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.0307e-04 -1.3049e+00  1e+01  3e+00  3e-16
 1:  1.0282e-04 -8.8576e-01  9e-01  1e-02  9e-16
 2:  1.0279e-04 -1.0525e-02  1e-02  1e-04  4e-16
 3:  1.0279e-04 -1.5067e-05  1e-04  1e-06  5e-18
 4:  1.0245e-04  9.0480e-05  1e-05  1e-07  5e-19
 5:  9.9966e-05  8.9616e-05  1e-05  6e-08  2e-19
 6:  9.9559e-05  9.8049e-05  2e-06  7e-09  2e-20
 7:  9.9313e-05  9.9284e-05  3e-08  4e-11  4e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.3847e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  9.3686e-05 -8.8577e-01  9e-01  1e-02  5e-16
 2:  9.3672e-05 -1.0535e-02  1e-02  1e-04  5e-16
 3:  9.3667e-05 -2.3914e-05  1e-04  1e-06  8e-18
 4:  9.3264e-05  8.1660e-05  1e-05  1e-07  8e-19
 5:  9.1041e-05  8.0898e-05  1e-05  5e-08  3e-19
 6:  9.0672e-05  8.9851e-05  8e-07  4e-09  8e-20
 7:  9.0575e-05  9.0518e-05  6e-08  1e-16  5e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  8.7113e-05 -1.3049e+00  1e+01  3e+00  1e-16
 1:  8.6687e-05 -8.8578e-01  9e-01  1e-02  3e-16
 2:  8.6647e-05 -1.0545e-02  1e-02  1e-04  2e-16
 3:  8.6640e-05 -3.1911e-05  1e-04  1e-06  9e-18
 4:  8.6070e-05  7.4693e-05  1e-05  1e-07  8e-19
 5:  8.2792e-05  7.8050e-05  5e-06  2e-08  2e-19
 6:  8.2558e-05  8.2310e-05  2e-07  1e-09  2e-20
 7:  8.2537e-05  8.2533e-05  4e-09  1e-11  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  9.6015e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  9.7811e-05 -8.8575e-01  9e-01  1e-02  5e-16
 2:  9.8000e-05 -1.0526e-02  1e-02  1e-04  3e-16
 3:  9.7969e-05 -3.2314e-05  1e-04  1e-06  7e-18
 4:  9.5735e-05  7.8434e-05  2e-05  2e-07  9e-19
 5:  9.0450e-05  8.9261e-05  1e-06  9e-10  6e-20
 6:  9.0248e-05  9.0235e-05  1e-08  9e-12  5e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  8.8571e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  9.0269e-05 -8.8576e-01  9e-01  1e-02  3e-16
 2:  9.0448e-05 -1.0534e-02  1e-02  1e-04  3e-16
 3:  9.0422e-05 -3.7652e-05  1e-04  1e-06  3e-18
 4:  8.8545e-05  7.2286e-05  2e-05  2e-07  4e-19
 5:  8.3672e-05  8.2552e-05  1e-06  2e-16  7e-20
 6:  8.3470e-05  8.3458e-05  1e-08  1e-16  7e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.9555e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  8.1886e-05 -8.8577e-01  9e-01  1e-02  8e-16
 2:  8.2131e-05 -1.0543e-02  1e-02  1e-04  4e-16
 3:  8.2099e-05 -4.8121e-05  1e-04  1e-06  4e-18
 4:  7.9874e-05  6.2619e-05  2e-05  2e-07  4e-19
 5:  7.4587e-05  7.3400e-05  1e-06  6e-10  3e-20
 6:  7.4381e-05  7.4369e-05  1e-08  6e-12  7e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.1251e-05 -1.3049e+00  1e+01  3e+00  1e-16
 1:  7.3683e-05 -8.8578e-01  9e-01  1e-02  4e-16
 2:  7.3937e-05 -1.0551e-02  1e-02  1e-04  5e-16
 3:  7.3909e-05 -5.5236e-05  1e-04  1e-06  1e-17
 4:  7.1843e-05  5.5020e-05  2e-05  2e-07  2e-18
 5:  6.6683e-05  6.5423e-05  1e-06  2e-09  8e-20
 6:  6.6473e-05  6.6460e-05  1e-08  2e-11  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.5851e-05 -1.3049e+00  1e+01  3e+00  1e-16
 1:  7.7287e-05 -8.8579e-01  9e-01  1e-02  6e-16
 2:  7.7439e-05 -1.0556e-02  1e-02  1e-04  3e-16
 3:  7.7416e-05 -5.2919e-05  1e-04  1e-06  1e-17
 4:  7.5798e-05  5.6359e-05  2e-05  2e-07  1e-18
 5:  7.0121e-05  6.6703e-05  3e-06  6e-09  9e-20
 6:  6.9631e-05  6.9582e-05  5e-08  9e-11  5e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.5964e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  7.7033e-05 -8.8579e-01  9e-01  1e-02  3e-16
 2:  7.7145e-05 -1.0555e-02  1e-02  1e-04  3e-16
 3:  7.7131e-05 -4.7089e-05  1e-04  1e-06  5e-18
 4:  7.6065e-05  6.0641e-05  2e-05  2e-07  6e-19
 5:  7.1690e-05  6.8889e-05  3e-06  4e-09  4e-20
 6:  7.1317e-05  7.1278e-05  4e-08  5e-11  4e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  6.7786e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  6.8644e-05 -8.8580e-01  9e-01  1e-02  5e-16
 2:  6.8735e-05 -1.0562e-02  1e-02  1e-04  4e-16
 3:  6.8728e-05 -4.8159e-05  1e-04  1e-06  8e-18
 4:  6.8142e-05  5.8259e-05  1e-05  1e-07  7e-19
 5:  6.5530e-05  6.3896e-05  2e-06  1e-16  2e-20
 6:  6.5285e-05  6.5256e-05  3e-08  1e-16  4e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  6.0114e-05 -1.3049e+00  1e+01  3e+00  2e-16
 1:  6.0380e-05 -8.8581e-01  9e-01  1e-02  6e-16
 2:  6.0409e-05 -1.0570e-02  1e-02  1e-04  3e-16
 3:  6.0405e-05 -5.1642e-05  1e-04  1e-06  1e-17
 4:  6.0042e-05  5.4219e-05  6e-06  6e-08  5e-19
 5:  5.8676e-05  5.7894e-05  8e-07  3e-09  2e-20
 6:  5.8504e-05  5.8449e-05  6e-08  9e-17  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  5.3229e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  5.3586e-05 -8.8581e-01  9e-01  1e-02  5e-16
 2:  5.3624e-05 -1.0576e-02  1e-02  1e-04  3e-16
 3:  5.3620e-05 -5.6652e-05  1e-04  1e-06  4e-18
 4:  5.3315e-05  4.9067e-05  4e-06  5e-08  2e-19
 5:  5.2320e-05  5.2079e-05  2e-07  1e-09  2e-20
 6:  5.2282e-05  5.2262e-05  2e-08  7e-17  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  4.5568e-05 -1.3050e+00  1e+01  3e+00  2e-16
 1:  4.5590e-05 -8.8582e-01  9e-01  1e-02  5e-16
 2:  4.5593e-05 -1.0584e-02  1e-02  1e-04  3e-16
 3:  4.5591e-05 -6.5457e-05  1e-04  1e-06  7e-18
 4:  4.5443e-05  3.9856e-05  6e-06  6e-08  4e-19
 5:  4.4253e-05  4.1588e-05  3e-06  3e-09  3e-20
 6:  4.4243e-05  4.4145e-05  1e-07  1e-10  8e-21
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.9424e-05 -1.3050e+00  1e+01  3e+00  2e-16
 1:  3.9418e-05 -8.8583e-01  9e-01  1e-02  6e-16
 2:  3.9419e-05 -1.0591e-02  1e-02  1e-04  4e-16
 3:  3.9418e-05 -7.1065e-05  1e-04  1e-06  6e-18
 4:  3.9320e-05  3.4219e-05  5e-06  6e-08  2e-19
 5:  3.8313e-05  3.6108e-05  2e-06  1e-09  2e-20
 6:  3.8300e-05  3.8214e-05  9e-08  5e-11  8e-21
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  4.0674e-05 -1.2834e+00  1e+01  3e+00  3e-16
 1:  4.0885e-05 -8.7298e-01  9e-01  1e-02  5e-16
 2:  4.0908e-05 -1.0333e-02  1e-02  1e-04  3e-16
 3:  4.0907e-05 -6.5195e-05  1e-04  1e-06  7e-18
 4:  4.0777e-05  3.7723e-05  3e-06  3e-08  2e-19
 5:  4.0161e-05  3.9845e-05  3e-07  3e-09  3e-20
 6:  4.0102e-05  4.0079e-05  2e-08  1e-16  1e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.9844e-05 -1.3050e+00  1e+01  3e+00  2e-16
 1:  3.9890e-05 -8.8583e-01  9e-01  1e-02  7e-16
 2:  3.9897e-05 -1.0590e-02  1e-02  1e-04  5e-16
 3:  3.9896e-05 -6.9207e-05  1e-04  1e-06  5e-18
 4:  3.9810e-05  3.6064e-05  4e-06  4e-08  2e-19
 5:  3.9070e-05  3.8185e-05  9e-07  5e-10  2e-20
 6:  3.9035e-05  3.8972e-05  6e-08  3e-11  1e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.7181e-05 -1.2834e+00  1e+01  3e+00  3e-16
 1:  3.7298e-05 -8.7299e-01  9e-01  1e-02  3e-16
 2:  3.7313e-05 -1.0337e-02  1e-02  1e-04  3e-16
 3:  3.7312e-05 -6.8152e-05  1e-04  1e-06  4e-18
 4:  3.7239e-05  3.4667e-05  3e-06  3e-08  9e-20
 5:  3.6757e-05  3.6466e-05  3e-07  2e-09  1e-20
 6:  3.6715e-05  3.6704e-05  1e-08  6e-17  1e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.1271e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  7.0008e-05 -8.8579e-01  9e-01  1e-02  3e-16
 2:  6.9881e-05 -1.0557e-02  1e-02  1e-04  3e-16
 3:  6.9873e-05 -5.7956e-05  1e-04  1e-06  6e-18
 4:  6.9429e-05  4.8325e-05  2e-05  2e-07  1e-18
 5:  6.4325e-05  4.4926e-05  2e-05  1e-07  6e-19
 6:  6.4122e-05  5.9526e-05  5e-06  3e-08  2e-19
 7:  6.3558e-05  6.2661e-05  9e-07  6e-17  5e-20
 8:  6.3452e-05  6.3418e-05  3e-08  2e-16  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.0973e-04 -1.3073e+00  1e+01  3e+00  4e-16
 1:  1.0823e-04 -8.8994e-01  9e-01  1e-02  7e-16
 2:  1.0806e-04 -1.0602e-02  1e-02  1e-04  2e-16
 3:  1.0802e-04 -3.9390e-05  1e-04  2e-06  8e-18
 4:  1.0584e-04  7.1345e-05  3e-05  4e-07  2e-18
 5:  9.7276e-05  6.7114e-05  3e-05  2e-07  1e-18
 6:  9.6268e-05  8.7828e-05  8e-06  5e-08  3e-19
 7:  9.4618e-05  9.4029e-05  6e-07  8e-17  4e-20
 8:  9.4476e-05  9.4469e-05  7e-09  6e-17  5e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.0249e-04 -1.3049e+00  1e+01  3e+00  2e-16
 1:  1.0130e-04 -8.8575e-01  9e-01  1e-02  2e-16
 2:  1.0117e-04 -1.0519e-02  1e-02  1e-04  4e-16
 3:  1.0113e-04 -4.1479e-05  1e-04  2e-06  1e-17
 4:  9.9032e-05  6.7879e-05  3e-05  3e-07  2e-18
 5:  9.1526e-05  6.4215e-05  3e-05  2e-07  1e-18
 6:  9.0347e-05  8.3405e-05  7e-06  4e-08  2e-19
 7:  8.8831e-05  8.8535e-05  3e-07  2e-16  8e-20
 8:  8.8743e-05  8.8740e-05  3e-09  8e-17  5e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  8.9210e-05 -1.2761e+00  1e+01  3e+00  3e-16
 1:  8.7324e-05 -8.7254e-01  9e-01  1e-02  4e-16
 2:  8.7128e-05 -1.0276e-02  1e-02  1e-04  3e-16
 3:  8.7104e-05 -4.8833e-05  1e-04  2e-06  6e-18
 4:  8.5718e-05  5.6985e-05  3e-05  3e-07  1e-18
 5:  7.8635e-05  5.3349e-05  3e-05  2e-07  8e-19
 6:  7.8136e-05  6.9769e-05  8e-06  5e-08  2e-19
 7:  7.6720e-05  7.5282e-05  1e-06  2e-16  3e-20
 8:  7.6526e-05  7.6480e-05  5e-08  6e-17  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.0965e-04 -1.3049e+00  1e+01  3e+00  2e-16
 1:  1.0788e-04 -8.8575e-01  9e-01  1e-02  4e-16
 2:  1.0769e-04 -1.0517e-02  1e-02  1e-04  4e-16
 3:  1.0768e-04 -3.3685e-05  1e-04  2e-06  1e-17
 4:  1.0689e-04  7.3948e-05  3e-05  3e-07  2e-18
 5:  9.8048e-05  6.8446e-05  3e-05  2e-07  1e-18
 6:  9.7801e-05  9.1602e-05  6e-06  4e-08  3e-19
 7:  9.7047e-05  9.5504e-05  2e-06  1e-09  6e-20
 8:  9.6880e-05  9.6842e-05  4e-08  3e-11  8e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.7707e-04 -1.2664e+00  1e+01  3e+00  2e-16
 1:  1.7421e-04 -8.6807e-01  9e-01  1e-02  2e-16
 2:  1.7392e-04 -1.0096e-02  1e-02  1e-04  1e-16
 3:  1.7391e-04  3.1986e-05  1e-04  2e-06  5e-18
 4:  1.7325e-04  1.3646e-04  4e-05  4e-07  1e-18
 5:  1.6280e-04  1.3028e-04  3e-05  2e-07  7e-19
 6:  1.6267e-04  1.6018e-04  2e-06  2e-08  5e-20
 7:  1.6240e-04  1.6210e-04  3e-07  5e-11  8e-20
 8:  1.6235e-04  1.6234e-04  6e-09  1e-12  1e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.1360e-04 -1.2663e+00  1e+01  3e+00  1e-16
 1:  3.1209e-04 -8.6793e-01  9e-01  1e-02  6e-16
 2:  3.1194e-04 -9.9582e-03  1e-02  1e-04  2e-16
 3:  3.1193e-04  1.8782e-04  1e-04  1e-06  8e-18
 4:  3.1114e-04  2.9040e-04  2e-05  2e-07  1e-18
 5:  3.0604e-04  2.8731e-04  2e-05  1e-07  7e-19
 6:  3.0546e-04  3.0381e-04  2e-06  9e-09  1e-19
 7:  3.0543e-04  3.0454e-04  9e-07  1e-16  1e-19
 8:  3.0524e-04  3.0518e-04  6e-08  2e-16  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  4.8613e-04 -1.3069e+00  1e+01  3e+00  2e-16
 1:  4.8752e-04 -8.8954e-01  9e-01  1e-02  5e-16
 2:  4.8766e-04 -1.0217e-02  1e-02  1e-04  4e-17
 3:  4.8750e-04  3.3498e-04  2e-04  2e-06  5e-18
 4:  4.8031e-04  4.5776e-04  2e-05  2e-07  7e-19
 5:  4.7289e-04  4.7158e-04  1e-06  5e-09  1e-19
 6:  4.7266e-04  4.7263e-04  3e-08  8e-11  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  6.3571e-04 -1.3043e+00  1e+01  3e+00  2e-16
 1:  6.3967e-04 -8.8518e-01  9e-01  1e-02  6e-16
 2:  6.4008e-04 -9.9768e-03  1e-02  1e-04  2e-16
 3:  6.3990e-04  4.8833e-04  2e-04  2e-06  5e-18
 4:  6.3251e-04  6.1001e-04  2e-05  2e-07  9e-19
 5:  6.2506e-04  6.2353e-04  2e-06  7e-09  2e-19
 6:  6.2476e-04  6.2475e-04  2e-08  7e-11  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  6.0743e-04 -1.3043e+00  1e+01  3e+00  4e-17
 1:  6.1317e-04 -8.8521e-01  9e-01  1e-02  3e-16
 2:  6.1375e-04 -1.0004e-02  1e-02  1e-04  3e-16
 3:  6.1350e-04  4.5998e-04  2e-04  2e-06  9e-18
 4:  6.0487e-04  5.8349e-04  2e-05  2e-07  1e-18
 5:  5.9777e-04  5.9624e-04  2e-06  6e-09  3e-19
 6:  5.9747e-04  5.9746e-04  2e-08  7e-11  3e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  5.5216e-04 -1.3044e+00  1e+01  3e+00  3e-16
 1:  5.5819e-04 -8.8526e-01  9e-01  1e-02  3e-16
 2:  5.5881e-04 -1.0060e-02  1e-02  1e-04  3e-16
 3:  5.5857e-04  4.0887e-04  1e-04  2e-06  1e-17
 4:  5.5036e-04  5.3081e-04  2e-05  2e-07  1e-18
 5:  5.4396e-04  5.4254e-04  1e-06  5e-09  4e-19
 6:  5.4369e-04  5.4367e-04  2e-08  6e-11  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  4.5638e-04 -1.2829e+00  1e+01  3e+00  1e-16
 1:  4.6066e-04 -8.7254e-01  9e-01  1e-02  4e-16
 2:  4.6109e-04 -9.9097e-03  1e-02  1e-04  2e-16
 3:  4.6095e-04  3.2932e-04  1e-04  1e-06  1e-17
 4:  4.5546e-04  4.4213e-04  1e-05  1e-07  1e-18
 5:  4.5188e-04  4.5050e-04  1e-06  4e-09  4e-20
 6:  4.5145e-04  4.5141e-04  4e-08  6e-11  1e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.1226e-04 -1.2831e+00  1e+01  3e+00  3e-16
 1:  3.1497e-04 -8.7269e-01  9e-01  1e-02  5e-16
 2:  3.1524e-04 -1.0056e-02  1e-02  1e-04  4e-16
 3:  3.1518e-04  1.9535e-04  1e-04  1e-06  9e-18
 4:  3.1209e-04  3.0351e-04  9e-06  9e-08  7e-19
 5:  3.0972e-04  3.0937e-04  4e-07  2e-09  2e-19
 6:  3.0964e-04  3.0963e-04  6e-09  3e-11  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.9920e-04 -1.3046e+00  1e+01  3e+00  2e-16
 1:  4.0081e-04 -8.8545e-01  9e-01  1e-02  4e-16
 2:  4.0097e-04 -1.0227e-02  1e-02  1e-04  1e-16
 3:  4.0090e-04  2.7069e-04  1e-04  1e-06  6e-18
 4:  3.9761e-04  3.8145e-04  2e-05  2e-07  8e-19
 5:  3.9280e-04  3.8952e-04  3e-06  1e-08  3e-19
 6:  3.9231e-04  3.9224e-04  6e-08  2e-10  1e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.5561e-04 -1.3046e+00  1e+01  3e+00  1e-16
 1:  3.5732e-04 -8.8550e-01  9e-01  1e-02  4e-16
 2:  3.5749e-04 -1.0271e-02  1e-02  1e-04  2e-16
 3:  3.5744e-04  2.2701e-04  1e-04  1e-06  1e-17
 4:  3.5451e-04  3.3735e-04  2e-05  2e-07  1e-18
 5:  3.4938e-04  3.4560e-04  4e-06  2e-08  3e-19
 6:  3.4880e-04  3.4873e-04  8e-08  3e-10  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  2.9201e-04 -1.3047e+00  1e+01  3e+00  3e-16
 1:  2.9330e-04 -8.8557e-01  9e-01  1e-02  5e-16
 2:  2.9343e-04 -1.0336e-02  1e-02  1e-04  2e-16
 3:  2.9339e-04  1.6424e-04  1e-04  1e-06  2e-18
 4:  2.9103e-04  2.7373e-04  2e-05  2e-07  4e-19
 5:  2.8587e-04  2.8199e-04  4e-06  2e-08  2e-19
 6:  2.8531e-04  2.8524e-04  7e-08  3e-10  1e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  2.3265e-04 -1.3048e+00  1e+01  3e+00  2e-16
 1:  2.3403e-04 -8.8563e-01  9e-01  1e-02  4e-16
 2:  2.3417e-04 -1.0396e-02  1e-02  1e-04  3e-16
 3:  2.3415e-04  1.0984e-04  1e-04  1e-06  6e-18
 4:  2.3245e-04  2.1804e-04  1e-05  2e-07  6e-19
 5:  2.2821e-04  2.2509e-04  3e-06  1e-08  6e-20
 6:  2.2777e-04  2.2771e-04  6e-08  2e-10  2e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  2.1234e-04 -1.3048e+00  1e+01  3e+00  4e-16
 1:  2.1434e-04 -8.8565e-01  9e-01  1e-02  4e-16
 2:  2.1454e-04 -1.0415e-02  1e-02  1e-04  4e-16
 3:  2.1451e-04  9.4259e-05  1e-04  1e-06  5e-18
 4:  2.1270e-04  2.0232e-04  1e-05  1e-07  5e-19
 5:  2.0991e-04  2.0842e-04  1e-06  3e-09  6e-20
 6:  2.0957e-04  2.0952e-04  6e-08  8e-11  9e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.8611e-04 -1.3048e+00  1e+01  3e+00  9e-17
 1:  1.8805e-04 -8.8567e-01  9e-01  1e-02  7e-16
 2:  1.8825e-04 -1.0442e-02  1e-02  1e-04  3e-16
 3:  1.8822e-04  6.6834e-05  1e-04  1e-06  1e-17
 4:  1.8656e-04  1.7478e-04  1e-05  1e-07  9e-19
 5:  1.8321e-04  1.8139e-04  2e-06  1e-09  8e-20
 6:  1.8288e-04  1.8285e-04  3e-08  2e-11  1e-19
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  1.1217e-04 -1.3049e+00  1e+01  3e+00  2e-16
 1:  1.1379e-04 -8.8575e-01  9e-01  1e-02  7e-16
 2:  1.1396e-04 -1.0516e-02  1e-02  1e-04  2e-16
 3:  1.1395e-04 -1.1191e-06  1e-04  1e-06  7e-18
 4:  1.1286e-04  1.0573e-04  7e-06  8e-08  4e-19
 5:  1.1097e-04  1.1030e-04  7e-07  3e-09  5e-20
 6:  1.1084e-04  1.1080e-04  4e-08  8e-11  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  7.0730e-05 -1.3049e+00  1e+01  3e+00  3e-16
 1:  7.1896e-05 -8.8579e-01  9e-01  1e-02  6e-16
 2:  7.2018e-05 -1.0558e-02  1e-02  1e-04  4e-16
 3:  7.2012e-05 -3.9849e-05  1e-04  1e-06  7e-18
 4:  7.1462e-05  6.6330e-05  5e-06  6e-08  3e-19
 5:  7.0054e-05  6.9921e-05  1e-07  1e-09  3e-20
 6:  7.0032e-05  7.0031e-05  1e-09  1e-11  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  5.8481e-05 -1.2833e+00  1e+01  3e+00  2e-16
 1:  5.9266e-05 -8.7296e-01  9e-01  1e-02  7e-16
 2:  5.9346e-05 -1.0315e-02  1e-02  1e-04  2e-16
 3:  5.9342e-05 -4.8782e-05  1e-04  1e-06  5e-18
 4:  5.8984e-05  5.4488e-05  4e-06  5e-08  2e-19
 5:  5.7841e-05  5.7641e-05  2e-07  1e-09  4e-20
 6:  5.7806e-05  5.7800e-05  6e-09  2e-11  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  5.0329e-05 -1.2833e+00  1e+01  3e+00  3e-16
 1:  5.0680e-05 -8.7297e-01  9e-01  1e-02  6e-16
 2:  5.0717e-05 -1.0323e-02  1e-02  1e-04  2e-16
 3:  5.0714e-05 -5.7044e-05  1e-04  1e-06  7e-18
 4:  5.0479e-05  4.6031e-05  4e-06  5e-08  2e-19
 5:  4.9483e-05  4.9039e-05  4e-07  2e-09  3e-20
 6:  4.9373e-05  4.9352e-05  2e-08  4e-11  3e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.5806e-05 -1.2834e+00  1e+01  3e+00  3e-16
 1:  3.5627e-05 -8.7299e-01  9e-01  1e-02  4e-16
 2:  3.5611e-05 -1.0338e-02  1e-02  1e-04  3e-16
 3:  3.5610e-05 -7.4199e-05  1e-04  1e-06  9e-18
 4:  3.5516e-05  2.8578e-05  7e-06  8e-08  6e-19
 5:  3.4299e-05  2.9431e-05  5e-06  1e-08  7e-20
 6:  3.4221e-05  3.3819e-05  4e-07  9e-10  2e-20
 7:  3.4700e-05  3.3146e-05  2e-06  1e-16  2e-20
 8:  3.4276e-05  3.3325e-05  1e-06  1e-16  2e-20
 9:  3.4172e-05  3.4124e-05  5e-08  1e-16  2e-20
Optimal solution found.
     pcost       dcost       gap    pres   dres
 0:  3.4657e-05 -1.2834e+00  1e+01  3e+00  3e-16
 1:  3.4475e-05 -8.7299e-01  9e-01  1e-02  5e-16
 2:  3.4459e-05 -1.0339e-02  1e-02  1e-04  2e-16
 3:  3.4457e-05 -7.5778e-05  1e-04  1e-06  7e-18
 4:  3.4346e-05  2.7016e-05  7e-06  8e-08  4e-19
 5:  3.2871e-05  2.7600e-05  5e-06  2e-08  1e-19
 6:  3.2736e-05  3.2267e-05  5e-07  2e-09  7e-21
 7:  3.2672e-05  3.2666e-05  6e-09  2e-11  1e-20
Optimal solution found.

In [84]:
positionSheet.dropna()


Out[84]:
000001.SH 801010.SI 801020.SI 801030.SI
time
2012-07-31 0.149929 0.448640 0.112403 0.289027
2012-08-31 0.189895 0.346867 0.061452 0.401786
2012-09-28 0.149976 0.249962 0.150070 0.449992
2012-10-31 0.289978 0.149839 0.110198 0.449986
2012-11-30 0.349999 0.149949 0.050128 0.449924
2012-12-31 0.449997 0.149909 0.050155 0.349939
2013-01-31 0.449986 0.198134 0.001891 0.349989
2013-02-28 0.349960 0.199843 0.000254 0.449943
2013-03-29 0.349926 0.167785 0.033543 0.448745
2013-04-26 0.349980 0.247426 0.116246 0.286347
2013-05-31 0.349904 0.245811 0.055685 0.348600
2013-06-28 0.249947 0.348824 0.048852 0.352377
2013-07-31 0.249932 0.349839 0.001544 0.398685
2013-08-30 0.249881 0.342449 0.001615 0.406055
2013-09-30 0.249996 0.224012 0.075995 0.449997
2013-10-31 0.249990 0.250050 0.149965 0.349995
2013-11-29 0.249990 0.250054 0.149963 0.349993
2013-12-31 0.249990 0.250036 0.149978 0.349995
2014-01-30 0.249989 0.250035 0.149981 0.349995
2014-02-28 0.249965 0.150113 0.149929 0.449992
2014-03-31 0.249968 0.150164 0.149879 0.449990
2014-04-30 0.249976 0.150353 0.149807 0.449864
2014-05-30 0.249883 0.199202 0.101821 0.449094
2014-06-30 0.249956 0.226136 0.124618 0.399290
2014-07-31 0.249975 0.306667 0.020430 0.422928
2014-08-29 0.249972 0.325843 0.027862 0.396322
2014-09-30 0.249900 0.291400 0.124252 0.334447
2014-10-31 0.249969 0.247073 0.075225 0.427733
2014-11-28 0.249931 0.319256 0.117384 0.313428
2014-12-31 0.400262 0.249605 0.000219 0.349914
2015-01-30 0.399994 0.289991 0.000023 0.309992
2015-02-27 0.399993 0.249996 0.000015 0.349996
2015-03-31 0.339940 0.289903 0.000222 0.369934
2015-04-30 0.400090 0.249853 0.000110 0.349947
2015-05-29 0.329755 0.300242 0.000010 0.369993
2015-06-30 0.329976 0.278220 0.021859 0.369945
2015-07-31 0.289989 0.250568 0.149449 0.309993
2015-08-31 0.249993 0.250035 0.149976 0.349995
2015-09-30 0.249994 0.250024 0.149987 0.349995
2015-10-30 0.249994 0.250022 0.149989 0.349994
2015-11-30 0.249987 0.191800 0.149962 0.408251
2015-12-31 0.249995 0.259260 0.149989 0.340756
2016-01-29 0.249967 0.449991 0.149548 0.150495
2016-02-29 0.249958 0.449991 0.149799 0.150252
2016-03-31 0.249958 0.449991 0.149751 0.150300
2016-04-29 0.249962 0.449991 0.149843 0.150203
2016-05-31 0.249972 0.447275 0.149928 0.152825
2016-06-30 0.249987 0.449896 0.149959 0.150158
2016-07-29 0.249969 0.411227 0.149950 0.188853
2016-08-31 0.249997 0.333143 0.149995 0.266865
2016-09-30 0.249992 0.334473 0.149978 0.265557
2016-10-31 0.249967 0.384649 0.149005 0.216379
2016-11-30 0.249888 0.387694 0.029987 0.332430
2016-12-30 0.249978 0.389908 0.001103 0.359011

In [85]:
positionSheet1 = positionSheet.fillna(method='ffill').fillna(0)
positionSheet


Out[85]:
000001.SH 801010.SI 801020.SI 801030.SI
time
2012-01-04 NaN NaN NaN NaN
2012-01-05 NaN NaN NaN NaN
2012-01-06 NaN NaN NaN NaN
2012-01-09 NaN NaN NaN NaN
2012-01-10 NaN NaN NaN NaN
2012-01-11 NaN NaN NaN NaN
2012-01-12 NaN NaN NaN NaN
2012-01-13 NaN NaN NaN NaN
2012-01-16 NaN NaN NaN NaN
2012-01-17 NaN NaN NaN NaN
2012-01-18 NaN NaN NaN NaN
2012-01-19 NaN NaN NaN NaN
2012-01-20 NaN NaN NaN NaN
2012-01-30 NaN NaN NaN NaN
2012-01-31 NaN NaN NaN NaN
2012-02-01 NaN NaN NaN NaN
2012-02-02 NaN NaN NaN NaN
2012-02-03 NaN NaN NaN NaN
2012-02-06 NaN NaN NaN NaN
2012-02-07 NaN NaN NaN NaN
2012-02-08 NaN NaN NaN NaN
2012-02-09 NaN NaN NaN NaN
2012-02-10 NaN NaN NaN NaN
2012-02-13 NaN NaN NaN NaN
2012-02-14 NaN NaN NaN NaN
2012-02-15 NaN NaN NaN NaN
2012-02-16 NaN NaN NaN NaN
2012-02-17 NaN NaN NaN NaN
2012-02-20 NaN NaN NaN NaN
2012-02-21 NaN NaN NaN NaN
... ... ... ... ...
2016-11-21 NaN NaN NaN NaN
2016-11-22 NaN NaN NaN NaN
2016-11-23 NaN NaN NaN NaN
2016-11-24 NaN NaN NaN NaN
2016-11-25 NaN NaN NaN NaN
2016-11-28 NaN NaN NaN NaN
2016-11-29 NaN NaN NaN NaN
2016-11-30 0.249888 0.387694 0.029987 0.332430
2016-12-01 NaN NaN NaN NaN
2016-12-02 NaN NaN NaN NaN
2016-12-05 NaN NaN NaN NaN
2016-12-06 NaN NaN NaN NaN
2016-12-07 NaN NaN NaN NaN
2016-12-08 NaN NaN NaN NaN
2016-12-09 NaN NaN NaN NaN
2016-12-12 NaN NaN NaN NaN
2016-12-13 NaN NaN NaN NaN
2016-12-14 NaN NaN NaN NaN
2016-12-15 NaN NaN NaN NaN
2016-12-16 NaN NaN NaN NaN
2016-12-19 NaN NaN NaN NaN
2016-12-20 NaN NaN NaN NaN
2016-12-21 NaN NaN NaN NaN
2016-12-22 NaN NaN NaN NaN
2016-12-23 NaN NaN NaN NaN
2016-12-26 NaN NaN NaN NaN
2016-12-27 NaN NaN NaN NaN
2016-12-28 NaN NaN NaN NaN
2016-12-29 NaN NaN NaN NaN
2016-12-30 0.249978 0.389908 0.001103 0.359011

1214 rows × 4 columns


In [86]:
totalNW = (positionSheet1 * tANetWorth).sum(axis=1)
equalWeighted = (tANetWorth.sum(axis=1)/4)
equalWeighted.name = 'Equal_Weighed'

totalNW.name ='Dynamic_Optimize'

compareNW = pd.concat([totalNW ,equalWeighted ],axis=1)
compareNW = pd.concat([compareNW ,tANetWorth ],axis=1)
compareNW.index.name = 'time'
compareNW.plot(figsize=(22,14),fontsize =13,legend =True)


Out[86]:
<matplotlib.axes._subplots.AxesSubplot at 0x4da987f0>

In [87]:
compareNW


Out[87]:
Dynamic_Optimize Equal_Weighed 000001.SH 801010.SI 801020.SI 801030.SI
time
2012-01-04 0.000000 1.000000 1.000000 1.000000 1.000000 1.000000
2012-01-05 0.000000 0.971178 0.990348 0.945572 0.982490 0.966300
2012-01-06 0.000000 0.974103 0.997237 0.930368 0.993959 0.974849
2012-01-09 0.000000 1.017895 1.026044 0.963819 1.061592 1.020124
2012-01-10 0.000000 1.060072 1.053634 1.014860 1.111130 1.060663
2012-01-11 0.000000 1.059718 1.049164 1.019525 1.108796 1.061388
2012-01-12 0.000000 1.056175 1.048686 1.010516 1.101953 1.063545
2012-01-13 0.000000 1.031963 1.034660 0.974467 1.088276 1.030449
2012-01-16 0.000000 1.005233 1.016965 0.941215 1.064835 0.997916
2012-01-17 0.000000 1.060793 1.059457 0.989605 1.137403 1.056706
2012-01-18 0.000000 1.039976 1.044710 0.962469 1.114168 1.038557
2012-01-19 0.000000 1.051569 1.058397 0.970508 1.127792 1.049577
2012-01-20 0.000000 1.062858 1.069018 0.996758 1.128074 1.057582
2012-01-30 0.000000 1.052331 1.053309 0.995354 1.109000 1.051661
2012-01-31 0.000000 1.055980 1.056799 0.999096 1.114677 1.053347
2012-02-01 0.000000 1.046119 1.045492 0.999795 1.092475 1.046713
2012-02-02 0.000000 1.068177 1.065994 1.019597 1.120241 1.066874
2012-02-03 0.000000 1.079673 1.074221 1.027214 1.125479 1.091777
2012-02-06 0.000000 1.086311 1.074558 1.035693 1.130365 1.104628
2012-02-07 0.000000 1.067124 1.056473 1.015957 1.114166 1.081899
2012-02-08 0.000000 1.097723 1.082115 1.036572 1.158905 1.113297
2012-02-09 0.000000 1.099919 1.083064 1.043792 1.157705 1.115116
2012-02-10 0.000000 1.103312 1.084167 1.052475 1.155755 1.120849
2012-02-13 0.000000 1.107372 1.084109 1.060044 1.156976 1.128359
2012-02-14 0.000000 1.107544 1.080843 1.061960 1.158010 1.129362
2012-02-15 0.000000 1.120529 1.090953 1.075670 1.169632 1.145862
2012-02-16 0.000000 1.115053 1.086416 1.073145 1.158976 1.141675
2012-02-17 0.000000 1.110400 1.086564 1.064377 1.154337 1.136322
2012-02-20 0.000000 1.112933 1.089521 1.065148 1.158995 1.138068
2012-02-21 0.000000 1.122871 1.097742 1.073832 1.172937 1.146973
... ... ... ... ... ... ...
2016-11-21 1.730943 1.609150 1.483435 2.050240 0.840410 2.062518
2016-11-22 1.746904 1.626412 1.497357 2.063123 0.864393 2.080776
2016-11-23 1.740783 1.619656 1.494032 2.058507 0.855255 2.070831
2016-11-24 1.737205 1.616365 1.494308 2.053512 0.853752 2.063890
2016-11-25 1.742544 1.620798 1.503620 2.061099 0.855051 2.063424
2016-11-28 1.752871 1.628399 1.510563 2.084588 0.861532 2.056912
2016-11-29 1.737157 1.613244 1.513294 2.060622 0.841583 2.037476
2016-11-30 1.870950 1.601574 1.498133 2.057441 0.822435 2.028287
2016-12-01 1.884953 1.614594 1.508861 2.072337 0.833175 2.044001
2016-12-02 1.857883 1.592761 1.495279 2.034294 0.823443 2.018028
2016-12-05 1.849377 1.584395 1.477240 2.030468 0.819008 2.010863
2016-12-06 1.850567 1.585615 1.474906 2.026304 0.820316 2.020934
2016-12-07 1.868463 1.601531 1.485322 2.047654 0.832181 2.040968
2016-12-08 1.863097 1.596008 1.482152 2.040164 0.825136 2.036582
2016-12-09 1.864599 1.597340 1.490227 2.042375 0.824222 2.032534
2016-12-12 1.803969 1.544863 1.453390 1.986580 0.793831 1.945650
2016-12-13 1.822386 1.559092 1.454343 2.016373 0.800680 1.964971
2016-12-14 1.816830 1.554473 1.447656 2.002103 0.797959 1.970173
2016-12-15 1.824853 1.559776 1.437121 2.016602 0.800273 1.985108
2016-12-16 1.842433 1.571911 1.439567 2.042665 0.799595 2.005818
2016-12-19 1.850985 1.578656 1.437309 2.060279 0.804806 2.012228
2016-12-20 1.839356 1.568313 1.430299 2.043135 0.796564 2.003256
2016-12-21 1.857452 1.584353 1.446227 2.061285 0.806224 2.023677
2016-12-22 1.854777 1.582165 1.447208 2.050914 0.803285 2.027254
2016-12-23 1.835627 1.564544 1.433654 2.028841 0.788793 2.006887
2016-12-26 1.839476 1.566773 1.439377 2.032475 0.784972 2.010271
2016-12-27 1.837279 1.565259 1.435733 2.027190 0.785606 2.012506
2016-12-28 1.830541 1.560038 1.430004 2.016011 0.784454 2.009685
2016-12-29 1.825501 1.555886 1.427174 2.016945 0.783803 1.995620
2016-12-30 1.865842 1.560072 1.430650 2.022501 0.785093 2.002042

1214 rows × 6 columns


In [88]:
t1 = compareNW.pct_change().dropna().iloc[1:]
shapeRatio1 = t1.mean()/t1.std()
shapeRatio1


Out[88]:
Dynamic_Optimize    0.043172
Equal_Weighed       0.034667
000001.SH           0.030811
801010.SI           0.045274
801020.SI           0.001216
801030.SI           0.046579
dtype: float64

In [89]:
compareNW.dropna().pct_change().dropna()


Out[89]:
Dynamic_Optimize Equal_Weighed 000001.SH 801010.SI 801020.SI 801030.SI
time
2012-07-31 inf -0.016692 -0.002976 -0.019635 -0.019685 -0.024365
2012-08-01 0.012817 0.013589 0.009377 0.011687 0.019643 0.013748
2012-08-02 -0.006366 -0.007760 -0.005735 -0.001829 -0.011903 -0.011609
2012-08-03 0.017495 0.016992 0.010238 0.014892 0.017594 0.025365
2012-08-06 0.021182 0.019574 0.010371 0.022910 0.020733 0.024265
2012-08-07 0.012711 0.008550 0.001255 0.019659 0.000678 0.012387
2012-08-08 -0.004008 -0.001038 0.001562 -0.010792 0.004986 0.000385
2012-08-09 0.013062 0.010157 0.006068 0.017764 0.003699 0.012893
2012-08-10 -0.002725 -0.003741 -0.002432 -0.003550 -0.010461 0.001337
2012-08-13 -0.012224 -0.015175 -0.015094 -0.004070 -0.022022 -0.019750
2012-08-14 0.006075 0.007297 0.003018 0.002067 0.012901 0.011374
2012-08-15 -0.012680 -0.012662 -0.011006 -0.013397 -0.014553 -0.011699
2012-08-16 -0.008907 -0.007275 -0.003185 -0.011269 -0.004733 -0.009641
2012-08-17 -0.001564 0.000157 0.001275 -0.007109 0.002479 0.004110
2012-08-20 0.007968 0.003588 -0.003751 0.016667 -0.003874 0.004902
2012-08-21 0.009708 0.008793 0.005368 0.009873 0.007150 0.012554
2012-08-22 -0.006733 -0.006955 -0.004984 -0.005511 -0.008446 -0.008858
2012-08-23 0.005984 0.006230 0.002544 0.004561 0.009014 0.008783
2012-08-24 -0.021042 -0.020202 -0.009923 -0.024289 -0.027247 -0.019195
2012-08-27 -0.022448 -0.022912 -0.017397 -0.021970 -0.029184 -0.023229
2012-08-28 0.005155 0.006449 0.008487 0.000604 0.006893 0.009880
2012-08-29 -0.011867 -0.013228 -0.009608 -0.011056 -0.022203 -0.010489
2012-08-30 -0.015200 -0.010311 -0.000317 -0.023075 -0.001458 -0.015522
2012-08-31 0.008667 0.001554 -0.002467 0.003672 -0.002755 0.007440
2012-09-03 0.016135 0.013608 0.005678 0.022714 0.009359 0.016350
2012-09-04 -0.007140 -0.007226 -0.007526 -0.006155 -0.007487 -0.007748
2012-09-05 0.001687 -0.001531 -0.002920 0.004156 -0.011702 0.003563
2012-09-06 0.009148 0.009080 0.006987 0.007904 0.010441 0.010995
2012-09-07 0.035617 0.040401 0.036962 0.030990 0.059483 0.035622
2012-09-10 0.009682 0.008797 0.003351 0.008900 0.009516 0.013202
... ... ... ... ... ... ...
2016-11-21 0.001876 0.002778 0.007921 -0.002480 0.002665 0.004401
2016-11-22 0.009221 0.010727 0.009386 0.006284 0.028538 0.008852
2016-11-23 -0.003504 -0.004154 -0.002221 -0.002237 -0.010572 -0.004779
2016-11-24 -0.002056 -0.002032 0.000185 -0.002427 -0.001757 -0.003352
2016-11-25 0.003073 0.002743 0.006232 0.003695 0.001521 -0.000225
2016-11-28 0.005927 0.004689 0.004618 0.011397 0.007580 -0.003156
2016-11-29 -0.008965 -0.009307 0.001808 -0.011497 -0.023156 -0.009449
2016-11-30 0.077019 -0.007234 -0.010019 -0.001544 -0.022752 -0.004510
2016-12-01 0.007484 0.008129 0.007161 0.007240 0.013059 0.007747
2016-12-02 -0.014361 -0.013522 -0.009002 -0.018357 -0.011680 -0.012707
2016-12-05 -0.004578 -0.005253 -0.012064 -0.001881 -0.005386 -0.003551
2016-12-06 0.000643 0.000770 -0.001580 -0.002051 0.001597 0.005008
2016-12-07 0.009670 0.010038 0.007062 0.010537 0.014464 0.009913
2016-12-08 -0.002872 -0.003448 -0.002134 -0.003658 -0.008465 -0.002149
2016-12-09 0.000806 0.000834 0.005448 0.001084 -0.001108 -0.001988
2016-12-12 -0.032517 -0.032853 -0.024719 -0.027319 -0.036873 -0.042747
2016-12-13 0.010209 0.009211 0.000656 0.014997 0.008629 0.009930
2016-12-14 -0.003049 -0.002963 -0.004598 -0.007077 -0.003399 0.002647
2016-12-15 0.004416 0.003412 -0.007277 0.007242 0.002900 0.007580
2016-12-16 0.009634 0.007780 0.001702 0.012924 -0.000847 0.010433
2016-12-19 0.004642 0.004291 -0.001568 0.008623 0.006518 0.003196
2016-12-20 -0.006282 -0.006551 -0.004878 -0.008321 -0.010242 -0.004459
2016-12-21 0.009838 0.010228 0.011136 0.008884 0.012128 0.010194
2016-12-22 -0.001440 -0.001381 0.000678 -0.005031 -0.003646 0.001767
2016-12-23 -0.010325 -0.011138 -0.009366 -0.010763 -0.018041 -0.010046
2016-12-26 0.002097 0.001425 0.003992 0.001791 -0.004844 0.001686
2016-12-27 -0.001195 -0.000967 -0.002532 -0.002600 0.000808 0.001112
2016-12-28 -0.003667 -0.003335 -0.003990 -0.005514 -0.001467 -0.001402
2016-12-29 -0.002753 -0.002662 -0.001979 0.000463 -0.000829 -0.006998
2016-12-30 0.022099 0.002690 0.002435 0.002755 0.001646 0.003218

1076 rows × 6 columns


In [90]:
maxdd = compareNW.copy()
maxdd.iloc[0] = 0
for date in compareNW.index[1:]:
    maxdd.loc[date] = 1-compareNW.loc[date]/compareNW.loc[:date].max()
maxddInfo = pd.concat([maxdd.max(),maxdd.idxmax()],axis=1)
maxddInfo.columns = ['Max_drawdown','Time']
maxddInfo


Out[90]:
Max_drawdown Time
Dynamic_Optimize 0.520626 2016-01-28
Equal_Weighed 0.486450 2016-01-28
000001.SH 0.485970 2016-01-28
801010.SI 0.465448 2015-09-15
801020.SI 0.536796 2014-04-28
801030.SI 0.504192 2015-09-15

In [ ]:


In [93]:
fig = plt.figure(figsize=(18,14))
# Add a subplot
totalNW.plot.area(figsize=(22,14),fontsize =13,color='g',legend =True)
#equatWeighted.plot(figsize=(22,14),fontsize =13,color='r',legend = True)


Out[93]:
<matplotlib.axes._subplots.AxesSubplot at 0x4e489438>

In [ ]:


In [ ]:
#positionSheet.dropna(axis=0)

In [ ]:
positionSheet

In [ ]:
HS300WeightDF = pd.read_csv(path+filanemaZX500Weight,infer_datetime_format=True,parse_dates=[0],index_col=0).iloc[-2000:]

In [ ]:
HS300WeightDF

In [ ]:
for i in range(1,len(HS300WeightDF)):
    HS300WeightToday = HS300WeightDF.iloc[i].dropna().index.tolist()
    #print HS300WeightToday
    print len(HS300WeightToday)
    HS300WeightYes = HS300WeightDF.iloc[i-1].dropna().index.tolist()
    if len(set(HS300WeightToday) | set(HS300WeightYes)) != 500:
        print HS300WeightDF.index[i]

In [ ]:
HS300WeightDF

In [ ]:
benchMarkClose = pd.read_csv(path+filenameHS300,infer_datetime_format=True,parse_dates=[0],index_col=0)[-timeStampNum-1:-5][HSIndex]
benchMarkOpen = pd.read_csv(path+filenameHSOpen,infer_datetime_format=True,parse_dates=[0],index_col=0)[-timeStampNum-1:-5][HSIndex]
benchMarkClose.head()

In [ ]:
def getSVD(inputArray,t,m):
    inputmatrix = getNewMatrix(inputArray,t,m)
    #print inputmatrix
    u,s,v = np.linalg.svd(inputmatrix)
    eviNum = 1 if s[0]/s.sum() > 0.99  else 2
    sNew = np.zeros((eviNum,eviNum))
    np.fill_diagonal(sNew,s[:eviNum])
    matrixForts = np.dot(np.dot(u[:,:eviNum].reshape(u.shape[0],eviNum),sNew),v[:eviNum])
    newts = recreateArray(matrixForts,t,m)
    return newts

In [ ]:
### Method to calculate moving max drawdown
from numpy.lib.stride_tricks import as_strided
def windowed_view(x, window_size):
    """Creat a 2d windowed view of a 1d array.

    `x` must be a 1d numpy array.

    `numpy.lib.stride_tricks.as_strided` is used to create the view.
    The data is not copied.

    Example:

    >>> x = np.array([1, 2, 3, 4, 5, 6])
    >>> windowed_view(x, 3)
    array([[1, 2, 3],
           [2, 3, 4],
           [3, 4, 5],
           [4, 5, 6]])
    """
    y = as_strided(x, shape=(x.size - window_size + 1, window_size),
                   strides=(x.strides[0], x.strides[0]))
    return y

In [ ]:


In [ ]:
def getNewMatrix(inputArray, t, m):
    newMatrix = []
    n = t-m+1
    for i in range(n):
        newdata = list(inputArray[i:m+i])
        newMatrix.append(newdata)
    #newMatrix = np.array(newMatrix).reshape(n,m)
    return np.array(newMatrix)

In [ ]:
benchMarkOpen[-15:]

In [ ]:
inputmatrix = getNewMatrix(benchMarkClose[0:sampleNum].values,sampleNum,10)
len(inputmatrix)

In [ ]:
def calSVD(newMatrix):
    u,s,v = np.linalg.svd(newMatrix)
    return u,s,v

In [ ]:
inputmatrix = getNewMatrix(benchMarkClose[0:sampleNum].values,sampleNum,10)
u,s,v=calSVD(inputmatrix)
eviNum = 1 if s[0]/s.sum() > 0.99  else 2

In [ ]:
#u[:,eviNum].reshape(7,1)

In [ ]:
sNew = np.zeros((eviNum,eviNum))

In [ ]:
np.fill_diagonal(sNew,s[:eviNum])

In [ ]:
v[:eviNum]

In [ ]:
#np.array([[1,2],[6,3]]).dot(np.array([[1,2],[2,3],[3,4]]))

In [ ]:
def recreateArray(newMatrix,t,m):
    ret = []
    n = t - m +1
    for p in range(1,t+1):
        if p<m:
            alpha = p
        elif p>t-m+1:
            alpha = t-p+1
        else:
            alpha = m
        sigma = 0
        for j in range(1,m+1):
            i = p - j +1
            if i>0 and i<n+1:
                sigma += newMatrix[i-1][j-1]
        ret.append(sigma/alpha)
    return np.array(ret)

In [ ]:
np.dot(u[:,:eviNum].reshape(u.shape[0],eviNum),sNew)

In [ ]:
#np.dot(u[:,eviNum].reshape(u.shape[0],eviNum),v[:eviNum])

In [ ]:
np.concatenate((np.diag(np.ones(60)),-np.diag(np.ones(60))))

In [ ]:
a=pd.Series(data=[-1,2,3,4],index = ['a','b','c','d'])
b = pd .Series(data=[4,6,7,8],index = ['a','b','c','d'])
c = pd.Series(data= None ,index =['a','b','c','d','e'] )
a[a>0].index

In [ ]:
matrixForts = np.dot(np.dot(u[:,:eviNum].reshape(u.shape[0],eviNum),sNew),v[:eviNum])

In [ ]:
matrixForts

In [ ]:
ma = benchMarkClose[0:sampleNum].rolling(10,min_periods=1).mean()

In [ ]:
benchMarkClose[0:sampleNum].head()

In [ ]:
ma.tail()

In [ ]:
newts = recreateArray(matrixForts,sampleNum,10)

In [ ]:
getSVD(benchMarkClose[0:sampleNum].values,sampleNum,20)

In [ ]:
plt.figure(figsize=(24,16))
plt.plot(benchMarkClose[0:sampleNum].values, 'blue')
plt.plot(getSVD(benchMarkClose[0:sampleNum].values,sampleNum,5),'red')
#plt.plot(getSVD(benchMarkData[0:sampleNum].values,sampleNum,15),'green')
plt.plot(getSVD(benchMarkClose[0:sampleNum].values,sampleNum,20),'orange')
plt.title('SVD')

In [ ]:
newDF=pd.DataFrame(index = benchMarkClose[0:sampleNum].index,data = None,columns =['SVD20','SVD5','PRICE'],dtype=float)

In [ ]:
newDF['SVD20'] = getSVD(benchMarkClose[0:sampleNum].values,sampleNum,20)
newDF['SVD5'] = getSVD(benchMarkClose[0:sampleNum].values,sampleNum,5)
newDF ['PRICE'] = benchMarkClose[0:sampleNum].values

In [ ]:
newDF['DIFF'] = newDF['SVD5'] - newDF['SVD20']
newDF['Price_change'] = newDF['PRICE'].diff()
newDF
upAccuracy = []
downAccuracy = []
for i in range(1,len(newDF)):
    if (newDF.iloc[i]['DIFF'] > 0) & (newDF.iloc[i-1]['DIFF'] < 0) & (newDF.iloc[i]['Price_change'] > 0) :
        upAccuracy.append(1)
    if (newDF.iloc[i]['DIFF'] < 0) & (newDF.iloc[i-1]['DIFF'] > 0) & (newDF.iloc[i]['Price_change'] < 0) :
        downAccuracy.append(-1)
a,b = len(upAccuracy)/len(newDF[newDF['Price_change']>0]), len(downAccuracy)/len(newDF[newDF['Price_change']<0])

In [ ]:
newDF[newDF['Price_change']>0]

In [ ]:


In [ ]:
m=7
t=15
dateList = benchMarkOpen.index
assetSSA = []
assetMA = []
holdingFlag = False
tradinglogSSA ={}
tradinglogMA ={}
portfolioValue ={i:0 for i in benchMarkClose.index[:t]}
ma_strategy = {i:0 for i in benchMarkClose.index[:t]}
for i in range(t,len(benchMarkClose)):
    todayDate = dateList[i]
    yesterDayDate = dateList[i-1]
    svdSignal = benchMarkClose.values[:i][-t:]
    #print len(svdSignal)
    newTS = getSVD(svdSignal,t,m)
    #print newTS
    #ma = benchMarkClose.iloc[:i].rolling(m,min_periods =1).mean()
    if len(assetSSA) !=0 and benchMarkClose[i-2] > newTS[-2] and benchMarkClose[i-1] < newTS[-1]: # sell signal
        sellprice = benchMarkOpen[i]
        #holdingFlag = False
        tradinglogSSA[todayDate] = (sellprice,-1)
        portfolioValue[todayDate] = (sellprice - assetSSA[0])/assetSSA[0] + portfolioValue[yesterDayDate]
        assetSSA = []
    elif len(assetSSA) == 0 and benchMarkClose[i-2] < newTS[-2] and benchMarkClose[i-1] > newTS[-1]: # buy signal
        buyprice = benchMarkOpen[i]
        assetSSA.append(buyprice)
        tradinglogSSA[todayDate] = (buyprice,1)
        #holdingFlag = True
        portfolioValue[todayDate] = portfolioValue[yesterDayDate]
    else:
        portfolioValue[todayDate] = portfolioValue[yesterDayDate]

In [ ]:
for i in range(t,len(benchMarkClose)):
    todayDate = dateList[i]
    yesterDayDate = dateList[i-1]
    ma = benchMarkClose.iloc[:i].rolling(m,min_periods =1).mean()
### For MA strategy    
    if  len(assetMA) !=0 and benchMarkClose[i-2] > ma.iloc[-2] and benchMarkClose[i-1] < ma.iloc[-1]: # sell signal
        #print 1
        sellprice = benchMarkOpen[i]
        #holdingFlag = False
        tradinglogMA[todayDate] = (sellprice,-1)
        ma_strategy[todayDate] = ( sellprice - assetMA[0])/assetMA[0] + ma_strategy[yesterDayDate]
        assetMA = []
    elif len(assetMA) == 0 and benchMarkClose[i-2] < ma.iloc[-2] and benchMarkClose[i-1] > ma.iloc[-1]: # buy signal
        #print -1
        buyprice = benchMarkOpen[i]
        assetMA.append(buyprice)
        tradinglogMA[todayDate] = (buyprice,1)
        #holdingFlag = True
        ma_strategy[todayDate] = ma_strategy[yesterDayDate]
    else:
        ma_strategy[todayDate] = ma_strategy[yesterDayDate]
    #print i , assetMA,sellprice

In [ ]:
ma_strategy

In [ ]:
portfolioValue

In [ ]:
strategy_cmp = pd.DataFrame() 
strategy_cmp['strategy_ssa5'] = pd.Series(portfolioValue)
strategy_cmp['strategy_ma5'] = pd.Series(ma_strategy)
strategy_cmp.plot(figsize=(20,10))

In [ ]:
benchMarkOpen.rolling(m,min_periods =1).mean()

In [ ]:
tb.MACD(benchMarkOpen.values)

In [ ]:
##-------Index trading volume analysis-------------

In [ ]:
IndexVolumeDF = pd.read_csv(path+filenameIndexVolume,infer_datetime_format=True,parse_dates=[0],index_col=0).loc[startTime:endTime]

In [ ]:
IndexCloseDF = pd.read_csv(path+filenameHS300,infer_datetime_format=True,parse_dates=[0],index_col=0).loc[startTime:endTime]

In [ ]:
IndexVolumeDF[ZZ500Index].corr(IndexCloseDF[ZZ500Index],method='spearman')

In [ ]:
IndexVolumeDF[ZZ500Index].corr(IndexCloseDF[ZZ500Index],method='pearson')

In [ ]:
svdVolume = pd.Series(index = IndexVolumeDF[ZZ500Index].index, data= getSVD(IndexVolumeDF[ZZ500Index].values,len(IndexVolumeDF),12))

svdIndexPrice= pd.Series(index = IndexVolumeDF[ZZ500Index].index, data= getSVD(IndexCloseDF[ZZ500Index].values,len(IndexVolumeDF),12))

In [ ]:
fig, axs = plt.subplots(4,1, figsize=(20, 14), facecolor='w', edgecolor='k',sharex=True) 
IndexVolumeDF[ZZ500Index].plot(ax=axs[0])
axs[0].set_title('Volume')
IndexCloseDF [ZZ500Index].plot(ax=axs[1])
axs[1].set_title('Close')
svdVolume.plot(ax=axs[2])
axs[2].set_title('SVD_Volume')
svdIndexPrice.plot(ax=axs[3])
axs[3].set_title('SVD_Index')

In [ ]:
IndexCloseDF[ZZ500Index].plot(figsize=(20,14))