Pattern Day Trading (PDT) Rule
The PDT rule is a FINRA regulation that limits day trading activity for accounts under $25,000. The system enforces this rule automatically to protect your account from regulatory restrictions.
What is a Day Trade?
A day trade occurs when you buy AND sell the same security on the same calendar day. Both the buy and sell must happen on the same day for it to count.
Examples:
- ✅ Day trade: Buy AAPL at 10am, sell AAPL at 2pm same day
- ❌ Not a day trade: Buy AAPL Monday, sell AAPL Tuesday
- ❌ Not a day trade: Buy AAPL Monday, hold for a week, sell next Monday
The Rule
For accounts under $25,000 equity:
- Maximum of 3 day trades per rolling 5 business days
- If you exceed this limit, your broker may restrict your account to closing trades only (90-day restriction)
For accounts at or above $25,000 equity:
- No PDT restrictions apply
- You can day trade freely
The threshold is $25,000 in total account equity (cash + positions), not just cash balance.
How the System Protects You
The system includes a PDT Guard that checks every order before execution:
- Tracks day trades: Records every completed day trade in Redis
- Counts trades: Maintains a rolling 5-business-day window count
- Predicts day trades: Analyzes whether a new order would create a day trade
- Rejects violations: Blocks orders that would exceed the 3-trade limit
- Conservative approach: When in doubt, rejects the order (false rejection is safer than a FINRA restriction)
All decisions are logged for audit.
PDT Counter on Dashboard
The Risk page shows your current PDT status:
- Trades used: X / 3
- Rolling window: last 5 business days
- Days until oldest trade expires
How Strategies Avoid Day Trades
All built-in strategies use min_hold_days >= 2, which means they naturally avoid day trades by design:
- Swing Momentum: min_hold_days = 2
- Mean Reversion: min_hold_days = 2
- Value Factor: min_hold_days = 5
- ML Signal Strategy: min_hold_days = 3
The system will not sell a position on the same day it was opened (unless manually overridden in MANUAL_APPROVAL mode, which the PDT guard will still block if you’re at the limit).
What Happens When You Hit the Limit?
If you’ve already used 3 day trades and try to place an order that would be a 4th day trade:
- ❌ Order is rejected before reaching the broker
- 📝 Log entry created: “PDT LIMIT REACHED” with full details
- 🚨 Dashboard alert: Risk page shows PDT warning
- ⏳ Wait period: You must wait until the oldest day trade expires from the 5-business-day window
Example:
- Monday: Day trade #1
- Tuesday: Day trade #2
- Wednesday: Day trade #3
- Thursday: ❌ Cannot day trade (already at limit)
- Friday: ❌ Cannot day trade
- Next Tuesday: ✅ Monday’s trade expired, you have 1 day trade available again
PDT-Exempt Accounts
If your account equity is >= $25,000:
- The PDT guard automatically exempts you
- You can day trade without restrictions
- The system still tracks day trades for monitoring purposes
However, if your account drops below $25,000 (e.g., due to losses), the PDT rule applies immediately.
Best Practices
- Start with swing trading: Use strategies with min_hold_days >= 2
- Monitor your count: Check the Risk dashboard before trading
- Save day trades: Reserve them for high-conviction opportunities
- Account size: If you plan to day trade frequently, consider funding your account to $25,000+
Configuration
PDT guard settings in config/risk_limits.yaml:
pdt_guard:
enabled: true
max_day_trades: 3
rolling_window_days: 5
account_threshold: 25000.0
⚠️ Do not disable the PDT guard unless you have a PDT-exempt account or are in PAPER_ONLY mode.
Related Topics
- Risk Management — The complete 4-layer risk system
- Autonomy Modes — How the system operates
- Trading Strategies — Built-in strategies and their holding periods