Extract edge output to proper module

This commit is contained in:
Matthias
2023-06-25 17:45:01 +02:00
parent 72504e62ad
commit 1717f86702
3 changed files with 31 additions and 31 deletions

View File

@@ -1,5 +1,6 @@
# flake8: noqa: F401 # flake8: noqa: F401
from freqtrade.optimize.optimize_reports.bt_output import (show_backtest_result, from freqtrade.optimize.optimize_reports.bt_output import (generate_edge_table,
show_backtest_result,
show_backtest_results, show_backtest_results,
show_sorted_pairlist, show_sorted_pairlist,
text_table_add_metrics, text_table_add_metrics,
@@ -11,7 +12,7 @@ from freqtrade.optimize.optimize_reports.bt_storage import (store_backtest_analy
store_backtest_stats) store_backtest_stats)
from freqtrade.optimize.optimize_reports.optimize_reports import ( from freqtrade.optimize.optimize_reports.optimize_reports import (
generate_all_periodic_breakdown_stats, generate_backtest_stats, generate_daily_stats, generate_all_periodic_breakdown_stats, generate_backtest_stats, generate_daily_stats,
generate_edge_table, generate_exit_reason_stats, generate_pair_metrics, generate_exit_reason_stats, generate_pair_metrics, generate_periodic_breakdown_stats,
generate_periodic_breakdown_stats, generate_rejected_signals, generate_strategy_comparison, generate_rejected_signals, generate_strategy_comparison, generate_strategy_stats,
generate_strategy_stats, generate_tag_metrics, generate_trade_signal_candles, generate_tag_metrics, generate_trade_signal_candles, generate_trading_stats,
generate_trading_stats, generate_wins_draws_losses) generate_wins_draws_losses)

View File

@@ -378,3 +378,28 @@ def show_sorted_pairlist(config: Config, backtest_stats: Dict):
if result["key"] != 'TOTAL': if result["key"] != 'TOTAL':
print(f'"{result["key"]}", // {result["profit_mean"]:.2%}') print(f'"{result["key"]}", // {result["profit_mean"]:.2%}')
print("]") print("]")
def generate_edge_table(results: dict) -> str:
floatfmt = ('s', '.10g', '.2f', '.2f', '.2f', '.2f', 'd', 'd', 'd')
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],
result[1].stoploss,
result[1].winrate,
result[1].risk_reward_ratio,
result[1].required_risk_reward,
result[1].expectancy,
result[1].nb_trades,
round(result[1].avg_trade_duration)
])
# Ignore type as floatfmt does allow tuples but mypy does not know that
return tabulate(tabular_data, headers=headers,
floatfmt=floatfmt, tablefmt="orgtbl", stralign="right")

View File

@@ -4,7 +4,6 @@ from datetime import datetime, timedelta, timezone
from typing import Any, Dict, List, Union from typing import Any, Dict, List, Union
from pandas import DataFrame, concat, to_datetime from pandas import DataFrame, concat, to_datetime
from tabulate import tabulate
from freqtrade.constants import BACKTEST_BREAKDOWNS, DATETIME_PRINT_FORMAT, IntOrInf from freqtrade.constants import BACKTEST_BREAKDOWNS, DATETIME_PRINT_FORMAT, IntOrInf
from freqtrade.data.metrics import (calculate_cagr, calculate_calmar, calculate_csum, from freqtrade.data.metrics import (calculate_cagr, calculate_calmar, calculate_csum,
@@ -215,31 +214,6 @@ def generate_strategy_comparison(bt_stats: Dict) -> List[Dict]:
return tabular_data return tabular_data
def generate_edge_table(results: dict) -> str:
floatfmt = ('s', '.10g', '.2f', '.2f', '.2f', '.2f', 'd', 'd', 'd')
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],
result[1].stoploss,
result[1].winrate,
result[1].risk_reward_ratio,
result[1].required_risk_reward,
result[1].expectancy,
result[1].nb_trades,
round(result[1].avg_trade_duration)
])
# Ignore type as floatfmt does allow tuples but mypy does not know that
return tabulate(tabular_data, headers=headers,
floatfmt=floatfmt, tablefmt="orgtbl", stralign="right")
def _get_resample_from_period(period: str) -> str: def _get_resample_from_period(period: str) -> str:
if period == 'day': if period == 'day':
return '1d' return '1d'