
Strategi ini adalah sistem perdagangan adaptif berdasarkan Indikator Momentum Stokastik (SMI). Ia memprediksi tren pasar dengan menganalisis persilangan indikator SMI dan garis sinyalnya, dan secara otomatis mengeluarkan sinyal beli dan jual pada posisi utama. Strategi ini menggunakan rata-rata pergerakan eksponensial (EMA) ganda untuk menghaluskan data dan meningkatkan keandalan sinyal. Sistem ini sangat cocok untuk transaksi jangka menengah dan panjang dan dapat secara efektif menangkap titik balik tren pasar utama.
Inti dari strategi ini adalah mengukur momentum harga dengan menghitung Indikator Momentum Stokastik (SMI). Pertama, kisaran harga tertinggi dan terendah dalam periode tertentu dihitung, lalu harga penutupan dinormalisasi relatif terhadap kisaran ini. Dengan menerapkan penghalusan EMA ganda pada rentang relatif dan rentang harga, diperoleh nilai SMI yang lebih stabil. Bila garis SMI membentuk persilangan emas dengan garis sinyalnya (EMA dari SMI), sinyal beli akan terpicu; bila membentuk persilangan kematian, sinyal jual akan terpicu. Pada saat yang sama, rentang jenuh beli dan jenuh jual (+40/-40) ditetapkan untuk mengonfirmasi keandalan sinyal.
Ini adalah strategi perdagangan yang matang berdasarkan indikator SMI. Strategi ini menghasilkan sinyal perdagangan melalui persilangan indikator teknis dan sangat praktis. Keuntungan utama dari strategi ini adalah sinyalnya jelas dan sangat tahan terhadap gangguan, tetapi ada pula tingkat kelambatan tertentu. Dengan menambahkan langkah-langkah pengoptimalan seperti verifikasi volume dan penyaringan tren, stabilitas dan keandalan strategi dapat lebih ditingkatkan. Strategi ini sangat cocok untuk melacak tren jangka menengah dan panjang dan merupakan pilihan yang baik bagi investor yang ingin membangun sistem perdagangan yang sistematis.
/*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!")