from backtesting import backtest_iron_condor from backtesting.delta_target_strategy import DeltaTargetStrategy from backtesting.option_type import OptionType from database.backtest import insert from datetime import datetime, timedelta entry_time_format = '%H:%M:%S' def entry_times(): start = datetime.strptime('09:35:00', entry_time_format) end = datetime.strptime('15:55:00', entry_time_format) current_time = start entry_times = [] while current_time <= end: entry_times.append(current_time.strftime(entry_time_format)) current_time += timedelta(minutes = 5) return entry_times def create_strategies(entry_time: str): call_spread_strat = DeltaTargetStrategy( delta_upper_bound = 0.11, delta_lower_bound = 0.10, option_type = OptionType.CALL, number_of_contracts = 1, spread_width = 50, stop_loss_multiple = 1.00, trade_entry_time = entry_time ) put_spread_strat = DeltaTargetStrategy( delta_upper_bound = 0.11, delta_lower_bound = 0.10, option_type = OptionType.PUT, number_of_contracts = 1, spread_width = 50, stop_loss_multiple = 1.00, trade_entry_time = entry_time ) return call_spread_strat, put_spread_strat def run_backtest(): # TODO: Start date = yesterday. start_date = datetime(2024, 1, 1) end_date = datetime.now() for entry_time in entry_times(): call_spread_strategy, put_spread_strategy = create_strategies(entry_time) backtest_results = backtest_iron_condor( f'10 Delta Iron Condor @ {call_spread_strategy.trade_entry_time}', call_spread_strategy, put_spread_strategy, start_date, end_date ) # TODO: Think of a better way to handle this. backtest_results.drop('Cumulative Profit', axis=1, inplace=True) print(backtest_results) insert(backtest_results) if __name__ == '__main__': run_backtest()