From db257e9f7f856d006743972be681a44a9aaa03fd Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 25 May 2020 19:50:09 +0200 Subject: [PATCH] Rename method to be public --- freqtrade/optimize/optimize_reports.py | 25 +++++++++---------- tests/optimize/test_optimize_reports.py | 32 +++++++++++++++++++++---- 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/freqtrade/optimize/optimize_reports.py b/freqtrade/optimize/optimize_reports.py index ce9faacde..0f6bc62a1 100644 --- a/freqtrade/optimize/optimize_reports.py +++ b/freqtrade/optimize/optimize_reports.py @@ -1,7 +1,7 @@ import logging from datetime import timedelta from pathlib import Path -from typing import Dict, Tuple, List, Any +from typing import Dict, List, Any from pandas import DataFrame from tabulate import tabulate @@ -59,7 +59,7 @@ def _generate_result_line(result: DataFrame, max_open_trades: int, first_column: 'trades': len(result.index), 'profit_mean': result.profit_percent.mean(), 'profit_mean_pct': result.profit_percent.mean() * 100.0, - 'profit_sum': result.profit_percent.sum() * 100.0, + 'profit_sum': result.profit_percent.sum(), 'profit_sum_pct': result.profit_percent.sum() * 100.0, 'profit_total_abs': result.profit_abs.sum(), 'profit_total_pct': result.profit_percent.sum() * 100.0 / max_open_trades, @@ -78,8 +78,8 @@ def _generate_result_line(result: DataFrame, max_open_trades: int, first_column: } -def _generate_pair_results(data: Dict[str, Dict], stake_currency: str, max_open_trades: int, - results: DataFrame, skip_nan: bool = False) -> List[Dict]: +def generate_pair_results(data: Dict[str, Dict], stake_currency: str, max_open_trades: int, + results: DataFrame, skip_nan: bool = False) -> List[Dict]: """ Generates and returns a list for the given backtest data and the results dataframe :param data: Dict of containing data that was used during backtesting. @@ -161,7 +161,8 @@ def generate_sell_reason_stats(max_open_trades: int, return tabular_data -def generate_text_table_sell_reason(sell_reason_stats: List[Dict[str, Any]], stake_currency: str) -> str: +def generate_text_table_sell_reason(sell_reason_stats: List[Dict[str, Any]], + stake_currency: str) -> str: """ Generate small table outlining Backtest results :param stake_currency: Stakecurrency used @@ -257,9 +258,9 @@ def show_backtest_results(config: Dict, btdata: Dict[str, DataFrame], for strategy, results in all_results.items(): print(f"Result for strategy {strategy}") - pair_results = _generate_pair_results(btdata, stake_currency=config['stake_currency'], - max_open_trades=config['max_open_trades'], - results=results, skip_nan=False) + pair_results = generate_pair_results(btdata, stake_currency=config['stake_currency'], + max_open_trades=config['max_open_trades'], + results=results, skip_nan=False) table = generate_text_table(pair_results, stake_currency=config['stake_currency']) if isinstance(table, str): print(' BACKTESTING REPORT '.center(len(table.splitlines()[0]), '=')) @@ -274,10 +275,10 @@ def show_backtest_results(config: Dict, btdata: Dict[str, DataFrame], print(' SELL REASON STATS '.center(len(table.splitlines()[0]), '=')) print(table) - left_open_results = _generate_pair_results(btdata, stake_currency=config['stake_currency'], - max_open_trades=config['max_open_trades'], - results=results.loc[results['open_at_end']], - skip_nan=True) + left_open_results = generate_pair_results(btdata, stake_currency=config['stake_currency'], + max_open_trades=config['max_open_trades'], + results=results.loc[results['open_at_end']], + skip_nan=True) table = generate_text_table(left_open_results, stake_currency=config['stake_currency']) if isinstance(table, str): print(' LEFT OPEN TRADES REPORT '.center(len(table.splitlines()[0]), '=')) diff --git a/tests/optimize/test_optimize_reports.py b/tests/optimize/test_optimize_reports.py index dab0586ac..006ec4cbb 100644 --- a/tests/optimize/test_optimize_reports.py +++ b/tests/optimize/test_optimize_reports.py @@ -6,7 +6,7 @@ from arrow import Arrow from freqtrade.edge import PairInfo from freqtrade.optimize.optimize_reports import ( - _generate_pair_results, generate_edge_table, generate_sell_reason_stats, + generate_pair_results, generate_edge_table, generate_sell_reason_stats, generate_text_table, generate_text_table_sell_reason, generate_text_table_strategy, store_backtest_result) from freqtrade.strategy.interface import SellType @@ -38,13 +38,37 @@ def test_generate_text_table(default_conf, mocker): ' 15.00 | 0:20:00 | 2 | 0 | 0 |' ) - pair_results = _generate_pair_results(data={'ETH/BTC': {}}, stake_currency='BTC', - max_open_trades=2, - results=results) + pair_results = generate_pair_results(data={'ETH/BTC': {}}, stake_currency='BTC', + max_open_trades=2, results=results) assert generate_text_table(pair_results, stake_currency='BTC') == result_str +def test_generate_pair_results(default_conf, mocker): + + results = pd.DataFrame( + { + 'pair': ['ETH/BTC', 'ETH/BTC'], + 'profit_percent': [0.1, 0.2], + 'profit_abs': [0.2, 0.4], + 'trade_duration': [10, 30], + 'wins': [2, 0], + 'draws': [0, 0], + 'losses': [0, 0] + } + ) + + pair_results = generate_pair_results(data={'ETH/BTC': {}}, stake_currency='BTC', + max_open_trades=2, results=results) + assert isinstance(pair_results, list) + assert len(pair_results) == 2 + assert pair_results[-1]['key'] == 'TOTAL' + assert ( + pytest.approx(pair_results[-1]['profit_mean_pct']) == pair_results[-1]['profit_mean'] * 100) + assert ( + pytest.approx(pair_results[-1]['profit_sum_pct']) == pair_results[-1]['profit_sum'] * 100) + + def test_generate_text_table_sell_reason(default_conf): results = pd.DataFrame(