Untitled

 avatar
unknown
plain_text
a year ago
2.9 kB
7
Indexable
from BacktestTrading.utils import *
import json

returns_rolling = pd.read_pickle('./results/results_rolling_config_template.json_2024-07-24_18-24-37.pkl')
rank_rolling = pd.read_pickle('./results/final_rankings_insample_all_config_template_18_3_2024-07-24_18-23-24.pkl')
sim_rolling = pd.read_pickle('./results/final_simulations_insample_all_config_template_18_3_2024-07-24_18-23-24.pkl')

#%%
sim_rolling[(sim_rolling.fold==0)]
#%% md

#%%
rank_rolling[(rank_rolling.fold==0)&(rank_rolling.selected==True)]
#%%
config_path = 'config_template.json'
name_path=config_path.split('.')[0]
config = json.load(open(config_path))
asset = config['asset']
pathfile = config['pathtofile']
asset_df = pd.read_csv(f'{pathfile}df_{asset}_preprocessed_bt.csv',parse_dates=['timestamp_in_zone'])
asset_df = asset_df.set_index('timestamp_in_zone')
roll_params=config["rolling_parameters"]
folds = generate_walk_forward_folds(asset_df,start_length=roll_params["start_length"],
                                        test_length=roll_params["test_length"])
#%%
signal_params_list = [extract_params_dict(x,config['simulation_params'].keys()) for x in insample_selected[key]]

#%%
fold_results=[]
for key,fold in folds.items():
    print(f'Doing Fold {key} OOS')
    train_set=fold['train']
    test_set=fold['test']
    
    signal_params_list=[extract_params_dict(x,config['simulation_params'].keys()) for x in insample_selected[key]]
    
    signal_func = find_fun('signals_module',config['simulation_generation']['signal_func'])
    backtest_func = find_fun('backtest_module',config['simulation_generation']['backtest_func'])
    ensemble_func = find_fun('simulator_module',config['simulation_evaluation']['ensemble_func'])
    
    fold_results_ref=[]
    for signal_params in signal_params_list:
        
        df_signal = signal_func(pd.concat([train_set,test_set]), **signal_params)
        params_backtest = config['backtest_params']   
        # Modify params_backtest
        params_backtest.setdefault('min_quantity', config['min_quantity'][asset])
        if 'max_quantity' in params_backtest.keys():
            pass
        else:
            params_backtest.setdefault('max_quantity', signal_params['max_q'])
        params_backtest.setdefault('lot_size', config['lot_size'][asset])
        
        params_backtest['daily_performance'] = True
        sim_key = '_'.join([str(x) for x in signal_params.values()])
    
    
        backtest_results = backtest_func(prices_df=test_set[['item_id', 'ask_best', 'bid_best']],
                                         signals_df=df_signal[['item_id', 'signal']][test_set.index.min():],
                                         **params_backtest)[-1]['return'].rename(sim_key)
        fold_results_ref.append(backtest_results)
    fold_ptf = ensemble_func(pd.concat(fold_results_ref,axis=1))
    
    fold_results.append(fold_ptf)
Editor is loading...
Leave a Comment