mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 08:33:07 +00:00
Extract edge output to proper module
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
Reference in New Issue
Block a user