Add API endpoint for /stats
This commit is contained in:
parent
81410fb404
commit
3ab5514697
@ -127,6 +127,7 @@ python3 scripts/rest_client.py --config rest_config.json <command> [optional par
|
|||||||
| `performance` | Show performance of each finished trade grouped by pair.
|
| `performance` | Show performance of each finished trade grouped by pair.
|
||||||
| `balance` | Show account balance per currency.
|
| `balance` | Show account balance per currency.
|
||||||
| `daily <n>` | Shows profit or loss per day, over the last n days (n defaults to 7).
|
| `daily <n>` | Shows profit or loss per day, over the last n days (n defaults to 7).
|
||||||
|
| `stats` | Display a summary of profit / loss reasons as well as average holding times.
|
||||||
| `whitelist` | Show the current whitelist.
|
| `whitelist` | Show the current whitelist.
|
||||||
| `blacklist [pair]` | Show the current blacklist, or adds a pair to the blacklist.
|
| `blacklist [pair]` | Show the current blacklist, or adds a pair to the blacklist.
|
||||||
| `edge` | Show validated pairs by Edge if it is enabled.
|
| `edge` | Show validated pairs by Edge if it is enabled.
|
||||||
@ -229,6 +230,9 @@ show_config
|
|||||||
start
|
start
|
||||||
Start the bot if it's in the stopped state.
|
Start the bot if it's in the stopped state.
|
||||||
|
|
||||||
|
stats
|
||||||
|
Return the stats report (durations, sell-reasons).
|
||||||
|
|
||||||
status
|
status
|
||||||
Get the status of open trades.
|
Get the status of open trades.
|
||||||
|
|
||||||
|
@ -198,6 +198,8 @@ class ApiServer(RPC):
|
|||||||
self.app.add_url_rule(f'{BASE_URI}/logs', 'log', view_func=self._get_logs, methods=['GET'])
|
self.app.add_url_rule(f'{BASE_URI}/logs', 'log', view_func=self._get_logs, methods=['GET'])
|
||||||
self.app.add_url_rule(f'{BASE_URI}/profit', 'profit',
|
self.app.add_url_rule(f'{BASE_URI}/profit', 'profit',
|
||||||
view_func=self._profit, methods=['GET'])
|
view_func=self._profit, methods=['GET'])
|
||||||
|
self.app.add_url_rule(f'{BASE_URI}/stats', 'stats',
|
||||||
|
view_func=self._stats, methods=['GET'])
|
||||||
self.app.add_url_rule(f'{BASE_URI}/performance', 'performance',
|
self.app.add_url_rule(f'{BASE_URI}/performance', 'performance',
|
||||||
view_func=self._performance, methods=['GET'])
|
view_func=self._performance, methods=['GET'])
|
||||||
self.app.add_url_rule(f'{BASE_URI}/status', 'status',
|
self.app.add_url_rule(f'{BASE_URI}/status', 'status',
|
||||||
@ -417,6 +419,18 @@ class ApiServer(RPC):
|
|||||||
|
|
||||||
return jsonify(stats)
|
return jsonify(stats)
|
||||||
|
|
||||||
|
@require_login
|
||||||
|
@rpc_catch_errors
|
||||||
|
def _stats(self):
|
||||||
|
"""
|
||||||
|
Handler for /stats.
|
||||||
|
Returns a Object with "durations" and "sell_reasons" as keys.
|
||||||
|
"""
|
||||||
|
|
||||||
|
stats = self._rpc_stats()
|
||||||
|
|
||||||
|
return jsonify(stats)
|
||||||
|
|
||||||
@require_login
|
@require_login
|
||||||
@rpc_catch_errors
|
@rpc_catch_errors
|
||||||
def _performance(self):
|
def _performance(self):
|
||||||
|
@ -139,6 +139,13 @@ class FtRestClient():
|
|||||||
"""
|
"""
|
||||||
return self._get("profit")
|
return self._get("profit")
|
||||||
|
|
||||||
|
def stats(self):
|
||||||
|
"""Return the stats report (durations, sell-reasons).
|
||||||
|
|
||||||
|
:return: json object
|
||||||
|
"""
|
||||||
|
return self._get("stats")
|
||||||
|
|
||||||
def performance(self):
|
def performance(self):
|
||||||
"""Return the performance of the different coins.
|
"""Return the performance of the different coins.
|
||||||
|
|
||||||
|
@ -559,6 +559,35 @@ def test_api_profit(botclient, mocker, ticker, fee, markets, limit_buy_order, li
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("init_persistence")
|
||||||
|
def test_api_stats(botclient, mocker, ticker, fee, markets,):
|
||||||
|
ftbot, client = botclient
|
||||||
|
patch_get_signal(ftbot, (True, False))
|
||||||
|
mocker.patch.multiple(
|
||||||
|
'freqtrade.exchange.Exchange',
|
||||||
|
get_balances=MagicMock(return_value=ticker),
|
||||||
|
fetch_ticker=ticker,
|
||||||
|
get_fee=fee,
|
||||||
|
markets=PropertyMock(return_value=markets)
|
||||||
|
)
|
||||||
|
|
||||||
|
rc = client_get(client, f"{BASE_URI}/stats")
|
||||||
|
assert_response(rc, 200)
|
||||||
|
assert 'durations' in rc.json
|
||||||
|
assert 'sell_reasons' in rc.json
|
||||||
|
|
||||||
|
create_mock_trades(fee)
|
||||||
|
|
||||||
|
rc = client_get(client, f"{BASE_URI}/stats")
|
||||||
|
assert_response(rc, 200)
|
||||||
|
assert 'durations' in rc.json
|
||||||
|
assert 'sell_reasons' in rc.json
|
||||||
|
|
||||||
|
assert 'wins' in rc.json['durations']
|
||||||
|
assert 'losses' in rc.json['durations']
|
||||||
|
assert 'draws' in rc.json['durations']
|
||||||
|
|
||||||
|
|
||||||
def test_api_performance(botclient, mocker, ticker, fee):
|
def test_api_performance(botclient, mocker, ticker, fee):
|
||||||
ftbot, client = botclient
|
ftbot, client = botclient
|
||||||
patch_get_signal(ftbot, (True, False))
|
patch_get_signal(ftbot, (True, False))
|
||||||
|
Loading…
Reference in New Issue
Block a user