
Strategi ini adalah sistem perdagangan kuantitatif berdasarkan rata-rata pergerakan, indikator RSI, dan trailing stop loss. Menggabungkan pelacakan tren dan indikator momentum dalam analisis teknis untuk mencapai transaksi yang terkendali risikonya dengan menetapkan kondisi masuk dan keluar yang ketat. Logika inti dari strategi ini adalah mencari peluang jenuh jual untuk memasuki pasar dalam tren naik dan menggunakan trailing stop loss untuk melindungi keuntungan.
Strategi ini menggunakan rata-rata pergerakan sederhana (SMA) 200 hari sebagai dasar penilaian tren dan menggabungkannya dengan indeks kekuatan relatif (RSI) untuk menghasilkan sinyal perdagangan. Secara khusus:
Ini adalah strategi perdagangan kuantitatif dengan struktur lengkap dan logika yang jelas. Menggabungkan beberapa indikator teknis untuk mendapatkan hasil yang stabil sekaligus mengendalikan risiko. Meskipun ada ruang untuk pengoptimalan, kerangka dasar memiliki kepraktisan dan skalabilitas yang baik. Strategi ini cocok untuk investor jangka menengah dan panjang dan memiliki daya adaptasi yang baik terhadap berbagai lingkungan pasar.
/*backtest
start: 2025-01-09 00:00:00
end: 2025-01-16 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("200 SMA Crossover Strategy", overlay=false)
// Define inputs
smaLength = input.int(200, title="SMA Length")
rsiLength = input.int(14, title="RSI Length")
rsiThreshold = input.float(40, title="RSI Threshold")
trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)")
waitingPeriod = input.int(10, title="Waiting Period (Days)")
// Calculate 200 SMA
sma200 = ta.sma(close, smaLength)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
// Plot the 200 SMA and RSI
plot(sma200, color=color.blue, linewidth=2, title="200 SMA")
plot(rsi, color=color.purple, title="RSI", display=display.none)
// Define buy and sell conditions
var isLong = false
var float lastExitTime = na
var float trailStopPrice = na
// Explicitly declare timeSinceExit as float
float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000)
canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod
buyCondition = close > sma200 and rsi < rsiThreshold and canEnter
if (buyCondition and not isLong)
strategy.entry("Buy", strategy.long)
trailStopPrice := na
isLong := true
// Update trailing stop loss if long
if (isLong)
trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100))
// Check for trailing stop loss or sell condition
if (isLong and (close < trailStopPrice or close < sma200))
strategy.close("Buy")
lastExitTime := time
isLong := false
// Plot buy and sell signals
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")