Skip to content

Fix MOO slippage reference price - #9763

Merged
Martin-Molinero merged 4 commits into
QuantConnect:masterfrom
matvt-cell:bug-9753-daily-moo-slippage
Sep 10, 2026
Merged

Fix MOO slippage reference price#9763
Martin-Molinero merged 4 commits into
QuantConnect:masterfrom
matvt-cell:bug-9753-daily-moo-slippage

Conversation

@matvt-cell

Copy link
Copy Markdown
Contributor

Description

Fixes #9753.

Daily MarketOnOpen fills use the bar's Open as the execution price, but ConstantSlippageModel previously calculated percentage slippage from the latest data value. For a daily TradeBar, that value is the same-day Close, introducing look-ahead bias into the MOO fill price.

This change:

  • adds a backwards-compatible ISlippageModel overload that accepts an explicit reference price
  • updates ConstantSlippageModel to calculate percentage slippage from that reference price
  • updates EquityFillModel.MarketOnOpenFill to pass the selected pre-slippage execution price
  • preserves existing two-argument ISlippageModel implementations through the default interface implementation

Tests

Added a regression test covering both buy and sell daily MOO orders and verifying that changing only the fill-day Close does not change the fill price.

Verification:

  • regression test fails on the previous implementation and passes with the fix
  • EquityFillModelTests: 126 passed
  • SlippageModelsTests: 7 passed
  • backwards-compatibility test for legacy two-argument ISlippageModel implementations passes

@matvt-cell
matvt-cell force-pushed the bug-9753-daily-moo-slippage branch from 01919f8 to 6d25ce8 Compare August 30, 2026 21:07
@matvt-cell
matvt-cell force-pushed the bug-9753-daily-moo-slippage branch from 6d25ce8 to 529f782 Compare September 2, 2026 14:52
@matvt-cell

Copy link
Copy Markdown
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.

Martin-Molinero and others added 3 commits September 10, 2026 12:47
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 Martin-Molinero left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @matvt-cell! Pushed a few tweaks avoiding interface changes and expanding it to other models

@Martin-Molinero
Martin-Molinero merged commit 9bf2836 into QuantConnect:master Sep 10, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Daily MarketOnOpen fills with ConstantSlippageModel use same-day Close for slippage, causing look-ahead bias

2 participants