Strategi ini adalah sistem perdagangan kuantitatif berdasarkan purata bergerak, penunjuk RSI, dan stop loss yang mengikuti. Ia menggabungkan trend berikut dan penunjuk momentum dari analisis teknikal, mencapai perdagangan yang terkawal risiko melalui syarat masuk dan keluar yang ketat. Logik terasnya adalah untuk mencari peluang oversold dalam trend naik dan melindungi keuntungan menggunakan berhenti yang mengikuti.
Strategi ini menggunakan Purata Bergerak Sederhana (SMA) 200 hari sebagai asas untuk penilaian trend, digabungkan dengan Indeks Kekuatan Relatif (RSI) untuk menjana isyarat perdagangan. 1. Menggunakan SMA 200 hari untuk menilai trend utama, hanya mempertimbangkan kedudukan panjang apabila harga di atas purata 2. Mengenal pasti isyarat oversold apabila RSI jatuh di bawah ambang yang telah ditetapkan (default 40) 3. Memicu entri panjang apabila kedua-dua syarat dipenuhi dan tempoh menunggu sejak keluar terakhir (default 10 hari) telah berlalu 4. Melindungi keuntungan semasa memegang kedudukan melalui stop loss (default 5%) 5. Keluar dari kedudukan apabila harga pecah di bawah hentian atau SMA 200 hari
Ini adalah strategi perdagangan kuantitatif dengan struktur lengkap dan logik yang jelas. Ia mengejar pulangan yang stabil sambil mengawal risiko dengan menggabungkan beberapa penunjuk teknikal. Walaupun terdapat ruang untuk pengoptimuman, rangka kerja asas mempunyai kepraktisan dan kepelbagaian yang baik. Strategi ini sesuai untuk pelabur jangka menengah hingga panjang dan menyesuaikan diri dengan baik dengan persekitaran pasaran yang berbeza.
/*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")