Strategi Stochastic Dual Moving Average mencoba mengidentifikasi peluang perdagangan menggunakan kombinasi indikator moving average dan osilator stochastic.
Strategi ini terutama didasarkan pada dua indikator teknis:
Moving Averages: Ini menghitung EMA cepat, SMA lambat dan VWMA lambat menggunakan parameter yang berbeda, dan menghasilkan sinyal perdagangan ketika EMA cepat melintasi SMA lambat.
Stochastic Oscillator: Menghitung nilai %K dan menganggap pasar terlalu banyak dibeli atau terlalu banyak dijual ketika %K melintasi ambang batas atas atau bawah yang telah ditetapkan sebelumnya, menggunakan ini untuk menyaring beberapa sinyal rata-rata bergerak.
Secara khusus, logika untuk generasi sinyal adalah:
Ketika EMA cepat melintasi SMA lambat, dan %K berada di bawah tingkat oversold, pergi panjang.
Untuk posisi panjang yang ada, tutup ketika %K kembali memasuki zona overbought atau harga melanggar stop loss. Untuk posisi pendek, tutup ketika %K kembali memasuki zona oversold atau harga melanggar stop loss.
Dengan menggabungkan rata-rata bergerak dan osilator stokastik, strategi ini mencoba mengidentifikasi titik sinyal rata-rata bergerak dengan probabilitas tinggi untuk memasuki perdagangan, sambil menggunakan stokastik untuk menyaring beberapa sinyal palsu.
Keuntungan utama dari strategi ini adalah:
Ada juga beberapa risiko:
Pengurangan:
Peluang optimasi utama adalah:
Strategi Stochastic Dual Moving Average menggunakan campuran moving average dan osilator stochastic untuk merancang sistem trend berikut yang kuat, tetapi memiliki beberapa peluang peningkatan di sekitar parameter, stop dll. Penyempurnaan lebih lanjut seperti indikator tambahan dan optimasi berpotensi memberikan alfa yang lebih konsisten.
/*backtest start: 2023-01-22 00:00:00 end: 2024-01-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("TVIX MEAN REV V2 TREND", overlay=true) length = input(16, minval=1) OverBought = input(80) OverSold = input(20) TradeLong = input (true) TradeShort = input (true) OverBoughtClose = input(80) OverSoldClose = input(20) smoothK = 3 smoothD = 3 trail_points = input(50) k = sma(stoch(close, high, low, length), smoothK) d = sma(k, smoothD) k2 = sma(stoch(close, high, low, length), smoothK) d2 = sma(k, smoothD) // === GENERAL INPUTS === // short Ema maFastSource = input(defval=close, title="Fast EMA Source") maFastLength = input(defval=1, title="Fast EMA Period", minval=1) // long Sma maSlowSource = input(defval=close, title="Slow SMA Source") maSlowLength = input(defval=100, title="Slow SMA Period", minval=1) // longer Sma maSlowerSource = input(defval=close, title="Slower SMA Source") maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1) //ATR Stop Loss Indicator by Keith Larson atrDays = input(7, "ATR Days Lookback") theAtr = atr(atrDays) atrModifier = input(5.0, "ATR Modifier") //plot(atr * atrModifier, title="ATR") LstopLoss = close - (theAtr * atrModifier) SstopLoss = close + (theAtr * atrModifier) // === SERIES SETUP === /// a couple of ma's.. maFast = ema(maFastSource, maFastLength) maSlow = sma(maSlowSource, maSlowLength) maSlower = vwma(maSlowerSource, maSlowerLength) rsi = rsi(maSlowerSource, maSlowerLength) // === PLOTTING === fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30) slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30) slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30) // === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross LongFilter = maFast > maSlow ShortFilter = maSlow > maFast BUY=crossover(k, d) and k < OverSold SELL=crossunder(k, d) and k > OverBought SELLCLOSE=crossover(k, d) and k < OverSoldClose BUYCLOSE=crossunder(k, d) and k > OverBoughtClose Open = open if not na(k) and not na(d) if crossover(k, d) and k < OverSold and LongFilter and TradeLong strategy.entry("$", strategy.long, limit = Open, comment="Long") strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss ) ///strategy.close("$",when = open < LstopLoss ) if not na(k) and not na(d) if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort strategy.entry("$1", strategy.short, limit = Open, comment="S") strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss ) ///strategy.close ("$1", when = open < SstopLoss)