
이 전략은 확률적 모멘텀 지표(SMI)를 기반으로 한 적응형 거래 시스템입니다. SMI 지표와 신호선의 교차를 분석하여 시장 동향을 예측하고 주요 위치에서 자동으로 매수 및 매도 신호를 보냅니다. 이 전략은 이중 지수 이동 평균(EMA)을 사용하여 데이터를 매끄럽게 만들고 신호의 신뢰성을 향상시킵니다. 이 시스템은 특히 중장기 거래에 적합하며, 주요 시장 추세의 전환점을 효과적으로 포착할 수 있습니다.
전략의 핵심은 확률적 모멘텀 지표(SMI)를 계산하여 가격 모멘텀을 측정하는 것입니다. 먼저, 특정 기간 내의 최고가와 최저가 범위를 계산한 다음, 이 범위를 기준으로 종가를 정규화합니다. 상대 범위와 가격 범위에 이중 EMA 평활화를 적용함으로써 더 안정적인 SMI 값을 얻을 수 있습니다. SMI선이 신호선(SMI의 EMA)과 골든크로스를 만들면 매수 신호가 발생하고, 데드크로스를 만들면 매도 신호가 발생합니다. 동시에 매수 과다와 매도 과다 범위(+40/-40)가 설정되어 신호의 신뢰성을 확인합니다.
이것은 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!")