From 626608f1f6b8b0808e7d60510629dab203a7573d Mon Sep 17 00:00:00 2001 From: moshferatu Date: Tue, 6 Feb 2024 07:51:01 -0800 Subject: [PATCH] Add example backtest which applies a volatility regime filter --- volatility_regime_backtest.py | 43 +++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 volatility_regime_backtest.py diff --git a/volatility_regime_backtest.py b/volatility_regime_backtest.py new file mode 100644 index 0000000..7d34bba --- /dev/null +++ b/volatility_regime_backtest.py @@ -0,0 +1,43 @@ +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 backtesting.filter import VolatilityRegimeFilter +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, + filters = [VolatilityRegimeFilter()] + ) + + 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 (Volatility Regime Filter)' + )) \ No newline at end of file