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(start_date: datetime, end_date: datetime): 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 ) if not backtest_results.empty: # 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__': # TODO: Update backtest to eliminate the need for setting this to midnight. end_date = datetime.now().replace(hour = 0, minute = 0, second = 0, microsecond = 0) start_date = end_date - timedelta(days = 1) run_backtest(start_date, end_date)