Fix MOO slippage reference price - #9763
Merged
Martin-Molinero merged 4 commits intoSep 10, 2026
Merged
Conversation
matvt-cell
force-pushed
the
bug-9753-daily-moo-slippage
branch
from
August 30, 2026 21:07
01919f8 to
6d25ce8
Compare
matvt-cell
force-pushed
the
bug-9753-daily-moo-slippage
branch
from
September 2, 2026 14:52
6d25ce8 to
529f782
Compare
Contributor
Author
|
Hi, just following up in case this got buried. The regression and compatibility tests are passing, and the latest commit is now signed/verified. Happy to address any review feedback. Thanks. |
Market on open orders fill at the bar open, but the slippage models scaled the slippage by the last data value, which for a bar is its close. With daily data that leaks the fill-day close into the fill price. Fix it inside the slippage models instead of extending ISlippageModel: when the order is a MarketOnOpenOrder and the last data is a bar, the models use its open as the reference price. Ticks keep using the price. Applies to the constant, volume share (C# and Python), alpha streams and market impact models, and to every fill model path since they all call the same method. Drops the interface overload and fill model changes and extends the tests to cover all models, data types, resolutions and the Python port. Fixes QuantConnect#9753 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ELsDPabTSwU5kQF7f2ARTE
Daily SPY with a constant slippage model, alternating market on open buys and sells, asserting every fill is the bar open plus or minus slippage on that same open. Fails without the slippage model fix for GH 9753. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ELsDPabTSwU5kQF7f2ARTE
The algorithm submits market orders on daily data while the exchange is closed, so they become market on open orders and their slippage is now referenced to the bar open. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ELsDPabTSwU5kQF7f2ARTE
Martin-Molinero
approved these changes
Sep 10, 2026
Martin-Molinero
left a comment
Member
There was a problem hiding this comment.
Thanks @matvt-cell! Pushed a few tweaks avoiding interface changes and expanding it to other models
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.
Description
Fixes #9753.
Daily
MarketOnOpenfills use the bar'sOpenas the execution price, butConstantSlippageModelpreviously calculated percentage slippage from the latest data value. For a dailyTradeBar, that value is the same-dayClose, introducing look-ahead bias into the MOO fill price.This change:
ISlippageModeloverload that accepts an explicit reference priceConstantSlippageModelto calculate percentage slippage from that reference priceEquityFillModel.MarketOnOpenFillto pass the selected pre-slippage execution priceISlippageModelimplementations through the default interface implementationTests
Added a regression test covering both buy and sell daily MOO orders and verifying that changing only the fill-day
Closedoes not change the fill price.Verification:
EquityFillModelTests: 126 passedSlippageModelsTests: 7 passedISlippageModelimplementations passes