@@ -2,7 +2,7 @@
"cells" : [
{
"cell_type" : " code" ,
"execution_count" : 87 ,
"execution_count" : 119 ,
"metadata" : {
"collapsed" : false
},
@@ -19,7 +19,7 @@
},
{
"cell_type" : " code" ,
"execution_count" : 138 ,
"execution_count" : 2 ,
"metadata" : {
"collapsed" : true
},
@@ -58,7 +58,7 @@
},
{
"cell_type" : " code" ,
"execution_count" : 139 ,
"execution_count" : 3 ,
"metadata" : {
"collapsed" : false
},
@@ -74,7 +74,7 @@
"data" : {
"image/png": "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\nAAAAAElFTkSuQmCC\n",
"text/plain" : [
" <matplotlib.figure.Figure at 0x7f9a47d246d8 >"
" <matplotlib.figure.Figure at 0x7f6073b1dc50 >"
]
},
"metadata" : {},
@@ -89,7 +89,7 @@
},
{
"cell_type" : " code" ,
"execution_count" : 140 ,
"execution_count" : 4 ,
"metadata" : {
"collapsed" : false
},
@@ -116,13 +116,13 @@
},
{
"cell_type" : " code" ,
"execution_count" : 262 ,
"execution_count" : 120 ,
"metadata" : {
"collapsed" : true
},
"outputs" : [],
"source" : [
" def read_stocks(dir_name):\n " ,
" def read_stocks(dir_name, random = False, num_rand = None ):\n " ,
" \"\"\"\n " ,
" dir_name: string directory name\n " ,
" \n " ,
@@ -132,30 +132,35 @@
" \"\"\"\n " ,
" stock_files = glob.glob(dir_name + '/*.csv')\n " ,
" \n " ,
" if random:\n " ,
" ind = np.random.randint(0, len(stock_files), size = num_rand)\n " ,
" stock_files = list(np.array(stock_files)[ind])\n " ,
" \n " ,
" labels = []\n " ,
" \n " ,
" X = []\n " ,
" min_len = 100000\n " ,
" \n " ,
" for stock in stock_files:\n " ,
" x = pd.read_csv(stock)['Adj Close'].as_matrix().astype(np.float64)\n " ,
" if x.shape[0] < min_len:\n " ,
" min_len = x.shape[0]\n " ,
" X.append(x)\n " ,
" labels.append(stock[len(dir_name) + 1:][0:-4])\n " ,
" if x.shape[0] >= 100:\n " ,
" if x.shape[0] < min_len:\n " ,
" min_len = x.shape[0]\n " ,
" X.append(x)\n " ,
" labels.append(stock[len(dir_name) + 1:][0:-4])\n " ,
" \n " ,
" for i in range(len(X)):\n " ,
" X[i] = X[i][-min_len:]\n " ,
" \n " ,
" X = np.array(X)\n " ,
" \n " ,
" # lables\n " ,
" return labels, X[:,0:-1], X[:,-1]"
" return labels, X[:,0:-1], X[:,-1][:,np.newaxis] "
]
},
{
"cell_type" : " code" ,
"execution_count" : 221 ,
"execution_count" : 110 ,
"metadata" : {
"collapsed" : false
},
@@ -187,45 +192,25 @@
},
{
"cell_type" : " code" ,
"execution_count" : 263 ,
"execution_count" : 113 ,
"metadata" : {
"collapsed" : false
},
"outputs" : [],
"source" : [
" labels, X, y = read_stocks('/home/nate/Courses/bigdata/bigdata_hw/final_project/stock_data ')\n " ,
" labels, X, y = read_stocks('/home/nate/Courses/bigdata/bigdata_hw/final_project/stock_data2 ')\n " ,
" \n " ,
" cov, returns, sigma = cov_return_sigma(X, gauss_gp) \n " ,
" \n " ,
" cov += np.diag(sigma)\n " ,
" cov += 10 * np.diag(sigma)\n " ,
" \n " ,
" def is_pos_def(x):\n " ,
" return np.all(np.linalg.eigvals(x) > 0)\n " ,
" \n "
" return np.all(np.linalg.eigvals(x) > 0)\n "
]
},
{
"cell_type" : " code" ,
"execution_count" : 264 ,
"metadata" : {
"collapsed" : false
},
"outputs" : [
{
"name" : " stdout" ,
"output_type" : " stream" ,
"text" : [
" ['AMCN', 'ALQA', 'ALRM', 'AJX', 'AIXG', 'ALX', 'ALTY', 'AAAP', 'ALGN', 'ALEX', 'ALL', 'ALLY', 'AME', 'AJRD', 'ALOT', 'AMCO', 'ALDR', 'ALD', 'ALXA', 'ALOG', 'ALDW', 'ALTV', 'ALGT', 'AMCC', 'ALJ', 'ALLT', 'AAL', 'ALSK', 'ALIM', 'AKAM', 'ALDX', 'AJG', 'ALU', 'AMBC', 'ALN', 'AIY', 'ALK', 'ALXN', 'ALR', 'AKAO', 'AKTX', 'ALFA', 'AKER', 'AMD', 'AKR', 'ALTR', 'ALE', 'AL', 'AIW', 'AIT', 'AM', 'AMCX', 'AKRX', 'ALKS', 'AMAT', 'ALNY', 'AAMC', 'ALG', 'AMC', 'AA', 'AIV', 'AKS', 'AMDA', 'AMBA', 'AIZ', 'AMBR', 'AKP', 'AADR', 'AMBCW', 'A', 'ALCO', 'AAC', 'ALSN', 'AAME', 'AKBA', 'AMAG', 'ALV', 'ALB', 'ALLE', 'AKG']\n "
]
}
],
"source" : [
" print(labels)"
]
},
{
"cell_type" : " code" ,
"execution_count" : 224 ,
"execution_count" : 11 ,
"metadata" : {
"collapsed" : false ,
"scrolled" : true
@@ -237,7 +222,7 @@
" True"
]
},
"execution_count" : 224 ,
"execution_count" : 11 ,
"metadata" : {},
"output_type" : " execute_result"
}
@@ -248,7 +233,7 @@
},
{
"cell_type" : " code" ,
"execution_count" : 265 ,
"execution_count" : 114 ,
"metadata" : {
"collapsed" : false
},
@@ -259,7 +244,7 @@
},
{
"cell_type" : " code" ,
"execution_count" : 280 ,
"execution_count" : 115 ,
"metadata" : {
"collapsed" : false
},
@@ -268,11 +253,18 @@
"name" : " stdout" ,
"output_type" : " stream" ,
"text" : [
" [[ 0.02818033 0.03474898 0.46086769 0.00365392 0.22869644 0.24385263]] ['ALOT' 'ALLT' 'ALU' 'ALR' 'AKAO' 'AKP']\n "
" (48, 1)\n " ,
" [[ 0.03144221 0.00553032 0.0353734 0.13879926 0.00245592 0.01147424\n " ,
" 0.00977938 0.05875406 0.01936416 0.51558835 0.0772557 0.01873162\n " ,
" 0.00162832 0.02449255 0.0122944 0.00434967 0.00251014 0.00272269\n " ,
" 0.02745363]] ['FINZ' 'FL' 'FGL' 'FHY' 'FIT' 'FIVN' 'FLIC' 'FITBI' 'FLAT' 'FHCO' 'FIG'\n " ,
" 'FISI' 'FINL' 'FLC' 'FGEN' 'FITB' 'FIX' 'FGP' 'FHN']\n "
]
}
],
"source" : [
" print(opt.shape)\n " ,
" \n " ,
" l = np.array(labels)[:,np.newaxis]\n " ,
" \n " ,
" choices = l[np.where(opt>.001)]\n " ,
@@ -286,7 +278,94 @@
},
{
"cell_type" : " code" ,
"execution_count" : 243 ,
"execution_count" : 104 ,
"metadata" : {
"collapsed" : true
},
"outputs" : [],
"source" : [
" def return_frac(w, last_X, y):\n " ,
" \"\"\"\n " ,
" w: weights of stocks\n " ,
" X: original data\n " ,
" y: back_test data\n " ,
" \"\"\"\n " ,
" returns = (y / last_X - 1)[:,np.newaxis]\n " ,
" return (w @ returns)[0,0]"
]
},
{
"cell_type" : " code" ,
"execution_count" : 116 ,
"metadata" : {
"collapsed" : false
},
"outputs" : [
{
"name" : " stdout" ,
"output_type" : " stream" ,
"text" : [
" (19,) (19,)\n "
]
},
{
"data" : {
"text/plain" : [
" -0.01208591044786152"
]
},
"execution_count" : 116 ,
"metadata" : {},
"output_type" : " execute_result"
}
],
"source" : [
" l_X = X[:,-1][:,np.newaxis]\n " ,
" l_X = l_X[np.where(opt>.001)]\n " ,
" l_y = y[np.where(opt>.001)]\n " ,
" \n " ,
" print(l_y.shape, l_X.shape)\n " ,
" \n " ,
" return_frac(weights,l_X,l_y)"
]
},
{
"cell_type" : " code" ,
"execution_count" : 122 ,
"metadata" : {
"collapsed" : false
},
"outputs" : [],
"source" : [
" def find_theta(returns, cov):\n " ,
" \"\"\"\n " ,
" \n " ,
" \"\"\"\n " ,
" bestVal = -10000\n " ,
" bestTheta = 0\n " ,
" \n " ,
" for i in range(1,10):\n " ,
" test = 1.0/i\n " ,
" opt = optimize_port(returns, cov, test)\n " ,
" \n " ,
" weights = opt[opt>.001]\n " ,
" weights /= np.sum(weights)\n " ,
" \n " ,
" l = np.array(labels)[:,np.newaxis]\n " ,
" l_X = X[:,-1][:,np.newaxis]\n " ,
" l_X = l_X[np.where(opt>.001)]\n " ,
" l_y = y[np.where(opt>.001)]\n " ,
" \n " ,
" temp = return_frac(weights, l_X, l_y)\n " ,
" if temp > bestVal:\n " ,
" bestVal = temp\n " ,
" bestTheta = 1./i \n " ,
" return bestVal, bestTheta, l_X"
]
},
{
"cell_type" : " code" ,
"execution_count" : 118 ,
"metadata" : {
"collapsed" : false
},
@@ -295,38 +374,12 @@
"name" : " stdout" ,
"output_type" : " stream" ,
"text" : [
" [matrix([[ 1.44602557e-09, 9.23360524e-10, 1.37899522e-10,\n " ,
" 3.73753850e-10, 6.72986310e-10, 2.12959731e-11,\n " ,
" 5.05072261e-10, 1.51048624e-10, 8.03896481e-11,\n " ,
" 1.02175276e-10, 3.24830691e-10, 2.67848997e-10,\n " ,
" 1.20559409e-10, 3.79398377e-10, 2.15243432e-02,\n " ,
" 3.51874715e-10, 1.35334533e-10, 7.78861215e-10,\n " ,
" 8.58857968e-10, 1.04306179e-10, 6.43144293e-10,\n " ,
" 1.07928047e-09, 1.06934311e-11, 1.08560924e-09,\n " ,
" 1.68778375e-10, 9.08108496e-09, 2.18994373e-10,\n " ,
" 1.98251397e-09, 5.03108893e-10, 7.81090523e-11,\n " ,
" 2.74096080e-10, 1.60564027e-10, 4.67870553e-01,\n " ,
" 2.22661212e-10, 1.47323555e-08, 2.51339642e-09,\n " ,
" 6.14825619e-11, 6.17062587e-11, 4.63136458e-04,\n " ,
" 1.86882727e-01, 2.97841298e-10, 1.29513175e-02,\n " ,
" 3.93450596e-10, 1.58201484e-09, 8.65126270e-10,\n " ,
" 4.58367841e-10, 6.90891585e-10, 8.20075681e-11,\n " ,
" 4.90175368e-10, 1.54826802e-10, 1.55691727e-10,\n " ,
" 1.94461254e-10, 3.05022612e-10, 2.64528878e-11,\n " ,
" 1.58963622e-09, 2.86155580e-11, 1.66690866e-03,\n " ,
" 2.07359085e-10, 1.39880930e-10, 2.52313795e-10,\n " ,
" 2.47108744e-09, 3.49501726e-10, 2.68439540e-09,\n " ,
" 4.43044937e-11, 1.13002575e-10, 3.64553918e-09,\n " ,
" 2.64744499e-01, 2.92258527e-10, 4.28855740e-10,\n " ,
" 4.48533380e-10, 1.07999050e-10, 7.19752092e-10,\n " ,
" 1.42800149e-10, 4.38964527e-02, 4.32093264e-10,\n " ,
" 1.39884559e-10, 4.14283266e-11, 1.59978685e-10,\n " ,
" 1.12239226e-10, 2.14012980e-09]])]\n "
" 1.0 0.00228174544885\n "
]
}
],
"source" : [
" print(o )"
" print(bestTheta, bestVal )"
]
},
{
@@ -337,6 +390,29 @@
},
"outputs" : [],
"source" : []
},
{
"cell_type" : " code" ,
"execution_count" : null ,
"metadata" : {
"collapsed" : true
},
"outputs" : [],
"source" : [
" def full_test(dir_name, num_stocks, num_tests):\n " ,
" thetas = []\n " ,
" returns_list = []\n " ,
" for i in range(num_tests):\n " ,
" labels, X, y = read_stocks('/home/nate/Courses/bigdata/bigdata_hw/final_project/stock_data2', random = True, num_rand=num_stocks)\n " ,
" \n " ,
" cov, returns, sigma = cov_return_sigma(X, gauss_gp) \n " ,
" bestVal, bestTheta, l_X = find_theta(returns, cov)\n " ,
" \n " ,
" thetas.append((bestVal, bestTheta))\n " ,
" returns_list.append(return_frac())\n " ,
" \n " ,
" "
]
}
],
"metadata" : {