def dcc_scenarios(parameter_ids, experiment_ids, backtest_ids): parameters = dataframe2json(db.load_dcc_parameters_by_id(parameter_ids)) experiments = dataframe2json(db.load_experiments(experiment_ids)) backtests = dataframe2json(db.load_backtests(backtest_ids)) scenarios = list() for p, e, b in itertools.product(parameters, experiments, backtests): p = copy.deepcopy(p) e = copy.deepcopy(e) b = copy.deepcopy(b) metadata = {'parameters_id': int(p['id']), 'experiment_id': int(e['id']), 'backtest_id': int(b['id'])} p.pop('id', None) e.pop('id', None) b.pop('id', None) e['start_date'] = str(e['start_date']) e['end_date'] = str(e['end_date']) # Numpy.int64 is not JSON serializable for some reason. b['trailing_periods'] = int(b['trailing_periods']) b['update_periods'] = int(b['update_periods']) scenario = {'metadata': metadata, 'portfolio': p, 'returns': e, 'backtest': b} scenarios.append(json.dumps(scenario)) return scenarios
if __name__ == '__main__': #%% 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']