diff options
Diffstat (limited to 'analysis.py')
-rw-r--r-- | analysis.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/analysis.py b/analysis.py index 15ba0ef..912eb0a 100644 --- a/analysis.py +++ b/analysis.py @@ -1,5 +1,92 @@ import json import datetime +import os + +def summarize_results(batch_name): + """ + Summarizes the results of the backtesting by calculating average percent gain/loss, + and finding the best stock order. + """ + + # get the result data json files under batches + batch_folder = f'batches/{batch_name}' + result_files = [f for f in os.listdir(batch_folder) if f.endswith('.json')] + + results_summary = [] + + # make a dict for the algo table + algos_to_results = {} + print(len(result_files), "results found in", batch_folder) + for result in result_files: + file_path = os.path.join(batch_folder, result) + with open(file_path, 'r') as fd: + result_data = json.load(fd) + + # extract the relevant data + result = result_data['backtest_results'] + if not result: + continue + + algo_name = result['algo_name'] + algo_params = result['algo_params'] + algo_key = f"{algo_name}_{algo_params}" + + if algo_key not in algos_to_results: + algos_to_results[algo_key] = { + 'percent_gains': [], + 'stock_orders': [] + } + + algos_to_results[algo_key]['percent_gains'].append(result['percent_gain']) + + stock_ticker = result_data['url_params']['ticker'] + algos_to_results[algo_key]['stock_orders'].append(stock_ticker) + + # summarize the results for each algo + for algo_name, result in algos_to_results.items(): + algo_params = algo_name.split('_')[1] # Extract params from the key + if not result['percent_gains'] and not result['percent_losses']: + continue # Skip if no gains or losses + + # calculate average percent gain/loss + avg_percent_gain = sum(result['percent_gains']) / len(result['percent_gains']) if result['percent_gains'] else 0 + + # calculate which stock ticker produced the best result + stock_orders = result['stock_orders'] + if stock_orders: + best_stock_order = max(set(stock_orders), key=stock_orders.count) + else: + best_stock_order = "N/A" + + # Append the summarized data + results_summary.append([ + algo_name, + algo_params, + avg_percent_gain, + best_stock_order + ]) + + # Sort the results by average percent gain in descending order + results_summary.sort(key=lambda x: x[2], reverse=True) + + print(algos_to_results) + + return results_summary + +def test(): + """ + Test function to summarize results from a specific batch. + """ + batch_name = 'test-1-ema' + results = summarize_results(batch_name) + if results: + print("Results Summary:") + for row in results: + print(row) + else: + print("No results found.") + +test() # pull stock data from json files # timestamps_file = open('timestamps.json', 'r') |