From 4940b201fea092f03f31010ca0490a1419c05f6b Mon Sep 17 00:00:00 2001 From: Vladimir Kamarzin Date: Wed, 27 Nov 2019 22:20:36 +0500 Subject: [PATCH] Fix cancel dust order A slight regression was introduced in 32dbafbcace9d1113578416cc24041d75eea3741 --- dexbot/strategies/staggered_orders.py | 8 ++--- .../test_staggered_orders_complex.py | 36 ++++++++++++++++--- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/dexbot/strategies/staggered_orders.py b/dexbot/strategies/staggered_orders.py index 56be6bc53..85275bea2 100644 --- a/dexbot/strategies/staggered_orders.py +++ b/dexbot/strategies/staggered_orders.py @@ -1403,11 +1403,11 @@ def increase_order_sizes(self, asset, asset_balance, orders): if ops_num > 10: return 'in_progress' - if ops_num < 10: + if 0 < ops_num < 10: return 'done_with_ops' - else: - # All funds were used - return 'done' + + # All funds were used + return 'done' def check_partial_fill(self, order, fill_threshold=None): """ Checks whether order was partially filled it needs to be replaced diff --git a/tests/strategies/staggered_orders/test_staggered_orders_complex.py b/tests/strategies/staggered_orders/test_staggered_orders_complex.py index 7970eb393..1c0b8c3d4 100644 --- a/tests/strategies/staggered_orders/test_staggered_orders_complex.py +++ b/tests/strategies/staggered_orders/test_staggered_orders_complex.py @@ -969,7 +969,37 @@ def test_allocate_asset_dust_order_simple(worker, do_initial_allocation, maintai assert num_sell_orders_after - num_sell_orders_before == 1 -def test_allocate_asset_dust_order_increase(worker, do_initial_allocation, base_account, issue_asset): +def test_allocate_asset_dust_order_excess_funds( + worker, do_initial_allocation, maintain_until_allocated, base_account, issue_asset +): + """ Make dust order, add additional funds, these funds should be allocated + and then dust order should be canceled and closer opposite order placed + """ + do_initial_allocation(worker, worker.mode) + num_sell_orders_before = len(worker.sell_orders) + num_buy_orders_before = len(worker.buy_orders) + additional_account = base_account() + + # Partially fill order from another account + sell_price = worker.buy_orders[0]['price'] / 1.01 + sell_amount = worker.buy_orders[0]['quote']['amount'] * (1 - worker.partial_fill_threshold) * 1.1 + worker.market.sell(sell_price, sell_amount, account=additional_account) + + # Add some balance to the worker + issue_asset(worker.market['quote']['symbol'], worker.sell_orders[0]['base']['amount'], worker.account.name) + + worker.refresh_balances() + worker.refresh_orders() + worker.allocate_asset('quote', worker.quote_balance) + worker.refresh_orders() + num_sell_orders_after = len(worker.sell_orders) + num_buy_orders_after = len(worker.buy_orders) + + assert num_buy_orders_before - num_buy_orders_after == 1 + assert num_sell_orders_after - num_sell_orders_before == 1 + + +def test_allocate_asset_dust_order_increase_race(worker, do_initial_allocation, base_account, issue_asset): """ Test for https://github.com/Codaone/DEXBot/issues/587 Check if cancelling dust orders on opposite side will not cause a race for allocate_asset() on opposite side @@ -1021,9 +1051,7 @@ def test_allocate_asset_filled_orders(worker, do_initial_allocation, base_accoun assert num_sell_orders_after - num_sell_orders_before == 1 -def test_allocate_asset_filled_order_on_massively_imbalanced_sides( - worker, do_initial_allocation, base_account -): +def test_allocate_asset_filled_order_on_massively_imbalanced_sides(worker, do_initial_allocation, base_account): """ When sides are massively imbalanced, make sure that spread will be closed after filling one order on smaller side. The goal is to test a situation when one side has a big-sized orders, and other side has much smaller orders. Correct behavior: when order on smaller side filled, big side should place closer order.