
La estrategia es un sistema de trading adaptativo basado en el Indicador de Momento Estocástico (SMI). Predice las tendencias del mercado analizando el cruce del indicador SMI y su línea de señal, y emite automáticamente señales de compra y venta en posiciones clave. La estrategia utiliza una media móvil exponencial doble (EMA) para suavizar los datos y mejorar la confiabilidad de la señal. Este sistema es especialmente adecuado para transacciones a medio y largo plazo y puede capturar eficazmente los puntos de inflexión de las principales tendencias del mercado.
El núcleo de la estrategia es medir el impulso de los precios mediante el cálculo del Indicador de Impulso Estocástico (SMI). Primero se calcula el rango de precios máximos y mínimos dentro de un período específico y luego se normaliza el precio de cierre en relación con este rango. Al aplicar el suavizado doble de EMA al rango relativo y al rango de precios, se obtiene un valor de SMI más estable. Cuando la línea SMI forma un cruce dorado con su línea de señal (EMA de SMI), se activa una señal de compra; cuando forma un cruce de la muerte, se activa una señal de venta. Al mismo tiempo, los rangos de sobrecompra y sobreventa (+40/-40) se establecen para confirmar la confiabilidad de la señal.
Se trata de una estrategia comercial madura basada en el indicador SMI. Genera señales comerciales a través del cruce de indicadores técnicos y es sumamente práctica. La principal ventaja de la estrategia es que la señal es clara y muy resistente al ruido, pero también hay un cierto grado de retraso. Al agregar medidas de optimización como la verificación de volumen y el filtrado de tendencias, se puede mejorar aún más la estabilidad y la confiabilidad de la estrategia. Esta estrategia es especialmente adecuada para el seguimiento de tendencias a medio y largo plazo y es una buena opción para los inversores que quieran construir un sistema de trading sistemático.
/*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!")