fix: clear the correct ask range in ROIVectorMarketDepth::clear_depth#318
Open
23f3001135 wants to merge 1 commit into
Open
fix: clear the correct ask range in ROIVectorMarketDepth::clear_depth#31823f3001135 wants to merge 1 commit into
23f3001135 wants to merge 1 commit into
Conversation
The ask branch computed the upper bound of the cleared range with `roi_ub` instead of `roi_lb`. Depth vector indices are offset by `roi_lb`, so the bound collapsed below `from` and the loop never ran, leaving stale ask quantity behind the best ask after an ASK_DEPTH_CLEAR event. The bid branch already used `roi_lb`.
Up to standards ✅🟢 Issues
|
| Metric | Results |
|---|---|
| Complexity | 0 |
NEW Get contextual insights on your PRs based on Codacy's metrics, along with PR and Jira context, without leaving GitHub. Enable AI reviewer
TIP This summary will be updated as you push new changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ROIVectorMarketDepth::clear_depthdoes not clear the ask side when given a price bound. The bid side works correctly; the ask side leaves stale quantity in the book.Details
The depth is stored in a flat vector indexed by
tick - roi_lb. The ask branch computes the upper bound of the loop as:but the index offset is
roi_lb, notroi_ub. Sinceroi_ubis the top of the range (typically far aboveroi_lb),toends up belowfrom, sofor t in from..tonever runs and no ask level is cleared. The bid branch just above already usesroi_lb:After an
ASK_DEPTH_CLEARevent the levels that should have been removed stay inask_depth, sitting behind the recomputed best ask.best_ask_tickis recomputed separately, so the top of book still looks correct and the problem is easy to miss, butask_qty_at_tick,ask_depth(), and the queue model that seeds order positions from those quantities all see phantom liquidity.HashMapMarketDepthandBTreeMarketDepthboth clearbest_ask_tick..=clear_upto, confirming the intended behaviour.Fix
Use
roi_lbfor the upper bound, matching the bid side and the rest of the file.Test
Added
test_l2_clear_depth_upto_price: it clears the ask side up to a price and checks the levels are gone (plus the mirror bid case). It fails before the change and passes after.