Merge pull request #3440 from freqtrade/rpc_status_fields
Rpc status fields
This commit is contained in:
commit
a86863c032
@ -130,6 +130,14 @@ class RPC:
|
|||||||
except DependencyException:
|
except DependencyException:
|
||||||
current_rate = NAN
|
current_rate = NAN
|
||||||
current_profit = trade.calc_profit_ratio(current_rate)
|
current_profit = trade.calc_profit_ratio(current_rate)
|
||||||
|
current_profit_abs = trade.calc_profit(current_rate)
|
||||||
|
# Calculate guaranteed profit (in case of trailing stop)
|
||||||
|
stoploss_entry_dist = trade.calc_profit(trade.stop_loss)
|
||||||
|
stoploss_entry_dist_ratio = trade.calc_profit_ratio(trade.stop_loss)
|
||||||
|
# calculate distance to stoploss
|
||||||
|
stoploss_current_dist = trade.stop_loss - current_rate
|
||||||
|
stoploss_current_dist_ratio = stoploss_current_dist / current_rate
|
||||||
|
|
||||||
fmt_close_profit = (f'{round(trade.close_profit * 100, 2):.2f}%'
|
fmt_close_profit = (f'{round(trade.close_profit * 100, 2):.2f}%'
|
||||||
if trade.close_profit is not None else None)
|
if trade.close_profit is not None else None)
|
||||||
trade_dict = trade.to_json()
|
trade_dict = trade.to_json()
|
||||||
@ -140,6 +148,11 @@ class RPC:
|
|||||||
current_rate=current_rate,
|
current_rate=current_rate,
|
||||||
current_profit=current_profit,
|
current_profit=current_profit,
|
||||||
current_profit_pct=round(current_profit * 100, 2),
|
current_profit_pct=round(current_profit * 100, 2),
|
||||||
|
current_profit_abs=current_profit_abs,
|
||||||
|
stoploss_current_dist=stoploss_current_dist,
|
||||||
|
stoploss_current_dist_ratio=round(stoploss_current_dist_ratio, 8),
|
||||||
|
stoploss_entry_dist=stoploss_entry_dist,
|
||||||
|
stoploss_entry_dist_ratio=round(stoploss_entry_dist_ratio, 8),
|
||||||
open_order='({} {} rem={:.8f})'.format(
|
open_order='({} {} rem={:.8f})'.format(
|
||||||
order['type'], order['side'], order['remaining']
|
order['type'], order['side'], order['remaining']
|
||||||
) if order else None,
|
) if order else None,
|
||||||
|
@ -42,8 +42,12 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
rpc._rpc_trade_status()
|
rpc._rpc_trade_status()
|
||||||
|
|
||||||
freqtradebot.enter_positions()
|
freqtradebot.enter_positions()
|
||||||
|
trades = Trade.get_open_trades()
|
||||||
|
trades[0].open_order_id = None
|
||||||
|
freqtradebot.exit_positions(trades)
|
||||||
|
|
||||||
results = rpc._rpc_trade_status()
|
results = rpc._rpc_trade_status()
|
||||||
assert {
|
assert results[0] == {
|
||||||
'trade_id': 1,
|
'trade_id': 1,
|
||||||
'pair': 'ETH/BTC',
|
'pair': 'ETH/BTC',
|
||||||
'base_currency': 'BTC',
|
'base_currency': 'BTC',
|
||||||
@ -54,11 +58,11 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
'fee_open': ANY,
|
'fee_open': ANY,
|
||||||
'fee_open_cost': ANY,
|
'fee_open_cost': ANY,
|
||||||
'fee_open_currency': ANY,
|
'fee_open_currency': ANY,
|
||||||
'fee_close': ANY,
|
'fee_close': fee.return_value,
|
||||||
'fee_close_cost': ANY,
|
'fee_close_cost': ANY,
|
||||||
'fee_close_currency': ANY,
|
'fee_close_currency': ANY,
|
||||||
'open_rate_requested': ANY,
|
'open_rate_requested': ANY,
|
||||||
'open_trade_price': ANY,
|
'open_trade_price': 0.0010025,
|
||||||
'close_rate_requested': ANY,
|
'close_rate_requested': ANY,
|
||||||
'sell_reason': ANY,
|
'sell_reason': ANY,
|
||||||
'sell_order_status': ANY,
|
'sell_order_status': ANY,
|
||||||
@ -80,28 +84,32 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
'close_profit_abs': None,
|
'close_profit_abs': None,
|
||||||
'current_profit': -0.00408133,
|
'current_profit': -0.00408133,
|
||||||
'current_profit_pct': -0.41,
|
'current_profit_pct': -0.41,
|
||||||
'stop_loss': 0.0,
|
'current_profit_abs': -4.09e-06,
|
||||||
'stop_loss_abs': 0.0,
|
'stop_loss': 9.882e-06,
|
||||||
'stop_loss_pct': None,
|
'stop_loss_abs': 9.882e-06,
|
||||||
'stop_loss_ratio': None,
|
'stop_loss_pct': -10.0,
|
||||||
|
'stop_loss_ratio': -0.1,
|
||||||
'stoploss_order_id': None,
|
'stoploss_order_id': None,
|
||||||
'stoploss_last_update': None,
|
'stoploss_last_update': ANY,
|
||||||
'stoploss_last_update_timestamp': None,
|
'stoploss_last_update_timestamp': ANY,
|
||||||
'initial_stop_loss': 0.0,
|
'initial_stop_loss': 9.882e-06,
|
||||||
'initial_stop_loss_abs': 0.0,
|
'initial_stop_loss_abs': 9.882e-06,
|
||||||
'initial_stop_loss_pct': None,
|
'initial_stop_loss_pct': -10.0,
|
||||||
'initial_stop_loss_ratio': None,
|
'initial_stop_loss_ratio': -0.1,
|
||||||
'open_order': '(limit buy rem=0.00000000)',
|
'stoploss_current_dist': -1.1080000000000002e-06,
|
||||||
|
'stoploss_current_dist_ratio': -0.10081893,
|
||||||
|
'stoploss_entry_dist': -0.00010475,
|
||||||
|
'stoploss_entry_dist_ratio': -0.10448878,
|
||||||
|
'open_order': None,
|
||||||
'exchange': 'bittrex',
|
'exchange': 'bittrex',
|
||||||
|
}
|
||||||
} == results[0]
|
|
||||||
|
|
||||||
mocker.patch('freqtrade.freqtradebot.FreqtradeBot.get_sell_rate',
|
mocker.patch('freqtrade.freqtradebot.FreqtradeBot.get_sell_rate',
|
||||||
MagicMock(side_effect=DependencyException("Pair 'ETH/BTC' not available")))
|
MagicMock(side_effect=DependencyException("Pair 'ETH/BTC' not available")))
|
||||||
results = rpc._rpc_trade_status()
|
results = rpc._rpc_trade_status()
|
||||||
assert isnan(results[0]['current_profit'])
|
assert isnan(results[0]['current_profit'])
|
||||||
assert isnan(results[0]['current_rate'])
|
assert isnan(results[0]['current_rate'])
|
||||||
assert {
|
assert results[0] == {
|
||||||
'trade_id': 1,
|
'trade_id': 1,
|
||||||
'pair': 'ETH/BTC',
|
'pair': 'ETH/BTC',
|
||||||
'base_currency': 'BTC',
|
'base_currency': 'BTC',
|
||||||
@ -112,7 +120,7 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
'fee_open': ANY,
|
'fee_open': ANY,
|
||||||
'fee_open_cost': ANY,
|
'fee_open_cost': ANY,
|
||||||
'fee_open_currency': ANY,
|
'fee_open_currency': ANY,
|
||||||
'fee_close': ANY,
|
'fee_close': fee.return_value,
|
||||||
'fee_close_cost': ANY,
|
'fee_close_cost': ANY,
|
||||||
'fee_close_currency': ANY,
|
'fee_close_currency': ANY,
|
||||||
'open_rate_requested': ANY,
|
'open_rate_requested': ANY,
|
||||||
@ -138,20 +146,25 @@ def test_rpc_trade_status(default_conf, ticker, fee, mocker) -> None:
|
|||||||
'close_profit_abs': None,
|
'close_profit_abs': None,
|
||||||
'current_profit': ANY,
|
'current_profit': ANY,
|
||||||
'current_profit_pct': ANY,
|
'current_profit_pct': ANY,
|
||||||
'stop_loss': 0.0,
|
'current_profit_abs': ANY,
|
||||||
'stop_loss_abs': 0.0,
|
'stop_loss': 9.882e-06,
|
||||||
'stop_loss_pct': None,
|
'stop_loss_abs': 9.882e-06,
|
||||||
'stop_loss_ratio': None,
|
'stop_loss_pct': -10.0,
|
||||||
|
'stop_loss_ratio': -0.1,
|
||||||
'stoploss_order_id': None,
|
'stoploss_order_id': None,
|
||||||
'stoploss_last_update': None,
|
'stoploss_last_update': ANY,
|
||||||
'stoploss_last_update_timestamp': None,
|
'stoploss_last_update_timestamp': ANY,
|
||||||
'initial_stop_loss': 0.0,
|
'initial_stop_loss': 9.882e-06,
|
||||||
'initial_stop_loss_abs': 0.0,
|
'initial_stop_loss_abs': 9.882e-06,
|
||||||
'initial_stop_loss_pct': None,
|
'initial_stop_loss_pct': -10.0,
|
||||||
'initial_stop_loss_ratio': None,
|
'initial_stop_loss_ratio': -0.1,
|
||||||
'open_order': '(limit buy rem=0.00000000)',
|
'stoploss_current_dist': ANY,
|
||||||
|
'stoploss_current_dist_ratio': ANY,
|
||||||
|
'stoploss_entry_dist': -0.00010475,
|
||||||
|
'stoploss_entry_dist_ratio': -0.10448878,
|
||||||
|
'open_order': None,
|
||||||
'exchange': 'bittrex',
|
'exchange': 'bittrex',
|
||||||
} == results[0]
|
}
|
||||||
|
|
||||||
|
|
||||||
def test_rpc_status_table(default_conf, ticker, fee, mocker) -> None:
|
def test_rpc_status_table(default_conf, ticker, fee, mocker) -> None:
|
||||||
|
@ -503,6 +503,10 @@ def test_api_status(botclient, mocker, ticker, fee, markets):
|
|||||||
assert rc.json == []
|
assert rc.json == []
|
||||||
|
|
||||||
ftbot.enter_positions()
|
ftbot.enter_positions()
|
||||||
|
trades = Trade.get_open_trades()
|
||||||
|
trades[0].open_order_id = None
|
||||||
|
ftbot.exit_positions(trades)
|
||||||
|
|
||||||
rc = client_get(client, f"{BASE_URI}/status")
|
rc = client_get(client, f"{BASE_URI}/status")
|
||||||
assert_response(rc)
|
assert_response(rc)
|
||||||
assert len(rc.json) == 1
|
assert len(rc.json) == 1
|
||||||
@ -517,25 +521,30 @@ def test_api_status(botclient, mocker, ticker, fee, markets):
|
|||||||
'close_rate': None,
|
'close_rate': None,
|
||||||
'current_profit': -0.00408133,
|
'current_profit': -0.00408133,
|
||||||
'current_profit_pct': -0.41,
|
'current_profit_pct': -0.41,
|
||||||
|
'current_profit_abs': -4.09e-06,
|
||||||
'current_rate': 1.099e-05,
|
'current_rate': 1.099e-05,
|
||||||
'open_date': ANY,
|
'open_date': ANY,
|
||||||
'open_date_hum': 'just now',
|
'open_date_hum': 'just now',
|
||||||
'open_timestamp': ANY,
|
'open_timestamp': ANY,
|
||||||
'open_order': '(limit buy rem=0.00000000)',
|
'open_order': None,
|
||||||
'open_rate': 1.098e-05,
|
'open_rate': 1.098e-05,
|
||||||
'pair': 'ETH/BTC',
|
'pair': 'ETH/BTC',
|
||||||
'stake_amount': 0.001,
|
'stake_amount': 0.001,
|
||||||
'stop_loss': 0.0,
|
'stop_loss': 9.882e-06,
|
||||||
'stop_loss_abs': 0.0,
|
'stop_loss_abs': 9.882e-06,
|
||||||
'stop_loss_pct': None,
|
'stop_loss_pct': -10.0,
|
||||||
'stop_loss_ratio': None,
|
'stop_loss_ratio': -0.1,
|
||||||
'stoploss_order_id': None,
|
'stoploss_order_id': None,
|
||||||
'stoploss_last_update': None,
|
'stoploss_last_update': ANY,
|
||||||
'stoploss_last_update_timestamp': None,
|
'stoploss_last_update_timestamp': ANY,
|
||||||
'initial_stop_loss': 0.0,
|
'initial_stop_loss': 9.882e-06,
|
||||||
'initial_stop_loss_abs': 0.0,
|
'initial_stop_loss_abs': 9.882e-06,
|
||||||
'initial_stop_loss_pct': None,
|
'initial_stop_loss_pct': -10.0,
|
||||||
'initial_stop_loss_ratio': None,
|
'initial_stop_loss_ratio': -0.1,
|
||||||
|
'stoploss_current_dist': -1.1080000000000002e-06,
|
||||||
|
'stoploss_current_dist_ratio': -0.10081893,
|
||||||
|
'stoploss_entry_dist': -0.00010475,
|
||||||
|
'stoploss_entry_dist_ratio': -0.10448878,
|
||||||
'trade_id': 1,
|
'trade_id': 1,
|
||||||
'close_rate_requested': None,
|
'close_rate_requested': None,
|
||||||
'current_rate': 1.099e-05,
|
'current_rate': 1.099e-05,
|
||||||
@ -547,9 +556,9 @@ def test_api_status(botclient, mocker, ticker, fee, markets):
|
|||||||
'fee_open_currency': None,
|
'fee_open_currency': None,
|
||||||
'open_date': ANY,
|
'open_date': ANY,
|
||||||
'is_open': True,
|
'is_open': True,
|
||||||
'max_rate': 0.0,
|
'max_rate': 1.099e-05,
|
||||||
'min_rate': None,
|
'min_rate': 1.098e-05,
|
||||||
'open_order_id': ANY,
|
'open_order_id': None,
|
||||||
'open_rate_requested': 1.098e-05,
|
'open_rate_requested': 1.098e-05,
|
||||||
'open_trade_price': 0.0010025,
|
'open_trade_price': 0.0010025,
|
||||||
'sell_reason': None,
|
'sell_reason': None,
|
||||||
|
Loading…
Reference in New Issue
Block a user