Merge pull request #1001 from xmatthias/feat/backtest_cum_profit

Add cumulative profit to backtest result table
This commit is contained in:
Janne Sinivirta 2018-07-11 07:21:28 +03:00 committed by GitHub
commit aa2366346a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 10 deletions

View File

@ -88,9 +88,9 @@ class Backtesting(object):
""" """
stake_currency = str(self.config.get('stake_currency')) stake_currency = str(self.config.get('stake_currency'))
floatfmt = ('s', 'd', '.2f', '.8f', '.1f') floatfmt = ('s', 'd', '.2f', '.2f', '.8f', '.1f')
tabular_data = [] tabular_data = []
headers = ['pair', 'buy count', 'avg profit %', headers = ['pair', 'buy count', 'avg profit %', 'cum profit %',
'total profit ' + stake_currency, 'avg duration', 'profit', 'loss'] 'total profit ' + stake_currency, 'avg duration', 'profit', 'loss']
for pair in data: for pair in data:
result = results[results.pair == pair] result = results[results.pair == pair]
@ -98,6 +98,7 @@ class Backtesting(object):
pair, pair,
len(result.index), len(result.index),
result.profit_percent.mean() * 100.0, result.profit_percent.mean() * 100.0,
result.profit_percent.sum() * 100.0,
result.profit_abs.sum(), result.profit_abs.sum(),
result.trade_duration.mean(), result.trade_duration.mean(),
len(result[result.profit_abs > 0]), len(result[result.profit_abs > 0]),
@ -109,6 +110,7 @@ class Backtesting(object):
'TOTAL', 'TOTAL',
len(results.index), len(results.index),
results.profit_percent.mean() * 100.0, results.profit_percent.mean() * 100.0,
result.profit_percent.sum() * 100.0,
results.profit_abs.sum(), results.profit_abs.sum(),
results.trade_duration.mean(), results.trade_duration.mean(),
len(results[results.profit_abs > 0]), len(results[results.profit_abs > 0]),
@ -312,9 +314,9 @@ class Backtesting(object):
self._store_backtest_result(self.config.get('exportfilename'), results) self._store_backtest_result(self.config.get('exportfilename'), results)
logger.info( logger.info(
'\n======================================== ' '\n================================================= '
'BACKTESTING REPORT' 'BACKTESTING REPORT'
' =========================================\n' ' ==================================================\n'
'%s', '%s',
self._generate_text_table( self._generate_text_table(
data, data,
@ -323,9 +325,9 @@ class Backtesting(object):
) )
logger.info( logger.info(
'\n====================================== ' '\n=============================================== '
'LEFT OPEN TRADES REPORT' 'LEFT OPEN TRADES REPORT'
' ======================================\n' ' ===============================================\n'
'%s', '%s',
self._generate_text_table( self._generate_text_table(
data, data,

View File

@ -391,15 +391,16 @@ def test_generate_text_table(default_conf, mocker):
) )
result_str = ( result_str = (
'| pair | buy count | avg profit % | ' '| pair | buy count | avg profit % | cum profit % | '
'total profit BTC | avg duration | profit | loss |\n' 'total profit BTC | avg duration | profit | loss |\n'
'|:--------|------------:|---------------:|' '|:--------|------------:|---------------:|---------------:|'
'-------------------:|---------------:|---------:|-------:|\n' '-------------------:|---------------:|---------:|-------:|\n'
'| ETH/BTC | 2 | 15.00 | ' '| ETH/BTC | 2 | 15.00 | 30.00 | '
'0.60000000 | 20.0 | 2 | 0 |\n' '0.60000000 | 20.0 | 2 | 0 |\n'
'| TOTAL | 2 | 15.00 | ' '| TOTAL | 2 | 15.00 | 30.00 | '
'0.60000000 | 20.0 | 2 | 0 |' '0.60000000 | 20.0 | 2 | 0 |'
) )
print(result_str)
assert backtesting._generate_text_table(data={'ETH/BTC': {}}, results=results) == result_str assert backtesting._generate_text_table(data={'ETH/BTC': {}}, results=results) == result_str