This is my setup:
- alpaca-py SDK
- A Python application running locally
- A paper trading account
- Free tier
I use stream data to check quotes and trigger stop-loss orders. Based on the logs of my application, I see that the bid price and the fill price for the triggered stop-loss sell order are different:
2025-03-10 12:01:13,304 [INFO] [STOP-LOSS] SMCI bid=35.50 <= 35.95. Attempting to sell.
2025-03-10 12:01:13,380 [INFO] SELL partial fill => SMCI, qty=7429.0, fill_price=36.02
The fill price is indeed higher than the bid price, which convinces me that the stop-loss was incorrectly triggered.
My question: Is this difference because the streamed data for the free tier is only from IEX, making it different from the actual market price of the asset? Will switching to the paid tier and using SIP remove this discrepancy?