def markowitz_r(funddfr, bounds): rf = const.rf final_risk = 0 final_return = 0 final_ws = [] final_sharp = -10000000000000000000000000.0 final_codes = [] codes = funddfr.columns return_rate = [] for code in codes: return_rate.append(funddfr[code].values) risks, returns, ws = fin.efficient_frontier(return_rate, bounds) for j in range(0, len(risks)): sharp = (returns[j] - rf) / risks[j] if sharp > final_sharp: final_risk = risks[j] final_return = returns[j] final_ws = ws[j] final_sharp = sharp return final_risk, final_return, final_ws, final_sharp
def markowitz(funddf, bounds, d): rf = const.rf funddfr = funddf.pct_change() funddfr = funddfr.fillna(0.0) final_risk = 0 final_return = 0 final_ws = [] final_sharp = -10000000000000000000000000.0 final_codes = [] codes = funddfr.columns return_rate = [] for code in codes: return_rate.append(funddfr[code].values) risks, returns, ws = fin.efficient_frontier(return_rate, bounds) for j in range(0, len(risks)): sharp = (returns[j] - rf) / risks[j] if sharp > final_sharp: final_risk = risks[j] final_return = returns[j] final_ws = ws[j] final_sharp = sharp f_str = '%s, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n' f = open('./tmp/ef_' + d + '.csv', 'w') f.write( 'date, risk, return, largecap, smallcap, rise, oscillation, decline ,growth ,value, ratebond, creditbond, convertiblebond, money1, money2, SP500.SPI, SPGSGCTR.SPI, HSCI.HI\n' ) #for j in range(0, len(risks)): # f.write(f_str % (d,risks[j], returns[j], ws[j][0], ws[j][1], ws[j][2], ws[j][3], ws[j][4], ws[j][5], ws[j][6], ws[j][7], ws[j][8], ws[j][9], ws[j][10], ws[j][11], ws[j][12], ws[j][13], ws[j][14] )) f.flush() f.close() return final_risk, final_return, final_ws, final_sharp
return_rate = [] dapan = df['dapan'].values xiaopan = df['xiaopan'].values dapanrs = [] xiaopanrs = [] for i in range(1, len(dapan)): dapanrs.append(dapan[i] / dapan[i - 1] - 1) for i in range(1, len(xiaopan)): xiaopanrs.append(xiaopan[i] / xiaopan[i - 1] - 1) return_rate.append(dapanrs) return_rate.append(xiaopanrs) risks, returns, portfolios = fin.efficient_frontier(return_rate) rf = 0.025 / 52 n = 0 sharp = (returns[0] - rf) / risks[0] for i in range(0, len(returns)): s = (returns[i] - rf) / risks[i] if s > sharp: sharp = s n = i ########################################################################### #print 'sharp : ', sharp, 'return : ', returns[n], 'risk : ', risks[n], 'portfolio : ', portfolios[n] #print 'annual return : ', returns[n] * 52