
Ein Trendschwankungen-Wendepunkt-System ist eine Trend-Tracking-Strategie, die einen Trend identifiziert und bei einem Rückruf eintritt. Es kann die Richtung des Trends bestätigen und bei einem Rückzug ein Einstiegssignal liefern.
Die Strategie verwendet eine 21-Zyklus-EMA als kurzfristigen Moving Average und eine 55-Zyklus-EMA als langfristigen Moving Average. Die 21-Tage-EMA über der 55-Tage-EMA zeigt, dass sie sich derzeit im Aufwärtstrend befindet, und die 21-Tage-EMA unter der 55-Tage-EMA zeigt, dass sie sich derzeit im Abwärtstrend befindet.
Der CCI-Indikator kann zeigen, ob ein Preis ein extremes Niveau erreicht hat. Wenn der CCI die Standard 100 oder -100 erreicht, ist dies ein Level-1-Signal, 140/-140 ist ein Level-2-Signal, und 180/-180 ist ein Level-3-Signal. Dies bedeutet, dass es möglicherweise überkauft oder überverkauft ist.
Der Supertrend-Indikator beurteilt die Richtung eines bestimmten Trends. Er kombiniert die durchschnittliche reale Schwankungsbreite, um die Stop-Loss- und Einstiegspunkte für Aufwärtstrends und Abwärtstrends zu bestimmen.
Wenn der 21. EMA oberhalb des 55. EMA liegt und der CCI einen niedrigen Wert erreicht hat (was bedeutet, dass er sich im Überverkaufszone befindet), kann ein Plus eingetragen werden. Wenn der 21. EMA unter dem 55. EMA liegt und der CCI einen hohen Wert erreicht hat (was bedeutet, dass er sich im Überverkaufszone befindet), kann ein Null-Eintritt durchgeführt werden.
Die Strategie kombiniert mehrere Indikatoren, um Trends und Überkauf-Überverkäufe zu beurteilen, um falsche Durchbrüche effektiv zu filtern. Die Verwendung von festen Stopps ermöglicht einen stabilen Risiko-Rendite-Verhältnis.
Die Strategie muss optimiert werden, um die Parameter der Handelsvarianten zu optimieren. Die Einstellungen für verschiedene Varianten beeinflussen die Strategie. Die Stop-Loss-Einstellungen sind relativ locker und können nicht für verschiedene Märkte angepasst werden.
Die Parameter-Einstellungen für verschiedene Handelsarten können getestet werden, um die Moving Average-Periode, die ATR-Periode, die ATR-Multiplikation und andere Parameter zu optimieren. Es kann in Betracht gezogen werden, den Stop-Loss in einen ATR-Stop oder einen Trailing-Stop umzuwandeln, um den Marktschwankungen gerecht zu werden. Es kann getestet werden, den Stop-Stop in einen Schwankungs-Stop umzuwandeln, um den Zielgewinn auf den ATR-Wert zu setzen.
Das Trendschwankungen-Wendepunkt-System integriert die Moving Average, den CCI-Indikator und den Supertrend, um die Trendrichtung zu identifizieren und Überkauf-Überverkäufe zu betreiben, um bei einer Trendwende einzutreten. Es hat eine hohe Stabilität und Gewinnrate, aber die Stop-Loss-, Stop-Stopp- und Trendurteilsmechanismen müssen weiter optimiert werden, damit die Strategieparameter an verschiedene Sorten und Marktumgebungen angepasst werden können. Insgesamt ist die Strategie in einer einfachen und direkten Weise mit mehreren Indikatoren kombiniert, um Trendchancen zu erfassen.
/*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++")