Add the ability to filter out days to trade by providing a list of backtest filters
This commit is contained in:
parent
4214ed5165
commit
e02e831288
@ -5,10 +5,12 @@ import pandas as pd
|
|||||||
from concurrent.futures import ProcessPoolExecutor
|
from concurrent.futures import ProcessPoolExecutor
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
from typing import List
|
||||||
|
|
||||||
from .backtest_result import BacktestResult
|
from .backtest_result import BacktestResult
|
||||||
from .credit_targeting import CreditTargetStrategy
|
from .credit_targeting import CreditTargetStrategy
|
||||||
from .delta_targeting import DeltaTargetStrategy
|
from .delta_targeting import DeltaTargetStrategy
|
||||||
|
from .filter import BacktestFilter, VolatilityRegimeFilter
|
||||||
from .option_spread_strategy import OptionSpreadStrategy
|
from .option_spread_strategy import OptionSpreadStrategy
|
||||||
from .option_type import OptionType
|
from .option_type import OptionType
|
||||||
|
|
||||||
@ -272,7 +274,8 @@ def backtest_iron_condor(
|
|||||||
call_spread_strategy: OptionSpreadStrategy,
|
call_spread_strategy: OptionSpreadStrategy,
|
||||||
put_spread_strategy: OptionSpreadStrategy,
|
put_spread_strategy: OptionSpreadStrategy,
|
||||||
start_date: datetime,
|
start_date: datetime,
|
||||||
end_date: datetime
|
end_date: datetime,
|
||||||
|
filters: List[BacktestFilter] = []
|
||||||
) -> pd.DataFrame:
|
) -> pd.DataFrame:
|
||||||
|
|
||||||
total_premium_received = 0.0
|
total_premium_received = 0.0
|
||||||
@ -292,18 +295,22 @@ def backtest_iron_condor(
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# Assuming file format 'YYYY-MM-DD.csv'.
|
# Assuming file format 'YYYY-MM-DD.csv'.
|
||||||
file_date_str = os.path.splitext(file)[0]
|
current_date = datetime.strptime(os.path.splitext(file)[0], '%Y-%m-%d')
|
||||||
file_date = datetime.strptime(file_date_str, '%Y-%m-%d')
|
|
||||||
|
|
||||||
# TODO: This doesn't work as expected when the start date is not set to midnight.
|
# TODO: This doesn't work as expected when the start date is not set to midnight.
|
||||||
if file_date < start_date or file_date > end_date:
|
if current_date < start_date or current_date > end_date:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
logging.info('Processing File: %s', historical_data_file)
|
logging.info('Processing File: %s', historical_data_file)
|
||||||
|
|
||||||
future = executor.submit(_backtest_iron_condor,
|
if (not filters) or all(filter.trade_allowed(current_date) for filter in filters):
|
||||||
historical_data_file, call_spread_strategy, put_spread_strategy)
|
future = executor.submit(
|
||||||
futures.append(future)
|
_backtest_iron_condor,
|
||||||
|
historical_data_file,
|
||||||
|
call_spread_strategy,
|
||||||
|
put_spread_strategy
|
||||||
|
)
|
||||||
|
futures.append(future)
|
||||||
|
|
||||||
backtest_results = []
|
backtest_results = []
|
||||||
for future in futures:
|
for future in futures:
|
||||||
|
Loading…
Reference in New Issue
Block a user