Starting about three weeks ago on, I believe on Monday, February 26, I started seeing partial fills on small orders ($2500 position size) with paper trading exclusively using S&P500 stocks and exclusively market OPG (aka MOO) orders. For two days there were problems, then suddenly everything was fine. 100% full order fills. For about a week and a half. Then, again starting on a Monday morning, I believe March 11, the issue came back. I’m seeing partial fills more than 30% of the time with both new long and short positions. This morning, there were four out of six new long positions that were filled partially (67%). Specifically I saw the following partial fills:
GOOGL: 0 out of 16 shares filled, avg daily volume of 24.6M shares
RMD: 11 out of 12 shares filled, avg daily volume of 945k shares
MRK: 14 out of 20 shares filled, avg daily volume of 8.4M shares
TDG: 1 out of 2 shares filled, avg daily volume of 215k shares
JWN and M both filled 100%, 128 and 117 shares respectively.
Now this is blatantly ridiculous in practice. Market OPG (aka MOO) orders make it into a morning auction and are matched up with all orders by the exchange such that the open price is set to fill the most orders. But this has been discussed before and I understand how Alpaca paper trading “works” since paper orders obviously never make it into an opening auction. But this never affected trades going through before, all orders filled 100% of the time for many months. The price was off because of the way that the paper trading logic works market OPG orders but that’s ok.
Now I’m working to troubleshoot why my profit taking order entry bot isn’t properly handling partially filled orders (show up as “canceled” not “filled”). This is something that I knew I might face once my investor real money accounts grew such that my MOO entry orders were above ~$250k in position size for lower daily volume S&P500 stocks. It’s not something that I expected to have to troubleshoot with partial fills on tiny trades on paper accounts. So this is slowing my development down. And, btw, with the various market mechanisms, specialists, market makers, etc., our expectation is that as our position size increased above $250k on small volume S&P500 stocks, that we still wouldn’t get partial fills on market OPG orders, we’d just get less beneficial pricing on our fills as we’d be pushing the opening price with our orders. The market mechanisms would supply the requested shares just at ever increasing (long positions) or decreasing (short positions) prices.
It seems obvious that some work has been done recently to the paper trading software such that Alpaca is putting some kind of constraint logic on the trade size for paper trades. Also obviously this logic doesn’t work since I’m getting 67% partial fills on $2500 orders using S&P500 stocks. But guys, what Alpaca has set up now is blatantly ridiculous in practice. Why you’re bothering to waste programmer time putting volume constraints on paper orders is beyond me. If you’re worried about some nefarious individual trying to spoof paper profits by trading 1B share increments of MSFT stock for $0.01 gains each day, any investor with an IQ above that of plankton should easily spot those kinds of shenanigans. And there are a lot better ways to program in those kinds of volume gaming defenses without interfering with low volume trades that wouldn’t cause a ripple in the market with real money trades.
So, I’ll get my profit / bailout order bot’s programming improved so this doesn’t impact my testing. But it has cost me weeks of forward progress.