added partial fills for dry run
If we buy 2 coins at $2.5 and in order book only 1 coin is left for $2.5 and then the order should be partially filled. Previously it would be fully filled.
This commit is contained in:
@@ -29,6 +29,16 @@ from tests.conftest_trades import (MOCK_TRADE_COUNT, mock_order_1, mock_order_2,
|
||||
mock_order_5_stoploss, mock_order_6_sell)
|
||||
|
||||
|
||||
class SideEffect:
|
||||
# https://stackoverflow.com/a/64992350
|
||||
def __init__(self, *fns):
|
||||
self.fs = iter(fns)
|
||||
|
||||
def __call__(self, *args, **kwargs):
|
||||
f = next(self.fs)
|
||||
return f(*args, **kwargs)
|
||||
|
||||
|
||||
def patch_RPCManager(mocker) -> MagicMock:
|
||||
"""
|
||||
This function mock RPC manager to avoid repeating this code in almost every tests
|
||||
@@ -246,7 +256,7 @@ def test_total_open_trades_stakes(mocker, default_conf_usdt, ticker_usdt, fee) -
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||
patch_get_signal(freqtrade)
|
||||
@@ -276,7 +286,7 @@ def test_create_trade(default_conf_usdt, ticker_usdt, limit_buy_order_usdt, fee,
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
|
||||
# Save state of current whitelist
|
||||
@@ -2665,7 +2675,7 @@ def test_execute_trade_exit_up(default_conf_usdt, ticker_usdt, fee, ticker_usdt_
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
patch_whitelist(mocker, default_conf_usdt)
|
||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||
@@ -2733,7 +2743,7 @@ def test_execute_trade_exit_down(default_conf_usdt, ticker_usdt, fee, ticker_usd
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
patch_whitelist(mocker, default_conf_usdt)
|
||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||
@@ -2787,7 +2797,7 @@ def test_execute_trade_exit_custom_exit_price(default_conf_usdt, ticker_usdt, fe
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
config = deepcopy(default_conf_usdt)
|
||||
config['custom_price_max_distance_ratio'] = 0.1
|
||||
@@ -2855,7 +2865,7 @@ def test_execute_trade_exit_down_stoploss_on_exchange_dry_run(
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
patch_whitelist(mocker, default_conf_usdt)
|
||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||
@@ -2963,7 +2973,7 @@ def test_execute_trade_exit_with_stoploss_on_exchange(default_conf_usdt, ticker_
|
||||
price_to_precision=lambda s, x, y: y,
|
||||
stoploss=stoploss,
|
||||
cancel_stoploss_order=cancel_order,
|
||||
_is_dry_limit_order_filled=MagicMock(side_effect=[True, False]),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=SideEffect(lambda *_: _[-2:], lambda *_: (None, 0))),
|
||||
)
|
||||
|
||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||
@@ -3006,7 +3016,7 @@ def test_may_execute_trade_exit_after_stoploss_on_exchange_hit(default_conf_usdt
|
||||
get_fee=fee,
|
||||
amount_to_precision=lambda s, x, y: y,
|
||||
price_to_precision=lambda s, x, y: y,
|
||||
_is_dry_limit_order_filled=MagicMock(side_effect=[False, True]),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=SideEffect(lambda *_: (None, 0), lambda *_: _[-2:])),
|
||||
)
|
||||
|
||||
stoploss = MagicMock(return_value={
|
||||
@@ -3075,7 +3085,7 @@ def test_execute_trade_exit_market_order(default_conf_usdt, ticker_usdt, fee,
|
||||
'freqtrade.exchange.Exchange',
|
||||
fetch_ticker=ticker_usdt,
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
patch_whitelist(mocker, default_conf_usdt)
|
||||
freqtrade = FreqtradeBot(default_conf_usdt)
|
||||
@@ -3530,7 +3540,7 @@ def test_disable_ignore_roi_if_buy_signal(default_conf_usdt, limit_buy_order_usd
|
||||
{'id': 1234553383}
|
||||
]),
|
||||
get_fee=fee,
|
||||
_is_dry_limit_order_filled=MagicMock(return_value=False),
|
||||
_fill_dry_limit_order=MagicMock(side_effect=lambda *_ :(None, 0)),
|
||||
)
|
||||
default_conf_usdt['ask_strategy'] = {
|
||||
'ignore_roi_if_buy_signal': False
|
||||
|
||||
Reference in New Issue
Block a user