The two ‘buying powers’ can be confusing but it helps to understand the basic concepts.
regT_buying_power = (2 x equity) - (long_value + short_value)
What that really says is you always start with 2 times the account equity but then the buying power is reduced by what you have already bought (ie any long and short holdings). This value is real time. As the prices of any current holdings change then so does one’s buying power.
day_trade_buying_power = 4 x (previous_eod_equity - previous_eod_maintenance_margin)
What that really says is you get 4 times ‘excess margin’ which is any equity one has over the minimum required maintenance margin. If one doesn’t hold any stocks overnight then the maintenance margin will be $0 and the day_trade_buying_power will be 4x the previous EOD equity. Any stocks one holds overnight will reduce this amount. This value is calculated once at the beginning of each trading day. It is not real time and will not change during the day. It’s the maximum buying power one has to trade stocks held less than a day. It get’s reduced when opening a day trade but then restored when closing a day trade.
Generally, the way the math works out, is one starts the day with day_trading_buying_power greater than the regT_buying_power. This isn’t always true but typical. What often causes confusion is the regT_buying_power is real time but the day_trade_buying_power is fixed for the entire day. If one sells a long position first thing in the morning, their regT_buying_power will increase but their day_trade_buying_power won’t change and potentially now be less than the regT_buying_power.
The two buying powers can be thought of as completely separate. One is how much one can spend for stocks one wishes to hold overnight (regT_buying_power) and the other is for stocks one wishes to only hold for the day (day_trade_buying_power). For simplicity however, the account ‘buying power’ is available which is simply the greater of the two. It is very important to not go over your respective buying power.
What happens if you go over your buying power? If one exceeds their regT_buying_power and the equity in the account drops below the account maintenance margin then there will be regT margin call the next day. This can be satisfied by simply closing some positions. However, if one exceeds their day_trade_buying_power there will be a day-trading margin call. The only way to satisfy this is by depositing funds into the account. Until more funds are deposited into the account, the account will not be allowed to day trade. This requirement to deposit more funds makes a day-trading margin call particularly scary. For this reason, Alpaca puts in place a “Day Trade Buying Power Check”.
What is a Day Trade Buying Power Check? Basically, Alpaca checks that you won’t exceed your day_trade_buying_power before submitting an order. If the order could potentially cause you to go over your day_trade_buying_power, the order is rejected. The key word here is ‘potentially’. Again, it can be a big problem going over your day_trade_buying_power so Alpaca tries to account for all the possibilities (note that we may not catch all situations but it is a good first line of defense -it is still up to the user). The “Day Trade Buying Power Check” is set in the account configuration tab. It can be set to “Block on Entry”, “Block on Exit”, or “Block on Both”.
“Block on Entry” assumes all trades are day trades. It will block any opening trade which exceeds one’s day_trade_buying_power. The downside of this setting is it may also block trades for positions one wants to hold overnight.
“Block on Exit” assumes all trades are to be held overnight. It only checks on closing a position when it is determined it will be an actual day trade. This is the setting to use if one’s day trading buying power is low and/or one wants to just trade for overnight holdings. The downside of this setting is it will let one open positions but may not let one close a position.
“Block on Both” is the most restrictive.
So ‘in a nutshell’ if you want to buy securities to hold just for today, then set “Block on Entry”. You can never buy more than your day_trade_buying_power which is set at the beginning of each day. If you want to buy securities to hold overnight, then set “Block on Exit”.