Strategi Stochastic Dual Moving Average cuba mengenal pasti peluang perdagangan menggunakan gabungan penunjuk purata bergerak dan osilator stochastic. Ia menghasilkan isyarat perdagangan apabila EMA cepat melintasi di atas atau di bawah SMA perlahan, sementara juga menggunakan nilai %K stochastic untuk menapis isyarat apabila pasaran terlalu meluas.
Strategi ini terutamanya berdasarkan dua penunjuk teknikal:
Purata Bergerak: Ia mengira EMA cepat, SMA perlahan dan VWMA perlahan menggunakan parameter yang berbeza, dan menghasilkan isyarat perdagangan apabila EMA cepat melintasi SMA perlahan.
Osilator Stochastic: Ia mengira nilai %K dan menganggap pasaran terlalu banyak dibeli atau terlalu banyak dijual apabila %K melintasi paras ambang atas atau bawah yang telah ditetapkan, menggunakan ini untuk menapis beberapa isyarat purata bergerak.
Khususnya, logik untuk penjanaan isyarat adalah:
Apabila EMA pantas melintasi di atas SMA perlahan, dan %K di bawah tahap oversold, pergi panjang. Apabila EMA pantas melintasi di bawah SMA perlahan, dan %K di atas tahap overbought, pergi pendek.
Untuk kedudukan panjang yang sedia ada, tutup apabila %K memasuki semula zon overbought atau harga melanggar stop loss. Untuk kedudukan pendek, tutup apabila %K memasuki semula zon oversold atau harga melanggar stop loss.
Dengan menggabungkan purata bergerak dan osilator stokastik, strategi ini cuba mengenal pasti titik isyarat purata bergerak yang berkemungkinan tinggi untuk memasuki perdagangan, sambil menggunakan stokastik untuk menapis beberapa isyarat palsu.
Kelebihan utama strategi ini ialah:
Terdapat juga beberapa risiko:
Pengurangan:
Peluang pengoptimuman utama adalah:
Strategi Stochastic Purata Bergerak Berganda menggunakan campuran purata bergerak dan osilator stochastic untuk merancang sistem trend berikut yang kukuh, tetapi mempunyai beberapa peluang peningkatan di sekitar parameter, berhenti dan lain-lain. Penyempurnaan lanjut seperti penunjuk tambahan dan pengoptimuman berpotensi memberikan alpha 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)