options-backtesting/atr_regime_backtest.py

43 lines
1.4 KiB
Python

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 ATRRegimeFilter
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 = [ATRRegimeFilter()]
)
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 (ATR Regime Filter)'
))