Trendumkehrsystem

Schriftsteller:ChaoZhang, Datum: 2023-10-23 17:18:28
Tags:

img

Übersicht

Das Trend-Reversal-System ist eine Trend-Folge-Strategie, die gleitende Durchschnitte, CCI-Indikatoren und Supertrend-Indikatoren verwendet, um den Trend zu identifizieren und Pullbacks zu betreten.

Strategie Logik

Die Strategie verwendet als kurzfristigen gleitenden Durchschnitt die 21-Perioden-EMA und als langfristigen gleitenden Durchschnitt die 55-Perioden-EMA.

Der CCI-Indikator zeigt an, wann der Preis extreme Niveaus erreicht hat. Niveau 1-Signal ist, wenn der CCI standardmäßig 100/-100 erreicht, Level 2 140/-140 und Level 3 180/-180. Dies deutet auf überkaufte oder überverkaufte Bedingungen hin.

Der Supertrend-Indikator bestimmt die spezifische Trendrichtung und enthält ATR, um die Stop-Loss- und Einstiegsniveaus für Auf- und Abwärtstrends zu ermitteln.

Wenn 21 EMA über 55 EMA liegt und CCI ein niedriges Niveau erreicht (Überverkauftes Gebiet), kann es einen Long-Entry signalisieren. Wenn 21 EMA unter 55 EMA liegt und CCI ein hohes Niveau erreicht (Überkauftes Gebiet), kann es einen Short-Entry signalisieren. Der Stop-Loss wird auf dem Stop-Level von Supertrend festgelegt und der Gewinn wird bei 400 Pips festgelegt.

Analyse der Vorteile

Die Strategie kombiniert mehrere Indikatoren, um Trends und Überkauf/Überverkaufssituationen zu identifizieren, was dazu beiträgt, falsche Ausbrüche zu filtern. Der feste Take-Profit ermöglicht ein stabiles Risiko-Rendite-Verhältnis. Der Handel mit dem Trend bietet eine höhere Gewinnrate. CCI-Überkauf/Überverkaufssignale bieten eine gute Eintrittszeit während der Trendrückschritte.

Risikoanalyse

Die Parameter müssen für verschiedene Symbole optimiert werden, da die aktuellen Einstellungen möglicherweise nicht ideal sind. Die Stop-Loss-Methode ist roh und kann sich nicht an verschiedene Marktbedingungen anpassen. Fixed Take Profit passt sich nicht an die Marktvolatilität an. CCI kann manchmal falsche Signale erzeugen. Es ist ein weiteres Urteil über die Dynamik des Trends erforderlich, um Whipsaws zu vermeiden.

Optimierungsrichtlinien

Test-Parameter-Einstellungen auf verschiedenen Symbolen, optimieren MA-Perioden, ATR-Periode, ATR-Multiplikator usw. Berücksichtigen Sie Trailing-Stop oder ATR-Stop für einen anpassungsfähigen Stop-Loss. Testen Sie ATR-basierte Take-Profit für dynamische Gewinnziele. Fügen Sie Filter hinzu, um die Trenddynamik zu überprüfen, wenn Sie CCI-Signale nehmen, um unruhige Märkte zu vermeiden. Fügen Sie quantifizierbare Trendstärke-Indikatoren hinzu, um eine bessere Trendvalidierung zu erzielen.

Zusammenfassung

Das Trend-Reversal System kombiniert gleitende Durchschnitte, CCI und Supertrend, um Trends und Überkauf/Überverkauf für Retracement-Einträge zu identifizieren. Es hat eine relativ hohe Stabilität und Gewinnrate, aber die Stop-Loss-, Take-Profit- und Trendvalidierungsmechanismen müssen weiter optimiert werden, um die Robustheit über Symbole und Marktbedingungen hinweg zu gewährleisten. Insgesamt verwendet es einen einfachen und direkten Ansatz, um Indikatoren zur Erfassung von Trendchancen zu kombinieren, und es lohnt sich, mehr zu recherchieren und anzuwenden.


/*backtest
start: 2022-10-16 00:00:00
end: 2023-01-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © greenmask9

//@version=4
strategy("Oath", overlay=true)

// 21 EMA
emalength = input(21, title="Short EMA")
emashort = ema(close, emalength)

// 55 EMA
emalength2 = input(55, title="Long EMA")
ema = ema(close, emalength2)

//CCI calculation and inputs
lengthcci = input(20, minval=1, title="Overbought/sold detector period")
src = input(close, title="Overbought/sold detector source")
ma = sma(src, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))


//CCI plotting
ccioverbought = input(defval=100, title="Overbought level 1")
ccioverbought2 = input(defval=140, title="Overbought level 2")
ccioverbought3 = input(defval=180, title="Overbought level 3")

ccioversold = input(defval=-100, title="Oversold level 1")
ccioversold2 = input(defval=-140, title="Oversold level 2")
ccioversold3 = input(defval=-180, title="Oversold level 3")

//cciOB = (ccivalue >= ccioverbought and ccivalue < ccioverbought2)
//cciOS = (ccivalue <= ccioversold and ccivalue > ccioversold2)

//cciOB2 = (ccivalue >= ccioverbought2 and ccivalue < ccioverbought3)
//cciOS2 = (ccivalue <= ccioversold and ccivalue > ccioversold3)

//cciOB3 = (ccivalue >= ccioverbought3)
//cciOS3 = (ccivalue <= ccioversold3)

//Supertrend

length = input(title="ATR Period", type=input.integer, defval=55)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=5.0)
wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=true)
illuminate = input(title="Illuminate Trend", type=input.bool, defval=false)

atr = mult * atr(length)

longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := (wicks ? low[1] : close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir

//entries
uptrend = emashort>ema and dir == 1
upsignal = ccivalue<=ccioversold and ccivalue>ccioversold2
upsignal2 = ccivalue<=ccioversold2 and ccivalue>ccioversold3
upsignal3 = ccivalue<=ccioversold3
downtrend = emashort<ema and dir == -1
downsignal = ccivalue>=ccioverbought and ccivalue<ccioverbought2
downsignal2 = ccivalue>=ccioverbought2 and ccivalue<ccioverbought3
downsignal3 = ccivalue>=ccioverbought3

//adapts to the current bar, I need to save the bars number when the condition for buy was true, static number is spread
spread = input (0.00020, title="Spread")
upstoploss = longStop - spread
downstoploss = shortStop + spread
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
testlong = input(title="Test longs", type=input.bool, defval=true)
testshort = input(title="Test shorts", type=input.bool, defval=true)
//new
degree = input(title="Test level 1 overbought/sold levels", type=input.bool, defval=true)
degree2 = input(title="Test level 2 overbought/sold levels", type=input.bool, defval=false)
degree3 = input(title="Test level 3 overbought/sold levels", type=input.bool, defval=false)

statictarget = input(title="Use static target", type=input.bool, defval=true)
statictargetvalue = input(title="Static target in pips", type=input.integer, defval=400)

//timetrade = input(title="Open trades only withing specified time", type=input.bool, defval=true)
//timtrade = input()

//přidat možnost TP podle ATR a sl podle ATR
buy1 = uptrend and upsignal and strategy.opentrades==0 and testlong and degree
x1 = barssince (buy1)
if (buy1)
//bodlo by zakázat atrtarget v tomto případě
    if (statictarget)
        strategy.entry("Oath1", strategy.long, ordersize)
        strategy.exit( "Oath1 Close", from_entry="Oath1" , profit=statictargetvalue,stop=upstoploss[x1])
 
buy2 = uptrend and upsignal2 and strategy.opentrades==0 and testlong and degree2
x2 = barssince (buy2)
if (buy2)
//bodlo by zakázat atrtarget v tomto případě
    if (statictarget)
        strategy.entry("Oath2", strategy.long, ordersize)
        strategy.exit( "Oath2 Close", from_entry="Oath2" , profit=statictargetvalue,stop=upstoploss[x2])
  
buy3 = uptrend and upsignal3 and strategy.opentrades==0 and testlong and degree3
x3 = barssince (buy3)
if (buy3)
//bodlo by zakázat atrtarget v tomto případě
    if (statictarget)
        strategy.entry("Oath3", strategy.long, ordersize)
        strategy.exit( "Oath3 Close", from_entry="Oath3" , profit=statictargetvalue,stop=upstoploss[x3])

sell1 = downtrend and downsignal and strategy.opentrades==0 and testshort and degree
y1 = barssince (sell1)
if (sell1)
    if (statictarget)
        strategy.entry("Oath1.s", strategy.short, ordersize)
        strategy.exit( "Oath1 Close", from_entry="Oath1.s" , profit=statictargetvalue,stop=downstoploss[y1])

sell2 = downtrend and downsignal2 and strategy.opentrades==0 and testshort and degree2
y2 = barssince (sell2)
if (sell2)
    if (statictarget)
        strategy.entry("Oath2.s", strategy.short, ordersize)
        strategy.exit( "Oath2 Close", from_entry="Oath2.s" , profit=statictargetvalue,stop=downstoploss[y2])

sell3 = downtrend and downsignal3 and strategy.opentrades==0 and testshort and degree3
y3 = barssince (sell3)
if (sell3)
    if (statictarget)
        strategy.entry("Oath3.s", strategy.short, ordersize)
        strategy.exit( "Oath3 Close", from_entry="Oath3.s" , profit=statictargetvalue,stop=downstoploss[y3])

plotshape(uptrend and upsignal and degree, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up")
plotshape(downtrend and downsignal and degree, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down")
plotshape(uptrend and upsignal2 and degree2, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up+")
plotshape(downtrend and downsignal2 and degree2, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down+")
plotshape(uptrend and upsignal3 and degree3, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up++")
plotshape(downtrend and downsignal3 and degree3, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down++")



Mehr