Add configurable RSI thresholds for buy/sell signals

This commit is contained in:
justin committed 2026-02-02 14:10:23 -07:00
1 parent 91bafcc40d
commit 9522bd0488
2 files changed
+26 -20

No files matched your search

+19 -17
View File
@@ -2,44 +2,46 @@
"DEBUG_MODE": true, "DEBUG_MODE": true,
"SYMBOL": "SPY", "SYMBOL": "SPY",
"BAR_TIMEFRAME": "5Min", "BAR_TIMEFRAME": "5Min",
"RISK_PER_TRADE": 0.005, "RISK_PER_TRADE": 0.01,
"SHORT_WINDOW": 20, "SHORT_WINDOW": 10,
"LONG_WINDOW": 50, "LONG_WINDOW": 30,
"MIN_NOTIONAL": 1.0, "MIN_NOTIONAL": 1.0,
"POLL_INTERVAL": 60, "POLL_INTERVAL": 60,
"MAX_DRAWDOWN": 0.12, "MAX_DRAWDOWN": 0.08,
"PDT_RULE": true, "PDT_RULE": true,
"USE_TRAILING_STOP": true, "USE_TRAILING_STOP": true,
"PROFIT_TARGET_1": 1.5, "PROFIT_TARGET_1": 2.0,
"PROFIT_TARGET_2": 3.0, "PROFIT_TARGET_2": 4.0,
"VOLATILITY_ADJUSTMENT": true, "VOLATILITY_ADJUSTMENT": true,
"MARKET_HOURS_FILTER": false, "MARKET_HOURS_FILTER": false,
"ENABLE_SLIPPAGE": true, "ENABLE_SLIPPAGE": true,
"SLIPPAGE_PCT": 0.0005, "SLIPPAGE_PCT": 0.0005,
"COMMISSION_PCT": 0.0005, "COMMISSION_PCT": 0.0005,
"MIN_SIGNAL_STRENGTH": 0.5, "MIN_SIGNAL_STRENGTH": 0.0,
"BACKTEST_DAYS": 90, "BACKTEST_DAYS": 90,
"USE_LIMIT_ORDERS": true, "USE_LIMIT_ORDERS": false,
"LIMIT_ORDER_TIMEOUT": 60, "LIMIT_ORDER_TIMEOUT": 60,
"ADX_THRESHOLD": 20, "ADX_THRESHOLD": 25,
"VOLUME_MULTIPLIER": 0.5, "VOLUME_MULTIPLIER": 0.5,
"ATR_STOP_MULTIPLIER": 1.5, "ATR_STOP_MULTIPLIER": 2.0,
"MAX_HOLD_TIME": 7200, "MAX_HOLD_TIME": 3600,
"REGIME_DETECTION": true, "REGIME_DETECTION": true,
"MULTIFRAME_FILTER": true, "MULTIFRAME_FILTER": false,
"BB_WINDOW": 20, "BB_WINDOW": 20,
"BB_STD": 2.0, "BB_STD": 2.0,
"USE_EMA": true, "USE_EMA": true,
"REQUIRE_CANDLE_PATTERN": false, "REQUIRE_CANDLE_PATTERN": false,
"USE_PIVOT_POINTS": false, "USE_PIVOT_POINTS": false,
"VIX_THRESHOLD": 20, "VIX_THRESHOLD": 30,
"USE_VIX_FILTER": true, "USE_VIX_FILTER": false,
"USE_FIBONACCI": false, "USE_FIBONACCI": false,
"MAX_TRADES_PER_DAY": 5, "MAX_TRADES_PER_DAY": 5,
"SKIP_MONDAYS_FRIDAYS": false, "SKIP_MONDAYS_FRIDAYS": false,
"USE_200_SMA_FILTER": true, "USE_200_SMA_FILTER": false,
"REQUIRE_MACD_CONFIRMATION": false, "REQUIRE_MACD_CONFIRMATION": false,
"MIN_RISK_REWARD": 1.5, "MIN_RISK_REWARD": 2.0,
"PULLBACK_PERCENTAGE": 0.382, "PULLBACK_PERCENTAGE": 0.382,
"ENABLE_SHORT_SELLING": true "ENABLE_SHORT_SELLING": true,
"RSI_BUY_MAX": 55,
"RSI_SELL_MIN": 30
} }
+7 -3
View File
@@ -84,7 +84,9 @@ DEFAULT_CONFIG = {
"REQUIRE_MACD_CONFIRMATION": False, "REQUIRE_MACD_CONFIRMATION": False,
"MIN_RISK_REWARD": 1.5, "MIN_RISK_REWARD": 1.5,
"PULLBACK_PERCENTAGE": 0.382, "PULLBACK_PERCENTAGE": 0.382,
"ENABLE_SHORT_SELLING": False "ENABLE_SHORT_SELLING": False,
"RSI_BUY_MAX": 55,
"RSI_SELL_MIN": 45
} }
if not ENV_PATH.exists(): if not ENV_PATH.exists():
@@ -184,6 +186,8 @@ REQUIRE_MACD_CONFIRMATION = bool(config["REQUIRE_MACD_CONFIRMATION"])
MIN_RISK_REWARD = float(config["MIN_RISK_REWARD"]) MIN_RISK_REWARD = float(config["MIN_RISK_REWARD"])
PULLBACK_PERCENTAGE = float(config["PULLBACK_PERCENTAGE"]) PULLBACK_PERCENTAGE = float(config["PULLBACK_PERCENTAGE"])
ENABLE_SHORT_SELLING = bool(config.get("ENABLE_SHORT_SELLING", False)) ENABLE_SHORT_SELLING = bool(config.get("ENABLE_SHORT_SELLING", False))
RSI_BUY_MAX = float(config.get("RSI_BUY_MAX", 55))
RSI_SELL_MIN = float(config.get("RSI_SELL_MIN", 45))
api = AlpacaClient( api = AlpacaClient(
os.getenv('APCA_API_KEY_ID'), os.getenv('APCA_API_KEY_ID'),
@@ -433,7 +437,7 @@ def advanced_signal_generator(symbol):
position_type = None position_type = None
if regime == "trend": if regime == "trend":
if short_ma > long_ma and rsi_val < 55: if short_ma > long_ma and rsi_val < RSI_BUY_MAX:
if REQUIRE_CANDLE_PATTERN and not bullish_pattern: if REQUIRE_CANDLE_PATTERN and not bullish_pattern:
debug_print("Bullish signal rejected: candle pattern required") debug_print("Bullish signal rejected: candle pattern required")
elif REQUIRE_MACD_CONFIRMATION and macd_signal != "bullish": elif REQUIRE_MACD_CONFIRMATION and macd_signal != "bullish":
@@ -445,7 +449,7 @@ def advanced_signal_generator(symbol):
position_type = "long" position_type = "long"
debug_print(f"BUY signal: strength={strength:.2f}, stop=${stop:.2f}") debug_print(f"BUY signal: strength={strength:.2f}, stop=${stop:.2f}")
if short_ma < long_ma and rsi_val > 45: if short_ma < long_ma and rsi_val > RSI_SELL_MIN:
if REQUIRE_CANDLE_PATTERN and not bearish_pattern: if REQUIRE_CANDLE_PATTERN and not bearish_pattern:
debug_print("Bearish signal rejected: candle pattern required") debug_print("Bearish signal rejected: candle pattern required")
elif REQUIRE_MACD_CONFIRMATION and macd_signal != "bearish": elif REQUIRE_MACD_CONFIRMATION and macd_signal != "bearish":