Move most of the logic to lookahead_analysis helper

This commit is contained in:
Matthias
2023-05-20 11:45:06 +02:00
parent d8af0dc9c4
commit ceddcd9242
3 changed files with 48 additions and 37 deletions
+1 -36
View File
@@ -6,7 +6,6 @@ from freqtrade.configuration import setup_utils_configuration
from freqtrade.enums import RunMode from freqtrade.enums import RunMode
from freqtrade.exceptions import OperationalException from freqtrade.exceptions import OperationalException
from freqtrade.misc import round_coin_value from freqtrade.misc import round_coin_value
from freqtrade.resolvers import StrategyResolver
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@@ -144,40 +143,6 @@ def start_lookahead_analysis(args: Dict[str, Any]) -> None:
from freqtrade.optimize.lookahead_analysis_helpers import LookaheadAnalysisSubFunctions from freqtrade.optimize.lookahead_analysis_helpers import LookaheadAnalysisSubFunctions
config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE) config = setup_utils_configuration(args, RunMode.UTIL_NO_EXCHANGE)
LookaheadAnalysisSubFunctions.start(config)
if config['targeted_trade_amount'] < config['minimum_trade_amount']:
# add logic that tells the user to check the configuration
# since this combo doesn't make any sense.
raise OperationalException(
"targeted trade amount can't be smaller than minimum trade amount."
)
strategy_objs = StrategyResolver.search_all_objects(
config, enum_failed=False, recursive=config.get('recursive_strategy_search', False))
lookaheadAnalysis_instances = []
# unify --strategy and --strategy_list to one list
if not (strategy_list := config.get('strategy_list', [])):
strategy_list = [config['strategy']]
# check if strategies can be properly loaded, only check them if they can be.
for strat in strategy_list:
for strategy_obj in strategy_objs:
if strategy_obj['name'] == strat and strategy_obj not in strategy_list:
lookaheadAnalysis_instances.append(
LookaheadAnalysisSubFunctions.initialize_single_lookahead_analysis(
strategy_obj, config))
break
# report the results
if lookaheadAnalysis_instances:
LookaheadAnalysisSubFunctions.text_table_lookahead_analysis_instances(
lookaheadAnalysis_instances)
if config.get('lookahead_analysis_exportfilename') is not None:
LookaheadAnalysisSubFunctions.export_to_csv(config, lookaheadAnalysis_instances)
else:
logger.error("There were no strategies specified neither through "
"--strategy nor through "
"--strategy_list "
"or timeframe was not specified.")
@@ -1,10 +1,17 @@
import logging
import time import time
from pathlib import Path from pathlib import Path
from typing import Any, Dict, List from typing import Any, Dict, List
import pandas as pd import pandas as pd
from freqtrade.optimize.lookahead_analysis import LookaheadAnalysis, logger from freqtrade.constants import Config
from freqtrade.exceptions import OperationalException
from freqtrade.optimize.lookahead_analysis import LookaheadAnalysis
from freqtrade.resolvers import StrategyResolver
logger = logging.getLogger(__name__)
class LookaheadAnalysisSubFunctions: class LookaheadAnalysisSubFunctions:
@@ -93,3 +100,41 @@ class LookaheadAnalysisSubFunctions:
f"of {Path(strategy_obj['location']).name} " f"of {Path(strategy_obj['location']).name} "
f"took {elapsed:.0f} seconds.") f"took {elapsed:.0f} seconds.")
return current_instance return current_instance
@staticmethod
def start(config: Config):
if config['targeted_trade_amount'] < config['minimum_trade_amount']:
# this combo doesn't make any sense.
raise OperationalException(
"targeted trade amount can't be smaller than minimum trade amount."
)
strategy_objs = StrategyResolver.search_all_objects(
config, enum_failed=False, recursive=config.get('recursive_strategy_search', False))
lookaheadAnalysis_instances = []
# unify --strategy and --strategy_list to one list
if not (strategy_list := config.get('strategy_list', [])):
strategy_list = [config['strategy']]
# check if strategies can be properly loaded, only check them if they can be.
for strat in strategy_list:
for strategy_obj in strategy_objs:
if strategy_obj['name'] == strat and strategy_obj not in strategy_list:
lookaheadAnalysis_instances.append(
LookaheadAnalysisSubFunctions.initialize_single_lookahead_analysis(
strategy_obj, config))
break
# report the results
if lookaheadAnalysis_instances:
LookaheadAnalysisSubFunctions.text_table_lookahead_analysis_instances(
lookaheadAnalysis_instances)
if config.get('lookahead_analysis_exportfilename') is not None:
LookaheadAnalysisSubFunctions.export_to_csv(config, lookaheadAnalysis_instances)
else:
logger.error("There were no strategies specified neither through "
"--strategy nor through "
"--strategy_list "
"or timeframe was not specified.")
@@ -77,4 +77,5 @@ def test_biased_strategy(lookahead_conf, mocker, caplog) -> None:
strategy_obj = {} strategy_obj = {}
strategy_obj['name'] = "strategy_test_v3_with_lookahead_bias" strategy_obj['name'] = "strategy_test_v3_with_lookahead_bias"
LookaheadAnalysis(lookahead_conf, strategy_obj) LookaheadAnalysis(lookahead_conf, strategy_obj)
pass pass