From 1a24afef7775bc238cd0159c035e9db695c7a10a Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 8 Jul 2018 19:55:04 +0200 Subject: [PATCH 1/3] add cumsum to backtest-results --- freqtrade/optimize/backtesting.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 16c21258f..56d9e3c63 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -88,9 +88,9 @@ class Backtesting(object): """ stake_currency = str(self.config.get('stake_currency')) - floatfmt = ('s', 'd', '.2f', '.8f', '.1f') + floatfmt = ('s', 'd', '.2f', '.2f', '.8f', '.1f') tabular_data = [] - headers = ['pair', 'buy count', 'avg profit %', + headers = ['pair', 'buy count', 'avg profit %', 'cum profit %', 'total profit ' + stake_currency, 'avg duration', 'profit', 'loss'] for pair in data: result = results[results.pair == pair] @@ -98,6 +98,7 @@ class Backtesting(object): pair, len(result.index), result.profit_percent.mean() * 100.0, + result.profit_percent.sum() * 100.0, result.profit_abs.sum(), result.trade_duration.mean(), len(result[result.profit_abs > 0]), @@ -109,6 +110,7 @@ class Backtesting(object): 'TOTAL', len(results.index), results.profit_percent.mean() * 100.0, + result.profit_percent.sum() * 100.0, results.profit_abs.sum(), results.trade_duration.mean(), len(results[results.profit_abs > 0]), From 38487644f01f35d66e2914b9b0a14e28617efda9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 8 Jul 2018 19:55:16 +0200 Subject: [PATCH 2/3] fix tests for backtest-result output table --- freqtrade/tests/optimize/test_backtesting.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index cb225e465..0407c0708 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -391,15 +391,16 @@ def test_generate_text_table(default_conf, mocker): ) result_str = ( - '| pair | buy count | avg profit % | ' + '| pair | buy count | avg profit % | cum profit % | ' 'total profit BTC | avg duration | profit | loss |\n' - '|:--------|------------:|---------------:|' + '|:--------|------------:|---------------:|---------------:|' '-------------------:|---------------:|---------:|-------:|\n' - '| ETH/BTC | 2 | 15.00 | ' + '| ETH/BTC | 2 | 15.00 | 30.00 | ' '0.60000000 | 20.0 | 2 | 0 |\n' - '| TOTAL | 2 | 15.00 | ' + '| TOTAL | 2 | 15.00 | 30.00 | ' '0.60000000 | 20.0 | 2 | 0 |' ) + print(result_str) assert backtesting._generate_text_table(data={'ETH/BTC': {}}, results=results) == result_str From efaa8f16e7f485a9c206a073262df59630088ad2 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 8 Jul 2018 20:01:33 +0200 Subject: [PATCH 3/3] Improve formattiong of table --- freqtrade/optimize/backtesting.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freqtrade/optimize/backtesting.py b/freqtrade/optimize/backtesting.py index 56d9e3c63..80116d144 100644 --- a/freqtrade/optimize/backtesting.py +++ b/freqtrade/optimize/backtesting.py @@ -314,9 +314,9 @@ class Backtesting(object): self._store_backtest_result(self.config.get('exportfilename'), results) logger.info( - '\n======================================== ' + '\n================================================= ' 'BACKTESTING REPORT' - ' =========================================\n' + ' ==================================================\n' '%s', self._generate_text_table( data, @@ -325,9 +325,9 @@ class Backtesting(object): ) logger.info( - '\n====================================== ' + '\n=============================================== ' 'LEFT OPEN TRADES REPORT' - ' ======================================\n' + ' ===============================================\n' '%s', self._generate_text_table( data,