def run_scenario(assets, sigma, runid, prices, results): excess_returns = rr.calc_excess_returns(prices, msv.default_parameters.risk_free_rate) is_y_feasible = True y = 0. result_path = results + "/" + runid filename = result_path + 'out' assets = map(int, assets.split()) write_portfolio_header(filename, assets) write_time_file_header(filename) scenario = Scenario(assets, excess_returns) # Search from y=0. until infeasible, possibly skipping the # semivar_bound value entirely if y=0. is infeasible. while is_y_feasible: try: t0 = time.time() u_star = calc_dcc_portfolio(y, sigma, scenario.train, scenario.model) except ZeroDivisionError as e: print 'Divide by Zero Error: {0}'.format(e.message) print 'Skipping y = {0}, sigma = {1}'.format(y, sigma) is_y_feasible = False except np.linalg.linalg.LinAlgError as e: print 'Linear Algebra Error: {0}'.format(e.message) print 'Skipping y = {0}, sigma = {1}'.format(y, sigmaf) is_y_feasible = False else: t1 = time.time() run_time = t1 - t0 print 'u_star = %r' % u_star print 'Run time = %r' % run_time append_portfolio(filename, assets, u_star, y, sigma) append_time_file(filename, assets, y, sigma, run_time) y = log_increment(y) is_y_feasible = y < 100.
import numpy.linalg as la def load_output(directory): output = list() files = os.listdir(directory) for filename in files: if re.search('out$', filename): output.append(pd.read_csv(os.path.join(directory,filename))) return output results = './results/20160320' p = load_output(results) excess_returns = rr.calc_excess_returns('./data/raw/yahoo/jiang_guan_daily_close_29assets.csv', 1.0, use_monthly=True) metrics = list() i = 0 for pi in p: print i metrics.append(dict()) metrics[i]['assets'] = map(int, pi.assets[0].split(' ')) metrics[i]['scenario'] = scen.Scenario(metrics[i]['assets'], excess_returns) metrics[i]['mv'] = mv.portfolio(metrics[i]['scenario'].train, 1.0) metrics[i]['dcc'] = pi[['u({0})'.format(j) for j in range(4)]].values metrics[i]['dcc_train_mean'] = np.apply_along_axis( lambda x: ps.mean(x, metrics[i]['scenario'].train), 1, metrics[i]['dcc']) opt_idx = np.argmax(metrics[i]['dcc_train_mean'])