I’m utilizing bracket orders and am currently testing my code in the paper trading. I have had a bracket order’s entry fill; however, both exit trades still have their status marked as “held” as opposed to “new”. Additionally, the stop loss exit order has been reached yet has never been executed. Is this something wrong with the paper trading, or am I missing something?
Paper trading generally mimics how orders are processed in live trading. So, no there probably isn’t anything ‘wrong’ with paper trading.
A bracket order is a form of “One-Triggers-Other” (OTO) order. When the initial parent order is filled, it triggers the other two orders. Technically the other two ‘leg’ orders are “One-Cancels-Other” (OCO) when one is started it cancels the other. So, until the initial parent order is filled, the other two will have a state of
held. This would be a normal state if a bracket order is submitted after market hours for example.
Once the parent order completely fills (ie not a
partial fill) the typical state would be the take profit limit order leg is set to
new and the stop loss leg remains
held. The orders will stay in this state until either the limit price is exceeded or the stop loss is exceeded. At that point, the limit order would move to
partial fill or
fill and the stop loss order would be
canceled, OR the stop loss would be triggered and move to
partial fill or
fill and the limit order canceled.
Where are you seeing both legs as
held and the parent order
filled. Is it on the web portal ‘orders’ page or via the API? If you submitted multiple orders, ensure you are looking at the three orders from associated bracket order and not from another order. All three orders will have the same ‘submitted at’ time which is one way to group them.
Perhaps include a screen shot of what you are seeing?
Below is a screenshot where the parent order has been filled but both legs are being seen as held. If I were to also get the orders via API the same thing is seen. Not sure why this is happening, but it’s causing additional losses (outside of things I need to change in my algorithm) as for example the BAX stop order should have already been reached (buy stop at 78.94 but market price is at the time of writing 79.37). This has happened with a couple other bracket orders, but I can only post one screenshot.