Test leverage call in freqtradebot
This commit is contained in:
parent
9aed76ba17
commit
988f4d5190
@ -701,17 +701,26 @@ def test_process_informative_pairs_added(default_conf_usdt, ticker_usdt, mocker)
|
|||||||
assert ("ETH/USDT", default_conf_usdt["timeframe"]) in refresh_mock.call_args[0][0]
|
assert ("ETH/USDT", default_conf_usdt["timeframe"]) in refresh_mock.call_args[0][0]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize("trading_mode", [
|
||||||
|
'spot',
|
||||||
|
# TODO-lev: Enable other modes
|
||||||
|
# 'margin', 'futures'
|
||||||
|
]
|
||||||
|
)
|
||||||
@pytest.mark.parametrize("is_short", [False, True])
|
@pytest.mark.parametrize("is_short", [False, True])
|
||||||
def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
||||||
limit_order_open, is_short) -> None:
|
limit_order_open, is_short, trading_mode) -> None:
|
||||||
|
|
||||||
open_order = limit_order_open[enter_side(is_short)]
|
open_order = limit_order_open[enter_side(is_short)]
|
||||||
order = limit_order[enter_side(is_short)]
|
order = limit_order[enter_side(is_short)]
|
||||||
|
default_conf_usdt['trading_mode'] = trading_mode
|
||||||
|
leverage = 1.0 if trading_mode == 'spot' else 3.0
|
||||||
|
default_conf_usdt['collateral'] = 'cross'
|
||||||
patch_RPCManager(mocker)
|
patch_RPCManager(mocker)
|
||||||
patch_exchange(mocker)
|
patch_exchange(mocker)
|
||||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||||
freqtrade.strategy.confirm_trade_entry = MagicMock(return_value=False)
|
freqtrade.strategy.confirm_trade_entry = MagicMock(return_value=False)
|
||||||
|
freqtrade.strategy.leverage = MagicMock(return_value=leverage)
|
||||||
stake_amount = 2
|
stake_amount = 2
|
||||||
bid = 0.11
|
bid = 0.11
|
||||||
enter_rate_mock = MagicMock(return_value=bid)
|
enter_rate_mock = MagicMock(return_value=bid)
|
||||||
@ -727,6 +736,7 @@ def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
|||||||
create_order=enter_mm,
|
create_order=enter_mm,
|
||||||
get_min_pair_stake_amount=MagicMock(return_value=1),
|
get_min_pair_stake_amount=MagicMock(return_value=1),
|
||||||
get_fee=fee,
|
get_fee=fee,
|
||||||
|
get_funding_fees=MagicMock(return_value=0),
|
||||||
)
|
)
|
||||||
pair = 'ETH/USDT'
|
pair = 'ETH/USDT'
|
||||||
|
|
||||||
@ -744,7 +754,7 @@ def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
|||||||
call_args = enter_mm.call_args_list[0][1]
|
call_args = enter_mm.call_args_list[0][1]
|
||||||
assert call_args['pair'] == pair
|
assert call_args['pair'] == pair
|
||||||
assert call_args['rate'] == bid
|
assert call_args['rate'] == bid
|
||||||
assert call_args['amount'] == round(stake_amount / bid, 8)
|
assert pytest.approx(call_args['amount'], round(stake_amount / bid * leverage, 8))
|
||||||
enter_rate_mock.reset_mock()
|
enter_rate_mock.reset_mock()
|
||||||
|
|
||||||
# Should create an open trade with an open order id
|
# Should create an open trade with an open order id
|
||||||
@ -766,7 +776,7 @@ def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
|||||||
call_args = enter_mm.call_args_list[1][1]
|
call_args = enter_mm.call_args_list[1][1]
|
||||||
assert call_args['pair'] == pair
|
assert call_args['pair'] == pair
|
||||||
assert call_args['rate'] == fix_price
|
assert call_args['rate'] == fix_price
|
||||||
assert call_args['amount'] == round(stake_amount / fix_price, 8)
|
assert pytest.approx(call_args['amount'], round(stake_amount / fix_price * leverage, 8))
|
||||||
|
|
||||||
# In case of closed order
|
# In case of closed order
|
||||||
order['status'] = 'closed'
|
order['status'] = 'closed'
|
||||||
@ -824,7 +834,7 @@ def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
|||||||
|
|
||||||
# In case of the order is rejected and not filled at all
|
# In case of the order is rejected and not filled at all
|
||||||
order['status'] = 'rejected'
|
order['status'] = 'rejected'
|
||||||
order['amount'] = 30.0
|
order['amount'] = 30.0 * leverage
|
||||||
order['filled'] = 0.0
|
order['filled'] = 0.0
|
||||||
order['remaining'] = 30.0
|
order['remaining'] = 30.0
|
||||||
order['price'] = 0.5
|
order['price'] = 0.5
|
||||||
@ -833,6 +843,7 @@ def test_execute_entry(mocker, default_conf_usdt, fee, limit_order,
|
|||||||
mocker.patch('freqtrade.exchange.Exchange.create_order',
|
mocker.patch('freqtrade.exchange.Exchange.create_order',
|
||||||
MagicMock(return_value=order))
|
MagicMock(return_value=order))
|
||||||
assert not freqtrade.execute_entry(pair, stake_amount)
|
assert not freqtrade.execute_entry(pair, stake_amount)
|
||||||
|
assert freqtrade.strategy.leverage.call_count == 0 if trading_mode == 'spot' else 2
|
||||||
|
|
||||||
# Fail to get price...
|
# Fail to get price...
|
||||||
mocker.patch('freqtrade.exchange.Exchange.get_rate', MagicMock(return_value=0.0))
|
mocker.patch('freqtrade.exchange.Exchange.get_rate', MagicMock(return_value=0.0))
|
||||||
|
Loading…
Reference in New Issue
Block a user