이 전략은 15분 시간 프레임에 기반한 고주파 거래 전략이다. 정확한 거래 신호 캡처 및 동적 리스크 관리를 달성하기 위해 기하급수적인 이동 평균 (EMA), 상대적 강도 지수 (RSI), 평균 방향 지수 (ADX), 평균 진정한 범위 (ATR) 를 포함한 여러 기술적 지표를 결합합니다. 전략은 시장 조건과 거래 신호의 실시간 모니터링을 위해 명확한 시각화 디자인을 갖추고 있습니다.
핵심 논리는 빠른 EMA (9 기간) 과 느린 EMA (21 기간) 의 크로스오버를 기반으로 거래 신호를 생성합니다. RSI (14 기간) 는 과잉 구매 / 과잉 판매 구역을 필터링합니다. ADX (14 기간) 는 트렌드 강도를 확인하고 ATR (14 기간) 는 동적으로 스톱 로스 및 영리 수준을 설정합니다. 여러 기술적 지표의 조합은 신호 신뢰성을 보장합니다. 입시 조건은 다음과 같습니다. RSI가 70 이하와 ADX가 20 이상으로 느린 EMA보다 긴 - 빠른 EMA를 넘습니다. RSI가 30 이상과 ADX가 20 이상으로 느린 EMA보다 짧은 - 빠른 EMA를 넘습니다. 출구는 ATR 기반의 동적인 스톱 로스 및 영리 수준을 통해 관리됩니다.
이 전략은 여러 기술적 지표의 시너지 효과를 통해 고주파 거래에서 신호 캡처와 리스크 제어 사이의 균형을 달성합니다. 명확한 시각화 디자인과 포괄적인 자동화 지원은 매우 실용적입니다. 지속적인 최적화 및 리스크 관리 개선으로 전략은 다양한 시장 환경에서 안정적인 성능을 보여줄 수 있습니다. 위험이 존재하지만 적절한 매개 변수 설정 및 리스크 제어 조치로 제어 할 수 있습니다. 성공적인 전략 구현은 거래자가 시장에 대한 깊은 이해를하고 위험에 대한 지속적인 관심을 유지해야합니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Scalping BTC Ottimizzato - Grafica Chiara", shorttitle="Scalp BTC Opt", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // === 📊 INPUTS === // 📈 Medie Mobili emaFastLength = input.int(9, title="EMA Veloce", minval=1) emaSlowLength = input.int(21, title="EMA Lenta", minval=1) // 💡 RSI rsiLength = input.int(14, title="RSI Length", minval=1) rsiOverbought = input.int(70, title="RSI Overbought") rsiOversold = input.int(30, title="RSI Oversold") // 📊 ATR (Stop Loss e Take Profit) atrLength = input.int(14, title="ATR Length", minval=1) stopATR = input.float(1.5, title="Stop Loss (ATR Multiplo)", step=0.1) takeProfitATR = input.float(2.0, title="Take Profit (ATR Multiplo)", step=0.1) // 🔀 ADX adxLength = input.int(14, title="ADX Length", minval=1) adxSmoothing = input.int(14, title="ADX Smoothing", minval=1) adxThreshold = input.int(20, title="Soglia ADX per Trend Forte", minval=1) // === 📊 CALCOLI PRINCIPALI === // 📈 Medie Mobili emaFast = ta.ema(close, emaFastLength) emaSlow = ta.ema(close, emaSlowLength) // 💡 RSI rsi = ta.rsi(close, rsiLength) // 📊 ATR atr = ta.atr(atrLength) // 🔀 ADX tramite DMI con Smoothing [adx, diPlus, diMinus] = ta.dmi(adxLength, adxSmoothing) // === 📊 CONDIZIONI LONG E SHORT === // ✅ Long: EMA Veloce incrocia EMA Lenta al rialzo, RSI sotto 70, ADX > 20 longCondition = (ta.crossover(emaFast, emaSlow)) and (rsi < rsiOverbought) and (adx > adxThreshold) // 🔻 Short: EMA Veloce incrocia EMA Lenta al ribasso, RSI sopra 30, ADX > 20 shortCondition = (ta.crossunder(emaFast, emaSlow)) and (rsi > rsiOversold) and (adx > adxThreshold) // 📉 Stop Loss e Take Profit Dinamici longStop = strategy.position_avg_price - (atr * stopATR) longTarget = strategy.position_avg_price + (atr * takeProfitATR) shortStop = strategy.position_avg_price + (atr * stopATR) shortTarget = strategy.position_avg_price - (atr * takeProfitATR) // === 🚀 INGRESSO E USCITA === // 🚦 Ingresso LONG if (longCondition and strategy.position_size == 0) strategy.entry("Long", strategy.long) strategy.exit("TakeProfit/StopLoss Long", stop=longStop, limit=longTarget) // 🚦 Ingresso SHORT if (shortCondition and strategy.position_size == 0) strategy.entry("Short", strategy.short) strategy.exit("TakeProfit/StopLoss Short", stop=shortStop, limit=shortTarget) // 🛑 USCITA MANUALE BASATA SU RSI if (rsi > rsiOverbought and strategy.position_size > 0) strategy.close("Long", comment="RSI Overbought Exit") if (rsi < rsiOversold and strategy.position_size < 0) strategy.close("Short", comment="RSI Oversold Exit") // === 📊 VISUALIZZAZIONE GRAFICA OTTIMIZZATA === // 📈 MEDIE MOBILI ANCORATE ALLE CANDELE plot(emaFast, title="EMA Veloce", color=color.blue, linewidth=2) plot(emaSlow, title="EMA Lenta", color=color.red, linewidth=2) // 📊 SEGNALI VISIVI ANCORATI ALLE CANDELE plotshape(longCondition, title="Segnale Long", style=shape.triangleup, location=location.belowbar, color=color.green, text="Long", size=size.small) plotshape(shortCondition, title="Segnale Short", style=shape.triangledown, location=location.abovebar, color=color.red, text="Short", size=size.small) // 📊 RSI (Pannello Separato) var float rsiPanel = na rsiPanel := rsi plot(rsiPanel, title="RSI", color=color.orange, linewidth=2) hline(rsiOverbought, "RSI Overbought", color=color.red, linestyle=hline.style_dotted) hline(rsiOversold, "RSI Oversold", color=color.green, linestyle=hline.style_dotted) // 📊 ADX (Pannello Separato) var float adxPanel = na adxPanel := adx plot(adxPanel, title="ADX", color=color.blue, linewidth=2) hline(adxThreshold, "ADX Soglia", color=color.gray, linestyle=hline.style_dotted) // 📊 ATR (Pannello Separato) var float atrPanel = na atrPanel := atr plot(atrPanel, title="ATR", color=color.purple, linewidth=2) // 🔔 ALERT alertcondition(longCondition, title="Segnale Long", message="Entra Long Manualmente!") alertcondition(shortCondition, title="Segnale Short", message="Entra Short Manualmente!")