Hanging Orders Tracker
This section of the tutorial provides an overview of the
helper class designed to assist strategies with managing hanging orders. It automates
a large part of the process, including renewing outdated orders and cancelling orders that have drifted too far from
the market price.
An important fundamental concept to be aware of is that the tracker operates by maintaining a list of candidate
hanging orders. This article will refer to that list as "the candidate list". Calling the
update_strategy_orders_with_equivalent_orders method will perform a check that the candidate list is synchronized
with the orders on the exchange and will effectively start tracking the hanging orders.
The most basic set of methods are the
remove_order which respectively add and remove orders from the
candidate list of hanging orders. However, the
add_order function is most likely to be used in the initialization
of the strategy, when hanging orders are retrieved from the database and registered with the tracker, while the
remove_order function may not have to be used at all as the responsibility of removing tracked hanging orders is
transferred to the tracker and automated away.
Registering the Tracker¶
During the initialization phase, the
HangingOrdersTracker must be registered with the connectors used by
the strategy in order to receive updates about the orders and perform its responsibilities. This is achieved by simply
register_events method and passing a list of the relevant connectors. When the strategy is being stopped,
unregister_events must be called to gracefully deregister the tracker from the connectors.
Hanging Orders Creation Flow¶
When creating new orders, use the method aptly named
to register the order pairs by passing them in as
CreatedPairOfOrders. The tracker then starts listening for filled
orders and updates the pairs accordingly.
Once the current cycle is over and the strategy is about to cancel the current orders and replace them with a new set,
update_strategy_orders_with_equivalent_orders will detect hanging orders from the currently active
CreatedPairOrders and add them to the candidate orders list. Subsequently, as mentioned in the
Fundamental Concepts section, calling the
will ensure the integrity of the candidate orders list and start tracking the hanging orders.
After this step is performed, the strategy can proceed to cancelling the orders it wants to cancel as part of the
current cycle termination process. It simply needs to ask the tracker if a given order is a hanging order by calling the
is_order_id_in_hanging_orders method. If it is, the strategy doesn't need to worry about that order anymore. If it's
not, then the strategy can proceed to cancelling it.
The Management Process¶
Finally, for the tracker to perform its tasks, the
process_tick method must be called on every strategy tick. When the
method is called, the
HangingOrdersTracker performs two tasks: first, it removes hanging orders with
extreme spreads; second, it renews orders that have passed
the max order age. To enable renewing old orders, the strategy must implement the