From 0e699b87af3bf3c9097c7774689f0a29f35196a8 Mon Sep 17 00:00:00 2001 From: xmatthias Date: Thu, 7 Jun 2018 20:08:46 +0200 Subject: [PATCH 1/2] don't sum percentage, but use mean instead (aligned to backtesting) --- freqtrade/rpc/rpc.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index f48666748..c2f097319 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -9,6 +9,7 @@ from typing import Dict, Tuple, Any import arrow import sqlalchemy as sql from pandas import DataFrame +from numpy import mean, nan_to_num from freqtrade import exchange from freqtrade.misc import shorten_date @@ -209,14 +210,14 @@ class RPC(object): fiat = self.freqtrade.fiat_converter # Prepare data to display profit_closed_coin = round(sum(profit_closed_coin), 8) - profit_closed_percent = round(sum(profit_closed_percent) * 100, 2) + profit_closed_percent = round(nan_to_num(mean(profit_closed_percent)) * 100, 2) profit_closed_fiat = fiat.convert_amount( profit_closed_coin, stake_currency, fiat_display_currency ) profit_all_coin = round(sum(profit_all_coin), 8) - profit_all_percent = round(sum(profit_all_percent) * 100, 2) + profit_all_percent = round(nan_to_num(mean(profit_all_percent)) * 100, 2) profit_all_fiat = fiat.convert_amount( profit_all_coin, stake_currency, From f5fe9a4b1c6ef584b52e46a9525fa2fdfbdc1368 Mon Sep 17 00:00:00 2001 From: xmatthias Date: Thu, 7 Jun 2018 20:52:03 +0200 Subject: [PATCH 2/2] fix rpc tests (add a test with multiple trades without this, sum/percentage cannot be properly tested. --- freqtrade/tests/rpc/test_rpc.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/freqtrade/tests/rpc/test_rpc.py b/freqtrade/tests/rpc/test_rpc.py index 1cf374b6b..a6ac45b58 100644 --- a/freqtrade/tests/rpc/test_rpc.py +++ b/freqtrade/tests/rpc/test_rpc.py @@ -206,15 +206,30 @@ def test_rpc_trade_statistics(default_conf, ticker, ticker_sell_up, fee, trade.close_date = datetime.utcnow() trade.is_open = False + freqtradebot.create_trade() + trade = Trade.query.first() + # Simulate fulfilled LIMIT_BUY order for trade + trade.update(limit_buy_order) + + # Update the ticker with a market going up + mocker.patch.multiple( + 'freqtrade.freqtradebot.exchange', + validate_pairs=MagicMock(), + get_ticker=ticker_sell_up + ) + trade.update(limit_sell_order) + trade.close_date = datetime.utcnow() + trade.is_open = False + (error, stats) = rpc.rpc_trade_statistics(stake_currency, fiat_display_currency) assert not error assert prec_satoshi(stats['profit_closed_coin'], 6.217e-05) assert prec_satoshi(stats['profit_closed_percent'], 6.2) assert prec_satoshi(stats['profit_closed_fiat'], 0.93255) - assert prec_satoshi(stats['profit_all_coin'], 6.217e-05) - assert prec_satoshi(stats['profit_all_percent'], 6.2) - assert prec_satoshi(stats['profit_all_fiat'], 0.93255) - assert stats['trade_count'] == 1 + assert prec_satoshi(stats['profit_all_coin'], 5.632e-05) + assert prec_satoshi(stats['profit_all_percent'], 2.81) + assert prec_satoshi(stats['profit_all_fiat'], 0.8448) + assert stats['trade_count'] == 2 assert stats['first_trade_date'] == 'just now' assert stats['latest_trade_date'] == 'just now' assert stats['avg_duration'] == '0:00:00'