Zweifelhafte bewegliche Stochastische Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-29 11:54:10
Tags:

img

Übersicht

Die Stochastische Strategie des Dual Moving Average versucht, Handelsmöglichkeiten mit einer Kombination von gleitenden Durchschnittsindikatoren und dem stochastischen Oszillator zu identifizieren.

Strategie Logik

Die Strategie beruht in erster Linie auf zwei technischen Indikatoren:

  1. 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.

  2. 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:

  1. Wenn die schnelle EMA über die langsame SMA überschreitet und %K unter dem überverkauften Niveau liegt, gehen Sie lang.

  2. 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.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Die Kombination mehrerer technischer Indikatoren ermöglicht ein umfassenderes Urteil als die Verwendung eines einzigen Indikators.
  2. Durch das Filtern mit dem stochastischen Oszillator werden einige falsche Signale vermieden.
  3. Die Verwendung mehrerer gleitender Durchschnitte mit gemischten Parametern ermöglicht robustere Signale.
  4. Einheitliche Risikopositionen

Risikoanalyse

Es gibt auch einige Risiken:

  1. Bewegliche Durchschnitte können viele unsichere Signale erzeugen, was zu mehr falschen Einträgen führt; begrenzte Stop-Loss-Fähigkeit.
  2. Der stochastische Oszillator kann auch selbst falsche Signale erzeugen.
  3. Die Einstellungen der Parameter erfordern eine Optimierung (z. B. Überkauf-/Überverkaufswerte, gleitende Durchschnittsperioden), ansonsten wirkt sich dies auf die Leistung aus.
  4. Mangelnde Fundamentalanalyse.

Abmilderung:

  1. Optimierung der Parameter, um die beste Kombination von Indikatoren zu finden.
  2. Verwenden Sie kleinere Positionsgrößen, skalieren.
  3. Einbeziehung von Fundamentalanalysen, um Ereignisse zu vermeiden.

Möglichkeiten zur Verbesserung

Die wichtigsten Optimierungsmöglichkeiten sind:

  1. Testen und optimieren Sie gleitende Durchschnittsparameter, um ein Optimum zu finden.
  2. Tests von stochastischen Parametern wie Überkauf-/Überverkaufszonen für optimale Einstellungen.
  3. Zusätzliche Indikatoren wie Volumen oder Volatilität für eine reichhaltigere Einstiegslogik einbeziehen.
  4. Verbesserung der Stop-Loss-Methodik, z. B. Trailing-Stops, um das Risiko zu senken.
  5. Verbesserung des Geldmanagements, wie z. B. dynamische Positionsgrößen auf der Grundlage von ATR.
  6. Vermeiden Sie Risiko-Off-Ereignisse mit VIX usw.

Schlussfolgerung

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) 
    
  
        





Mehr