Schaff-Trendzyklus mit Doppel-Drehungsdurchschnitts-Kreuzung

Schriftsteller:ChaoZhang, Datum: 2023-12-12 17:43:19
Tags:

img

Übersicht

Diese Strategie wird Schaff Trend Cycle mit Double Moving Average Crossover Strategy genannt. Die Hauptidee besteht darin, lange und kurze Positionen auf der Grundlage des Schaff Trend Cycle (STC) -Indikators und des doppelten gleitenden Durchschnitts Crossovers zu bestimmen. Insbesondere, wenn der STC aus den überkauften oder überverkauften Bereichen ausbricht, liegt der Preis über dem schnellen exponentiellen gleitenden Durchschnitt und die schnelle EMA über der langsamen EMA, wird eine Long-Position eröffnet. Umgekehrt wird eine Short-Position eröffnet.

Strategie Logik

Die Strategie stützt sich in erster Linie auf zwei technische Indikatoren:

  1. Trendindikator: STC-Indikator zur Bestimmung der Trendrichtung. Der STC umfasst die MACD-, Stochastic- und STC-Indikatorlinie. Ein Aufbruch aus der Zone 0-25 signalisiert einen bullischen Trend, während ein Abbruch aus der Zone 75-100 einen bärischen Trend signalisiert.

  2. Bewegliche Durchschnittsüberschreitung: Schnelle einfache gleitende Durchschnittswerte (Standardperiode 35) kreuzen über/unter die langsame SMA (Standardperiode 200). Ein bullisches Signal ausgelöst, wenn die schnelle SMA über die langsame SMA überschreitet. Ein bärisches Signal ausgelöst auf dem gegenüberliegenden Crossover.

Die Handelssignallogik ist wie folgt definiert:

  1. Langes Signal: STC bricht über die 25-Linie, schnelle SMA liegt über der langsamen SMA und der Schlusskurs liegt über der schnellen SMA.

  2. Kurzsignal: STC bricht unter der 75-Linie, schnelle SMA ist unter der langsamen SMA und der Schlusskurs ist unter der schnellen SMA.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Zuverlässige Handelssignale aus der Kombination von Trend- und gleitenden Durchschnittsindikatoren.

  2. Anpassungsfähige gleitende Durchschnittsperioden. MA-Perioden können für verschiedene Marktbedingungen optimiert werden.

  3. STC identifiziert Überkauf-/Überverkaufsniveaus, um Höchstkunden und Tiefkunden zu vermeiden. Zielstopps setzen einen Gewinn/Verlustbereich von 400 Punkten.

Risikoanalyse

Es gibt einige Risiken, die zu berücksichtigen sind:

  1. Das Potenzial für falsche Ausbrüche muss durch die Kursentwicklung bestätigt werden.

  2. Mehr falsche Signale von MA-Kreuzungen.

  3. Es wird nur in eine Richtung gehandelt, was den Raum für offene Positionen begrenzt.

  4. Bei dem Margin-Devisenhandel kann der Spread bei Live-Handel erheblich sein.

Optimierung

Mögliche Optimierungspfade sind:

  1. Anpassung der STC-Parameter für Überkauf/Überverkauf.

  2. Optimierung der MA-Perioden zur Verbesserung der Zuverlässigkeit des Crossover-Signals.

  3. Fügen Sie zusätzliche Filter wie Bollinger Bands hinzu, um falsche Ausbruchgeschäfte zu reduzieren.

  4. Implementierung einer zweiseitigen Handelslogik zur Erhöhung der Kapazität.

  5. Hinzufügen von Stop-Loss-Logik zur Steuerung von Verlusten pro Handel.

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass diese Strategie Trend- und gleitende Durchschnitts-Crossover-Indikatoren kombiniert, um die Trendrichtung und den Zeitpunkt der Eintritte zu bestimmen.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-11 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Shaff Trend Cycle coded by Alex Orekhov (everget)
// Strategy and its additional conditions provided by greenmask
// Schaff Trend Cycle script may be freely distributed under the MIT license.
strategy("STC", shorttitle="STC")

fastLength = input(title="MACD Fast Length", type=input.integer, defval=23)
slowLength = input(title="MACD Slow Length", type=input.integer, defval=50)
cycleLength = input(title="Cycle Length", type=input.integer, defval=10)
d1Length = input(title="1st %D Length", type=input.integer, defval=3)
d2Length = input(title="2nd %D Length", type=input.integer, defval=3)
src = close
highlightBreakouts = input(title="Highlight Breakouts ?", type=input.bool, defval=true)

macd = ema(src, fastLength) - ema(src, slowLength)
k = nz(fixnan(stoch(macd, macd, macd, cycleLength)))
d = ema(k, d1Length)
kd = nz(fixnan(stoch(d, d, d, cycleLength)))
stc = ema(kd, d2Length)
stc := 	stc > 100 ? 100 : stc < 0 ? 0 : stc
stcColor = not highlightBreakouts ? (stc > stc[1] ? color.green : color.red) : #ff3013
stcPlot = plot(stc, title="STC", color=stcColor, transp=0)
upper = 75
lower = 25
transparent = color.new(color.white, 100)
upperLevel = plot(upper, title="Upper", color=color.gray)
hline(50, title="Middle", linestyle=hline.style_dotted)
lowerLevel = plot(lower, title="Lower", color=color.gray)

fill(upperLevel, lowerLevel, color=#f9cb9c, transp=90)

upperFillColor = stc > upper and highlightBreakouts ? color.green : transparent
lowerFillColor = stc < lower and highlightBreakouts ? color.red : transparent

fill(upperLevel, stcPlot, color=upperFillColor, transp=80)
fill(lowerLevel, stcPlot, color=lowerFillColor, transp=80)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
targetvalue = input(title="Target/stop", type=input.integer, defval=400)

ma1length = input(title="SMA1", type=input.integer, defval=35)
ma2length = input(title="SMA2", type=input.integer, defval=200)
ma1 = ema(close,ma1length)
ma2 = ema(close,ma2length)

bullbuy = crossover(stc, lower) and ma1>ma2 and close>ma1
bearsell = crossunder(stc, upper) and ma1<ma2 and close<ma1

if (bullbuy)
    strategy.entry("Riposte", strategy.long, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

if (bearsell)
    strategy.entry("Riposte", strategy.short, ordersize)
    strategy.exit( "Riposte close", from_entry="Riposte", qty_percent=100, profit=targetvalue,loss=targetvalue)

//plotshape(bullbuy,  title= "Purple", location=location.belowbar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
//plotshape(bearsell,  title= "Purple", location=location.abovebar, color=#006600, transp=0, style=shape.circle, size=size.tiny, text="Riposte")
















Mehr