From 18b6f374d6ee1d189a996c459b5c9e98f9f0a060 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 10 Jun 2025 07:06:31 +0200 Subject: [PATCH] chore: remove edge_cli module --- freqtrade/optimize/edge_cli.py | 55 ------------------- .../optimize/optimize_reports/__init__.py | 1 - .../optimize/optimize_reports/bt_output.py | 30 ---------- 3 files changed, 86 deletions(-) delete mode 100644 freqtrade/optimize/edge_cli.py diff --git a/freqtrade/optimize/edge_cli.py b/freqtrade/optimize/edge_cli.py deleted file mode 100644 index 65dd30efc..000000000 --- a/freqtrade/optimize/edge_cli.py +++ /dev/null @@ -1,55 +0,0 @@ -# pragma pylint: disable=missing-docstring, W0212, too-many-arguments - -""" -This module contains the edge backtesting interface -""" - -import logging - -from freqtrade import constants -from freqtrade.configuration import TimeRange, validate_config_consistency -from freqtrade.constants import Config -from freqtrade.data.dataprovider import DataProvider -from freqtrade.edge import Edge -from freqtrade.optimize.optimize_reports import generate_edge_table -from freqtrade.resolvers import ExchangeResolver, StrategyResolver - - -logger = logging.getLogger(__name__) - - -class EdgeCli: - """ - EdgeCli class, this class contains all the logic to run edge backtesting - - To run a edge backtest: - edge = EdgeCli(config) - edge.start() - """ - - def __init__(self, config: Config) -> None: - self.config = config - - # Ensure using dry-run - self.config["dry_run"] = True - self.config["stake_amount"] = constants.UNLIMITED_STAKE_AMOUNT - self.exchange = ExchangeResolver.load_exchange(self.config) - self.strategy = StrategyResolver.load_strategy(self.config) - self.strategy.dp = DataProvider(config, self.exchange) - - validate_config_consistency(self.config) - - self.edge = Edge(config, self.exchange, self.strategy) - # Set refresh_pairs to false for edge-cli (it must be true for edge) - self.edge._refresh_pairs = False - - self.edge._timerange = TimeRange.parse_timerange( - None if self.config.get("timerange") is None else str(self.config.get("timerange")) - ) - self.strategy.ft_bot_start() - - def start(self) -> None: - result = self.edge.calculate(self.config["exchange"]["pair_whitelist"]) - if result: - print("") # blank line for readability - generate_edge_table(self.edge._cached_pairs) diff --git a/freqtrade/optimize/optimize_reports/__init__.py b/freqtrade/optimize/optimize_reports/__init__.py index c08bae4be..5cf8e51ad 100644 --- a/freqtrade/optimize/optimize_reports/__init__.py +++ b/freqtrade/optimize/optimize_reports/__init__.py @@ -1,6 +1,5 @@ # flake8: noqa: F401 from freqtrade.optimize.optimize_reports.bt_output import ( - generate_edge_table, generate_wins_draws_losses, show_backtest_result, show_backtest_results, diff --git a/freqtrade/optimize/optimize_reports/bt_output.py b/freqtrade/optimize/optimize_reports/bt_output.py index c305a7b0e..193f3d8f1 100644 --- a/freqtrade/optimize/optimize_reports/bt_output.py +++ b/freqtrade/optimize/optimize_reports/bt_output.py @@ -499,33 +499,3 @@ def show_sorted_pairlist(config: Config, backtest_stats: BacktestResultType): if result["key"] != "TOTAL": print(f'"{result["key"]}", // {result["profit_mean"]:.2%}') print("]") - - -def generate_edge_table(results: dict) -> None: - tabular_data = [] - headers = [ - "Pair", - "Stoploss", - "Win Rate", - "Risk Reward Ratio", - "Required Risk Reward", - "Expectancy", - "Total Number of Trades", - "Average Duration (min)", - ] - - for result in results.items(): - if result[1].nb_trades > 0: - tabular_data.append( - [ - result[0], - f"{result[1].stoploss:.10g}", - f"{result[1].winrate:.2f}", - f"{result[1].risk_reward_ratio:.2f}", - f"{result[1].required_risk_reward:.2f}", - f"{result[1].expectancy:.2f}", - result[1].nb_trades, - round(result[1].avg_trade_duration), - ] - ) - print_rich_table(tabular_data, headers, summary="EDGE TABLE")