def eval_scenario(returns_params, backtest_params, portfolio_params): excess_returns = data.load_excess_returns(**returns_params) # Setup backtest return splits. training_returns, testing_returns = ( backtest.split_returns(excess_returns, **backtest_params)) results = list() period = 0 for er_train, er_test in zip(training_returns, testing_returns): sol = mvportfolio.portfolio( er_train, **portfolio_params) portfolio = sol returns = er_test.dot(portfolio) result = {'portfolio': array2str(portfolio)} result['test_returns'] = array2str(returns) result['period'] = period period += 1 results.append(result) logging.debug('period = {0}'.format(period)) return {'kwargs': {'returns': returns_params, 'backtest': backtest_params, 'portfolio': portfolio_params}, 'results': results}
def eval_scenario(returns_params, backtest_params, portfolio_params): excess_returns = data.load_excess_returns(**returns_params) # Setup backtest return splits. training_returns, testing_returns = ( backtest.split_returns(excess_returns, **backtest_params)) results = list() period = 0 for er_train, er_test in zip(training_returns, testing_returns): try: sol = dccportfolio.portfolio_sphere( er_train, extended_return=True, verbose=False, **portfolio_params) except LinAlgError: logging.error('Linear algebra error encountered.') sol = ('', '', '', '', 'linear_algebra_error') portfolio = sol[0] status = sol[4] if status == 'solution_found': returns = er_test.dot(portfolio) else: returns = '' sol_keys = ['portfolio', 'objective', 'sdp_solution', 'constraints', 'status'] result = { k: pg.array2str(s) for k, s in zip(sol_keys, sol) } result['test_returns'] = pg.array2str(returns) result['period'] = period period += 1 results.append(result) logging.debug('period = {0}'.format(period)) return {'kwargs': {'returns': returns_params, 'backtest': backtest_params, 'portfolio': portfolio_params}, 'results': results}
backtest_results = pd.read_sql(query, db.conn) scenarios = backtest_results.groupby( ['experiment_id', 'backtest_id', 'parameters_id']) outputs = list() for bt in scenarios: print(bt[0]) experiment_id, backtest_id, parameters_id = bt[0] results = bt[1] experiment = db.load_experiment(experiment_id) backtest_params = db.load_backtests([backtest_id]) returns = db.load_returns(experiment) excess_returns = returns.values train, test = backtest.split_returns( excess_returns, backtest_params['update_periods'], backtest_params['trailing_periods']) portfolios = pg.decimallistseries2nparray(results.portfolio_weights) portfolio_returns = pg.decimallistseries2nparray(results.test_returns) train_mean = ps.mean(portfolios[0,:], train[0]) train_variance = ps.variance(portfolios[0,:], train[0]) eta = results.eta.iloc[0] backtest_statistics = ps.rkw_statistics( portfolios, portfolio_returns, eta=eta) test_statistics = backtest_statistics['statistics'] agg_returns = backtest_statistics['aggregate_returns'] output = test_statistics output['aggregate_returns'] = pg.array2pgarray(agg_returns) output['train_mean_return'] = train_mean output['train_variance'] = train_variance