Liquidity Reduction Tuning
The amount of liquidity reduction you apply depends on the amount of volume and types of trading activity you see in your book, if you are frequently seeing traders coordinate to hit your top-of-book in smaller quantities you may want to be more aggressive across the channel. However if you are noticing repeat offenders acting alone, you may want to apply just to the specific counterparty.
See identifying accounts that are exhausting liquidity for more information on how much LR is necessary
Liquidity reduction can be applied per instrument and timezone and on a channel, global or counterparty level.
How to know if liquidity reduction is working
Echo reports on liquidity reduction PnL, this can be viewed in absolute dollar or $/M values to monitor the spreads you are charging counterparties over periods of higher volume.
You are able to filter by the liquidity reduction P&L bucket to identify those trades where a higher spread was charged:
Tuning config
Example config:
This is reducing gold at $180k per 30s with a 2x multiplier on volume, capped at $100/M with an initial surplus volume of $180k to which LR will not be applied:
- Burst Amount - the maximum amount allowed if no activity has occurred recently before liquidity reduction starts to kick in.
- Rate Limit Amount - the number of tokens returned to the Token Bucket per Rate Limit Period
- Rate Limit Period - (in milliseconds) the period over which Rate Limit Amount tokens are returned to the Token Bucket
- Max Reduction - (dollars per million) the maximum reduction that is allowed for this Liquidity Refresh Profile. This reduces cancels by ensuring liquidity is never exhausted and limits the amount of slippage applied to a trade.
Liquidity reduction cap
It may be desired to limit/cap the amount of liquidity reduction that is applied. To do this, there is an additional Liquidity Reduction Cap setting on the LR config, "maxReductionUsdPerMillion", which specifies a maximum distance from TOB in USD per million, for which liquidity can be reduced. The TOB price + this markup can be considered as a "cap price", beyond which LR will no longer occur.
When this setting is active, liquidity is not actually removed from the stack, and is instead just moved from the top of the stack to the capped price. This would effectively limit any fills to be filled at the cap price in the worst case.
The LR cap applies to both MD and order processing. The smallest/tightest relevant cap (out of global, channel, counterparty configs) will always be chosen.
LR cap example
Take the following pricing stack EURUSD (OFFER side only):
10,000 @ 1.00519
10,000 @ 1.00520
10,000 @ 1.00534
440,000 @ 1.00538
The LR cap is set to 100 USD per million. With this stack, this would make the "cap price" equal to 1.00529 (1.00519 + 100 USD per million).
If a client had a buy order filled for 5,000, the stack would change as follows:
5,000 @ 1.00519
10,000 @ 1.00520
5,000 @ 1.00529
10,000 @ 1.00534
440,000 @ 1.00538
If a client then had a buy order filled for 15,000, the stack would become the following:
15,000 @ 1.00529
10,000 @ 1.00534
440,000 @ 1.00538
Because the TOB price is now equal to the "cap price", further orders will not result in any LR-related changes to liquidity in the stack.
NB: Further orders once the cap price is reached are still counted towards the total reduced liquidity, and will mean it takes longer for the stack to replenish.
e.g. If we replenish the stack at 5,000 per second, a 20,000 order would make the "cap price" TOB, and would take 4s to fully replenish the stack. A 50,000 order would have the same effect on the stack, but would take 10s to fully replenish the stack.
The config in practise:
Using the config listed above on a stack constructed as below
- If a 50oz XAU trade comes through (after a period of no activity), liquidity reduction will not be applied due to the burst amount. 50oz with 2x multiplier = 100oz (~$180k)
- If a second 50oz XAU trade then comes through within the 30s refresh period, the 2x multiplier is applied taking 100oz (~$180k) out of the stack. The trader pays the spread at the 100oz TOB level, paying 0.08 spread and removing the 100oz TOB Quantity.
- Liquidity is returned to the stack at a rate of $180k (Gold equivalent) per 30s.
- If a third 50oz XAU trade comes in immediately after, as liquidity reduction is active the TOB will not have replenished and so the trade will now be filled at the 200oz level of the stack at 0.12 spread (50oz*2 + 50oz*2).
- If the counterparty trades again within the 30s refresh period before the stack is fully replenished they will pay the spread for the level the stack has replenished to i.e. they are trading into an already depleted stack.
Note: Liquidity reduction is side specific. Many buy orders will not affect the liquidity reduction on an incoming sell order.