
Стратегия представляет собой адаптивную торговую систему, основанную на индикаторе стохастического импульса (SMI). Он прогнозирует рыночные тенденции, анализируя пересечение индикатора SMI и его сигнальной линии, и автоматически подает сигналы на покупку и продажу по ключевым позициям. Стратегия использует двойную экспоненциальную скользящую среднюю (EMA) для сглаживания данных и повышения надежности сигнала. Эта система особенно подходит для среднесрочных и долгосрочных сделок и позволяет эффективно улавливать поворотные моменты основных рыночных тенденций.
Суть стратегии заключается в измерении ценового импульса путем расчета индикатора стохастического импульса (SMI). Сначала рассчитывается диапазон максимальных и минимальных цен за определенный период, а затем цена закрытия нормализуется относительно этого диапазона. Применяя двойное сглаживание EMA к относительному диапазону и диапазону цен, получаем более стабильное значение SMI. Когда линия SMI образует золотое пересечение со своей сигнальной линией (EMA SMI), срабатывает сигнал на покупку; когда она образует смертельное пересечение, срабатывает сигнал на продажу. При этом устанавливаются диапазоны перекупленности и перепроданности (+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!")