Why are my stops being filled instantaneously?

I am placing stops like below and they sometimes get executed instantaneously, both in backtests and live paper trading. On the image, you can see that a JD position was opened on the close of the bar at 9:31, but the stop was executed right away at a price that is outside the range of the bar.


quantity = math.floor(self.Portfolio.TotalPortfolioValue * 3 / symbolData.Bars[0].Close)
stopPrice = symbolData.Bars[0].Close- (symbolData.Bars[0].Close * Decimal(0.0166))
self.CurrentOrder = self.MarketOrder(symbol, quantity)
self.CurrentStopOrder = self.StopMarketOrder(symbol, -quantity, stopPrice)
Update Backtest

It seems like the short stop market order is trying to sell stocks when the price is lower than the stop price. That is what would lead to an immediate fill of the order. In order to debug this further try and use OnOrderEvent for more details. The timestamp on the trade page might not be the exact order filling time but with OnOrderEvent could provide deeper insight to the specific reason. OnOrderEvent(OrderEvent) provides with properties such as FillPrice, Status and UtcTime.

Update Backtest


The material on this website is provided for informational purposes only and does not constitute an offer to sell, a solicitation to buy, or a recommendation or endorsement for any security or strategy, nor does it constitute an offer to provide investment advisory services by QuantConnect. In addition, the material offers no opinion with respect to the suitability of any security or specific investment. QuantConnect makes no guarantees as to the accuracy or completeness of the views expressed in the website. The views are subject to change, and may have become unreliable for various reasons, including changes in market conditions or economic circumstances. All investments involve risk, including loss of principal. You should consult with an investment professional before making any investment decisions.


This discussion is closed