Add script to perform backtest and insert results into database
This commit is contained in:
parent
f2b1bb8d2a
commit
38b157adee
62
run_backtest.py
Normal file
62
run_backtest.py
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
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()
|
Loading…
Reference in New Issue
Block a user