From e21bf3c8dd655205e809879ec9a99adeed1d0a71 Mon Sep 17 00:00:00 2001 From: Justin Oros Date: Mon, 9 Feb 2026 14:39:38 -0700 Subject: [PATCH] Add 200 SMA filter implementation and optimize config for 15Min bars --- alpaca_trader/config.json | 4 ++-- alpaca_trader/engine.py | 24 +++++++++++++++--------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/alpaca_trader/config.json b/alpaca_trader/config.json index 3ca899c..834fd53 100644 --- a/alpaca_trader/config.json +++ b/alpaca_trader/config.json @@ -6,7 +6,7 @@ "SHORT_WINDOW": 20, "LONG_WINDOW": 50, "MIN_NOTIONAL": 1.0, - "POLL_INTERVAL": 60, + "POLL_INTERVAL": 300, "MAX_DRAWDOWN": 0.08, "PDT_RULE": false, "USE_TRAILING_STOP": true, @@ -24,7 +24,7 @@ "ADX_THRESHOLD": 25, "VOLUME_MULTIPLIER": 0.7, "ATR_STOP_MULTIPLIER": 2.0, - "MAX_HOLD_TIME": 7200, + "MAX_HOLD_TIME": 10800, "REGIME_DETECTION": true, "MULTIFRAME_FILTER": true, "BB_WINDOW": 20, diff --git a/alpaca_trader/engine.py b/alpaca_trader/engine.py index c18aae4..1dfbb06 100644 --- a/alpaca_trader/engine.py +++ b/alpaca_trader/engine.py @@ -60,17 +60,17 @@ ENV_PATH = SCRIPT_DIR / ".env" DEFAULT_CONFIG = { "DEBUG_MODE": True, "SYMBOL": "SPY", - "BAR_TIMEFRAME": "5Min", + "BAR_TIMEFRAME": "15Min", "RISK_PER_TRADE": 0.01, - "SHORT_WINDOW": 10, - "LONG_WINDOW": 30, + "SHORT_WINDOW": 20, + "LONG_WINDOW": 50, "MIN_NOTIONAL": 1.0, - "POLL_INTERVAL": 30, + "POLL_INTERVAL": 300, "MAX_DRAWDOWN": 0.08, "PDT_RULE": False, "USE_TRAILING_STOP": True, "PROFIT_TARGET_1": 2.0, - "PROFIT_TARGET_2": 4.0, + "PROFIT_TARGET_2": 3.0, "VOLATILITY_ADJUSTMENT": True, "MARKET_HOURS_FILTER": False, "ENABLE_SLIPPAGE": True, @@ -80,12 +80,12 @@ DEFAULT_CONFIG = { "BACKTEST_DAYS": 90, "USE_LIMIT_ORDERS": False, "LIMIT_ORDER_TIMEOUT": 60, - "ADX_THRESHOLD": 30, + "ADX_THRESHOLD": 25, "VOLUME_MULTIPLIER": 0.7, "ATR_STOP_MULTIPLIER": 2.0, - "MAX_HOLD_TIME": 3600, + "MAX_HOLD_TIME": 10800, "REGIME_DETECTION": True, - "MULTIFRAME_FILTER": False, + "MULTIFRAME_FILTER": True, "BB_WINDOW": 20, "BB_STD": 2.0, "USE_EMA": True, @@ -96,7 +96,7 @@ DEFAULT_CONFIG = { "USE_FIBONACCI": False, "MAX_TRADES_PER_DAY": 3, "SKIP_MONDAYS_FRIDAYS": False, - "USE_200_SMA_FILTER": False, + "USE_200_SMA_FILTER": True, "REQUIRE_MACD_CONFIRMATION": False, "MIN_RISK_REWARD": 2.0, "PULLBACK_PERCENTAGE": 0.382, @@ -1075,6 +1075,12 @@ def advanced_signal_generator(symbol): debug_print("Volume filter failed: insufficient data") return None, 0, 0, None + if USE_200_SMA_FILTER: + sma_200_pass = check_200_sma_filter(symbol, api) + if not sma_200_pass: + debug_print("200 SMA filter failed: price below 200 SMA") + return None, 0, 0, None + bullish_pattern, bearish_pattern = check_candle_pattern(bars) macd_signal = check_macd_confirmation(bars) multiframe_trend = check_multiframe_confluence(SYMBOL, USE_EMA, api) if MULTIFRAME_FILTER else "neutral"