Die Stochastische Strategie des Dual Moving Average versucht, Handelsmöglichkeiten mit einer Kombination von gleitenden Durchschnittsindikatoren und dem stochastischen Oszillator zu identifizieren.
Die Strategie beruht in erster Linie auf zwei technischen Indikatoren:
Bewegliche Durchschnitte: Er berechnet einen schnellen EMA, einen langsamen SMA und einen langsamen VWMA unter Verwendung verschiedener Parameter und erzeugt Handelssignale, wenn der schnelle EMA den langsamen SMA überschreitet.
Stochastischer Oszillator: Er berechnet den Wert von %K und betrachtet den Markt als überkauft oder überverkauft, wenn %K vorgegebene obere oder untere Schwellenwerte überschreitet, um einige der gleitenden Durchschnittssignale zu filtern.
Insbesondere ist die Logik für die Signalgenerierung:
Wenn die schnelle EMA über die langsame SMA überschreitet und %K unter dem überverkauften Niveau liegt, gehen Sie lang.
Für bestehende Long-Positionen schließt man, wenn %K die Überkaufzone wieder betritt oder der Preis den Stop-Loss überschreitet.
Durch die Kombination von gleitenden Durchschnitten und dem stochastischen Oszillator versucht die Strategie, hochwahrscheinliche gleitende Durchschnittssignalpunkte zu identifizieren, um Trades einzugehen, während die Stochastik verwendet wird, um einige der falschen Signale auszufiltern.
Die wichtigsten Vorteile dieser Strategie sind:
Es gibt auch einige Risiken:
Abmilderung:
Die wichtigsten Optimierungsmöglichkeiten sind:
Die Stochastische Strategie für den Doppel-Beweglichen Durchschnitt verwendet eine Mischung aus gleitenden Durchschnitten und dem stochastischen Oszillator, um ein robustes Trendfolgensystem zu entwerfen, bietet jedoch einige Möglichkeiten zur Verbesserung von Parametern, Stops usw. Weitere Verbesserungen wie zusätzliche Indikatoren und Optimierungen können möglicherweise ein konsistenteres Alpha liefern.
/*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)