When is a stop order triggered?

An inquiry about the fine details of a stop order as implemented by Alpaca: assuming I have a stop loss order to sell a stock with stop price 100.0. Will it be triggered (become a market order):
a) as soon as the NBBO bid is lower or equal to 100.0?
b) as soon as there is a trade executed with a price of 100.0 or lower?
c) something else?

Anyone from Alpaca? That’s important for fast paced trading.

In general, stop loss sell orders are triggered by a ‘valid’ trade occurring at or below the stop loss. It’s not based upon quotes but rather trades. A ‘valid’ trade is any trade which would normally be including in the calculation of the High, Low, or Close prices. So any trade which does not have any of the following conditions will trigger a stop.

Feed Tape Condition Description
CTS AB B Average Price Trade
UTDF C W Average Price Trade
CTS/UTDF ABC 4 Derivatively Priced
CTS/UTDF ABC 7 Qualified Contingent Trade (“QCT”)
CTS/UTDF ABC 9 Corrected Consolidated Close (per listing market)
CTS/UTDF ABC G Bunched Sold Trade
CTS/UTDF ABC H Price Variation Trade
CTS/UTDF ABC I Odd Lot Trade
CTS/UTDF ABC M Market Center Official Close
CTS/UTDF ABC P Prior Reference Price
CTS/UTDF ABC Q Market Center Official Open
CTS/UTDF ABC U Extended Trading Hours (Sold Out of Sequence)
CTS/UTDF ABC V Contingent Trade
CTS/UTDF ABC Z Sold (out of Sequence)

In Alpaca paper trading those are the only rules. The reason I said ‘generally’ is our trading partners then may add a few rules on top of that in live trading. It’s not consistent between partners but some also add the constraint that the trade must have occurred within the NBBO quote. That’s practically always true but just a precaution. Some partners also require two consecutive trades or two trades within a given time. That’s to minimize sort of ‘false’ triggers. Again, that’s practically always true but something to consider.

For live stop loss orders, Alpaca sends those directly to our execution partners and their rules guide the order. Trailing stop orders however, are held by Alpaca and triggered by our logic. When it triggers, Alpaca submits either a plain market or limit order to our partners.

Hope that makes sense?

One other thing about stop sell orders. The stop price must be below the current bid price when the order is submitted. This causes issues for some users. So, when submitting a stop sell order, ensure the stop price is below both the last valid trade AND the current bid otherwise the order will be rejected.

Thanks for the detailed answer!

Just curious, is that public information who those execution partners are? I thought that as a broker, Alpaca sends the orders directly to the exchanges.