From e98b1ebfc19160c454c2aa3c348b7ff786c064c8 Mon Sep 17 00:00:00 2001 From: moshferatu Date: Mon, 5 Feb 2024 08:37:47 -0800 Subject: [PATCH] Add script for executing credit targeted backtests --- credit_targeting_backtest.py | 41 ++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 credit_targeting_backtest.py diff --git a/credit_targeting_backtest.py b/credit_targeting_backtest.py new file mode 100644 index 0000000..a8b838a --- /dev/null +++ b/credit_targeting_backtest.py @@ -0,0 +1,41 @@ +from datetime import datetime +from dotenv import load_dotenv +from os import getenv +from pandas import concat + +from backtesting import backtest_iron_condor +from backtesting.credit_targeting import create_strategies +from plotting import BacktestChart, plot + +load_dotenv() + +if __name__ == '__main__': + start_date = datetime(2016, 1, 1) + end_date = datetime.now() + + credit_target = float(getenv('CREDIT_TARGET')) + entry_times = getenv('ENTRY_TIMES').split(',') + + backtest_results = [] + + for entry_time in entry_times: + call_spread_strategy, put_spread_strategy = create_strategies(credit_target, entry_time) + + backtest_result = backtest_iron_condor( + f'{credit_target:.2f} Iron Condor @ {call_spread_strategy.trade_entry_time}', + call_spread_strategy, + put_spread_strategy, + start_date, + end_date + ) + + backtest_results.append(backtest_result) + + combined_backtest_results = concat(backtest_results) + summed_results = combined_backtest_results.groupby('Date')['Cumulative Profit'].sum().reset_index() + + plot(BacktestChart( + dates = summed_results['Date'], + profit = summed_results['Cumulative Profit'], + title = f'${credit_target:.2f} Iron Condor' + )) \ No newline at end of file