Created
December 20, 2012 01:29
-
-
Save mmourafiq/4342279 to your computer and use it in GitHub Desktop.
portfolio sharp ratio
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import scipy | |
from yahoo_finance import YahooFinance | |
VALUE_TYPE = {'Date': 0, 'Open': 1, 'High': 2, 'Low': 3, 'Close': 4, 'Volume': 5, 'Adj_Close': 6} | |
start_date = "20121101" | |
end_date = "20121201" | |
yf = YahooFinance("AAPL,GOOG,GLD,USO") | |
percent = scipy.array([0.25, 0.15, 0.4, 0.2]) #investment distribution portfolio | |
all_adj_prices = [] | |
all_total_return = [] | |
all_daily_return = [] | |
all_avg_daily_return = [] | |
all_std_daily_return = [] | |
all_sharp_ratio = [] | |
ticker = 0 | |
for (symb, data) in yf.get_historical_prices(start_date, end_date): | |
data.reverse() #reverse the time series | |
data.pop() #get rid of the header | |
adj_prices = scipy.array(map(lambda x : float(x[VALUE_TYPE['Adj_Close']]), data)) | |
all_adj_prices.append(adj_prices) | |
total_return = (adj_prices[-1]/adj_prices[0]) - 1 #calculate the total return for apple this month | |
all_total_return.append(total_return) | |
daily_return = (adj_prices[1:]/adj_prices[0:-1]) - 1 #calculate the daily_return | |
all_daily_return.append(daily_return) | |
avg_daily_return = scipy.mean(daily_return, 0) #average daily retuen | |
all_avg_daily_return.append(avg_daily_return) | |
std_daily_return = scipy.std(daily_return, 0) #deviation fo daily return | |
all_std_daily_return.append(std_daily_return) | |
sharp_ratio = scipy.sqrt(250) * (avg_daily_return / std_daily_return) # sharp ratio | |
all_sharp_ratio.append(sharp_ratio) | |
""" | |
our prices | |
GOOG : 687.5, 687.9, 682.9, 681.7, 667.1, 652.2, 663. , 665.9, | |
659. , 652.5, 647.2, 647.1, 668.2, 669.9, 665.8, 667.9, | |
661.1, 670.7, 683.6, 691.8, 698.3 | |
USO : 32. , 31.3, 31.6, 32.5, 31.2, 31.3, 31.7, 31.5, 31.4, | |
31.7, 31.4, 31.9, 32.6, 31.9, 32.1, 32.3, 32.1, 31.9, | |
31.7, 32.1, 32.5 | |
AAPL : 593.8, 574.1, 581.9, 580.2, 558. , 537.7, 547. , 542.8, | |
542.9, 536.8, 525.6, 527.6, 565.7, 560.9, 561.7, 571.5, | |
589.5, 584.7, 582.9, 589.3, 585.2 | |
GLD : 166. , 162.6, 163.2, 166.3, 166.4, 167.9, 167.8, 167.4, | |
167.1, 167.1, 166. , 165.8, 167.8, 167.3, 167.5, 169.6, | |
169.4, 168.7, 166.5, 167.1, 166. | |
total return for each stock : [0.015709090909090895, 0.015625, -0.014482990906028781, 0.0] | |
daily return : | |
GOOG : 0.00058182, -0.0072685 , -0.00175721, -0.02141705, -0.02233548, | |
0.01655934, 0.00437406, -0.01036192, -0.00986343, -0.00812261, | |
-0.00015451, 0.03260702, 0.00254415, -0.00612032, 0.0031541 , | |
-0.01018116, 0.01452125, 0.01923364, 0.01199532, 0.00939578 | |
USO : -0.021875 , 0.00958466, 0.02848101, -0.04 , 0.00320513, | |
0.01277955, -0.00630915, -0.0031746 , 0.00955414, -0.00946372, | |
0.01592357, 0.02194357, -0.02147239, 0.00626959, 0.00623053, | |
-0.00619195, -0.00623053, -0.00626959, 0.0126183 , 0.01246106 | |
AAPL : -0.03317615, 0.01358648, -0.00292146, -0.03826267, -0.03637993, | |
0.01729589, -0.00767824, 0.00018423, -0.01123596, -0.02086438, | |
0.00380518, 0.0722138 , -0.00848506, 0.00142628, 0.01744704, | |
0.03149606, -0.00814249, -0.0030785 , 0.01097958, -0.00695741 | |
GLD : -0.02048193, 0.00369004, 0.0189951 , 0.00060132, 0.00901442, | |
-0.00059559, -0.00238379, -0.00179211, 0. , -0.00658288, | |
-0.00120482, 0.01206273, -0.00297974, 0.00119546, 0.01253731, | |
-0.00117925, -0.00413223, -0.0130409 , 0.0036036 , -0.00658288 | |
average daily return for each stock : [0.00086921414889110646, 0.00090320887851679248, -0.00043738608805856115, 3.7192619905374034e-05] | |
std deviation for each stock : [0.01340975818314491, 0.015929201121363604, 0.024332769635802963, 0.008623865082371179] | |
sharp ratio for each stock : [1.0248866711092259, 0.8965287201907356, -0.28421266379411581, 0.068190648813791305] | |
""" | |
corr = scipy.corrcoef(all_adj_prices) | |
""" | |
[[ GOOG USO AAPL GLD] | |
[ 1. 0.35796266 0.83675929 -0.38083073] | |
[ 0.35796266 1. 0.49457339 0.33637871] | |
[ 0.83675929 0.49457339 1. -0.04349294] | |
[-0.38083073 0.33637871 -0.04349294 1. ]] | |
""" | |
portfolio_total_return = None | |
portfolio_daily_return = None | |
for ticker in range(4): | |
if ticker == 0: | |
portfolio_daily_return = all_daily_return[ticker] * percent[ticker] | |
portfolio_total_return = all_total_return[ticker] * percent[ticker] | |
else: | |
portfolio_daily_return += all_daily_return[ticker] * percent[ticker] | |
portfolio_total_return += all_total_return[ticker] * percent[ticker] | |
portfolio_avg_daily_return = scipy.mean(portfolio_daily_return, 0) | |
portfolio_std_daily_return = scipy.std(portfolio_daily_return, 0) | |
portfolio_sharp_ratio = scipy.sqrt(250) * (portfolio_avg_daily_return / portfolio_std_daily_return) # sharp ratio | |
""" | |
portfolio daily return : | |
[ -2.05026424e-02 5.79317575e-03 6.46328287e-03 -2.65390640e-02 | |
-1.78521880e-02 1.28560048e-02 -3.40091395e-03 -3.35140050e-03 | |
-5.52711836e-03 -1.31125392e-02 3.63101326e-03 4.27413546e-02 | |
-6.57479444e-03 2.19962885e-04 1.12093815e-02 8.88849236e-03 | |
-1.38771006e-03 2.83893335e-05 1.00041289e-02 1.18563923e-04] | |
portfolio total return : 0.000477826364861 | |
portfolio average daily return : 0.000185268957758 | |
portfolio std deviation daily return : 0.0143152971765 | |
portfolio sharp ratio: 0.20463140898 | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment