Strategi Super Trend Dual Moving Average adalah strategi perdagangan kuantitatif berdasarkan indikator Super Trend dan moving average sederhana. Strategi ini menggunakan indikator Super Trend untuk menentukan arah tren pasar, dan kemudian menggabungkan rata-rata bergerak sederhana 200 hari untuk menyaring, membuka posisi panjang dan pendek di sepanjang arah tren utama.
Strategi ini menggunakan dua indikator:
Super Trend Indicator: Ini menghitung rel atas dan bawah berdasarkan ATR volatilitas sejati dan pengganda. Ketika harga penutupan lebih tinggi dari rel atas, ini menunjukkan pandangan bullish. Ketika lebih rendah dari rel bawah, ini menunjukkan pandangan bearish.
200-Day Simple Moving Average: Ini mengambil rata-rata aritmatika harga penutupan selama 200 hari terakhir. Ketika harga penutupan lebih tinggi dari garis ini, itu mewakili tren bullish utama. Ketika lebih rendah dari garis ini, itu mewakili tren bearish utama.
Logika Strategi:
Ketika indikator Super Trend memberikan sinyal bullish (nilai Super Trend lebih besar dari 0) dan harga penutupan lebih tinggi dari MA 200 hari, pergi panjang.
Ketika indikator Super Trend memberikan sinyal penurunan (nilai Super Trend kurang dari 0) dan harga penutupan lebih rendah dari MA 200 hari, pergi pendek.
Tutup posisi ketika indikator Super Trend memberikan sinyal terbalik terhadap yang sebelumnya.
Stop loss ditetapkan sebesar 25%.
Strategi ini menggabungkan indikator Super Trend untuk menentukan tren jangka pendek dan MA 200 hari untuk menentukan tren jangka panjang, yang secara efektif dapat menyaring breakout palsu, mengurangi frekuensi perdagangan sambil meningkatkan tingkat kemenangan.
Risiko utama dari strategi ini adalah bahwa rentang stop loss relatif besar. Hal ini dapat meningkatkan risiko likuidasi paksa dalam situasi leverage tinggi. Selain itu, ketika pasar terikat rentang, indikator Super Trend akan menghasilkan sinyal berlebihan, sehingga meningkatkan biaya transaksi dan frekuensi perdagangan.
Risiko dapat dikurangi dengan menyesuaikan periode ATR, parameter multiplier dan rentang stop loss dengan tepat.
Strategi dapat dioptimalkan dalam aspek berikut:
Sesuaikan periode ATR dan parameter multiplier untuk mengoptimalkan indikator Super Trend.
Cobalah indikator MA lainnya seperti EMA dan VIDYA untuk penggantian.
Tambahkan indikator tambahan lainnya seperti saluran BOLL atau indikator KD untuk penyaringan sinyal lebih lanjut.
Mengoptimalkan strategi stop loss, seperti memindahkannya ke titik impas atau trailing stop bersama dengan tingkat timeframe yang lebih tinggi.
Secara keseluruhan, strategi ini sangat praktis. Ini mempertimbangkan penilaian tren jangka pendek dan penilaian tren jangka panjang dengan pengaturan stop loss yang wajar. Ini dapat mencapai hasil yang lebih baik melalui penyesuaian dan optimalisasi parameter, yang layak verifikasi dan aplikasi perdagangan nyata.
/*backtest start: 2023-12-16 00:00:00 end: 2024-01-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/ // © wielkieef //@version=5 strategy("Smart SuperTrend Strategy ", shorttitle="ST Strategy", overlay=true, pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, calc_on_order_fills=false, slippage=0, commission_type=strategy.commission.percent, commission_value=0.01) // Parametry wskaźnika SuperTrend atrLength = input(10, title="Lenght ATR") factor = input(3.0, title="Mult.") // Parametry dla SMA lengthSMA = input(200, title="Lenght SMA") // Parametry dla Stop Loss sl = input.float(25.0, '% Stop Loss', step=0.1) // Obliczanie ATR atr = ta.atr(atrLength) // Obliczanie podstawowej wartości SuperTrend up = hl2 - (factor * atr) dn = hl2 + (factor * atr) // Obliczanie 200-SMA sma200 = ta.sma(close, lengthSMA) // Inicjalizacja zmiennych var float upLevel = na var float dnLevel = na var int trend = na var int trendWithFilter = na // Logika SuperTrend upLevel := close[1] > upLevel[1] ? math.max(up, upLevel[1]) : up dnLevel := close[1] < dnLevel[1] ? math.min(dn, dnLevel[1]) : dn trend := close > dnLevel[1] ? 1 : close < upLevel[1] ? -1 : nz(trend[1], 1) // Filtr SMA i aktualizacja trendWithFilter trendWithFilter := close > sma200 ? math.max(trend, 0) : math.min(trend, 0) // Logika wejścia longCondition = trend == 1 shortCondition = trend == -1 // Wejście w pozycje if (longCondition) and close > sma200 strategy.entry("Long", strategy.long) if (shortCondition) and close < sma200 strategy.entry("Short", strategy.short) // Warunki zamknięcia pozycji Long_close = trend == -1 and close > sma200 Short_close = trend == 1 and close < sma200 // Zamknięcie pozycji if (Long_close) strategy.close("Long") if (Short_close) strategy.close("Short") // Kolory superTrendu z filtrem sma200 trendColor = trendWithFilter == 1 ? color.green : trendWithFilter == -1 ? color.red : color.blue //ploty plot(trendWithFilter == 1 ? upLevel : trendWithFilter == -1 ? dnLevel : na, color=trendColor, title="SuperTrend") // Stop Loss ( this code is from author RafaelZioni, modified by wielkieef ) per(procent) => strategy.position_size != 0 ? math.round(procent / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) // -------------------------------------------------------------------------------------------------------------------- strategy.exit('SL',loss=per(sl)) //by wielkieef