이 전략은 스토카스틱 모멘텀 인덱스 (SMI) 를 기반으로 한 적응형 거래 시스템이다. SMI 지표와 신호 라인 사이의 교차점을 분석하여 자동으로 주요 위치에서 구매 및 판매 신호를 생성하여 시장 추세를 예측합니다. 이 전략은 데이터를 매끄럽게하고 신호 신뢰성을 향상시키기 위해 이중 기하급수적 이동 평균 (EMA) 을 사용합니다. 이 시스템은 중장기 거래에 특히 적합하며 주요 시장 트렌드 반전 지점을 효과적으로 캡처합니다.
이 전략의 핵심은 SMI 계산을 통해 가격 동력을 측정하는 데 있다. 먼저 특정 기간 내에서 가장 높고 가장 낮은 가격 범위를 결정하고, 그 다음이 범위에 대한 폐쇄 가격의 위치를 정상화한다. 상대 범위와 가격 범위 모두에 이중 EMA 평형을 적용함으로써 더 안정적인 SMI 값을 생성한다. SMI 라인이 신호 라인 (SMI
이 전략은 SMI 지표를 기반으로 한 성숙한 거래 전략으로, 기술 지표 크로스오버를 통해 강력한 실용성을 통해 거래 신호를 생성합니다. 전략의 핵심 장점은 명확한 신호와 강한 노이즈 저항성, 그러나 약간의 내재적 지연이 있습니다. 볼륨 검증 및 트렌드 필터링과 같은 최적화로 전략의 안정성과 신뢰성을 더욱 향상시킬 수 있습니다. 이 전략은 중장기 트렌드를 추적하는 데 특히 적합하며 체계적인 거래 시스템을 구축하려는 투자자들에게 훌륭한 선택으로 사용됩니다.
/*backtest start: 2024-12-19 00:00:00 end: 2024-12-26 00:00:00 period: 45m basePeriod: 45m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Iban_Boe //@version=6 strategy("SMI Strategy with Signals", "SMI Strategy", overlay=false) // Parámetros del SMI lengthK = input.int(14, "%K Length", minval=1, maxval=15000) lengthD = input.int(3, "%D Length", minval=1, maxval=4999) lengthEMA = input.int(3, "EMA Length", minval=1, maxval=4999) // Función de doble EMA emaEma(source, length) => ta.ema(ta.ema(source, length), length) // Cálculos del SMI highestHigh = ta.highest(lengthK) lowestLow = ta.lowest(lengthK) highestLowestRange = highestHigh - lowestLow relativeRange = close - (highestHigh + lowestLow) / 2 smi = 200 * (emaEma(relativeRange, lengthD) / emaEma(highestLowestRange, lengthD)) smiSignal = ta.ema(smi, lengthEMA) // Gráficos del SMI smiPlot = plot(smi, "SMI", color=color.blue) plot(smiSignal, "SMI-based EMA", color=color.orange) // Level lines hline(40, "Overbought Line", color=color.green) hline(-40, "Oversold Line", color=color.red) hline(0, "Middle Line", color=color.gray) midLinePlot = plot(0, color = na, editable = false, display = display.none) fill(smiPlot, midLinePlot, 120, 40, top_color = color.new(#4caf4f, 50), bottom_color = color.new(color.green, 100), title = "Overbought Gradient Fill") fill(smiPlot, midLinePlot, -40, -120, top_color = color.new(color.red, 100), bottom_color = color.new(color.red, 50), title = "Oversold Gradient Fill") // Señales de compra y venta buySignal = ta.crossover(smi, smiSignal) // Detect crossover sellSignal = ta.crossunder(smi, smiSignal) // Detect crossover // Graficar señales de compra/venta plotshape(series=buySignal, style=shape.labelup, location=location.belowbar, color=color.green, size=size.tiny, title="Señal de Compra") plotshape(series=sellSignal, style=shape.labeldown, location=location.abovebar, color=color.red, size=size.tiny, title="Señal de Venta") // Lógica de la estrategia if (buySignal) strategy.entry("Compra", strategy.long) if (sellSignal) strategy.entry("Venta", strategy.short) // Alertas alertcondition(buySignal, title="Alerta de Compra", message="¡Señal de Compra Detectada!") alertcondition(sellSignal, title="Alerta de Venta", message="¡Señal de Venta Detectada!")