Skip to content

Commit

Permalink
Merge remote-tracking branch 'vvk/fix-SO-dust-order-cancel' into pr-7…
Browse files Browse the repository at this point in the history
…05-merge
  • Loading branch information
joelvai committed Dec 18, 2019
2 parents 4b93b5f + 4940b20 commit 81081ee
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 8 deletions.
8 changes: 4 additions & 4 deletions dexbot/strategies/staggered_orders.py
Expand Up @@ -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
Expand Down
36 changes: 32 additions & 4 deletions tests/strategies/staggered_orders/test_staggered_orders_complex.py
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 81081ee

Please sign in to comment.