Trendfolgestrategie basierend auf ATR und Volatilitätsindex


Erstellungsdatum: 2024-01-04 15:31:34 zuletzt geändert: 2024-01-04 15:31:34
Kopie: 1 Klicks: 590
1
konzentrieren Sie sich auf
1621
Anhänger

Trendfolgestrategie basierend auf ATR und Volatilitätsindex

Überblick

Die Strategie nutzt die mittlere reale Amplitude (ATR) und den Volatilitätsindex (CHOP) als primäre technische Indikatoren, um Trends zu identifizieren und zu verfolgen. Wenn der Index auf und ab geht, wird die Richtung des Trends als Einstiegssignal verwendet.

Strategieprinzip

  1. Mit dem ATR berechnen Sie die Größe der Kiste, bauen Sie einen Ripple-Kanal und bestimmen Sie die Richtung der Preisentwicklung.
  2. Der CHOP-Indikator, der den Markt für den Handel geeignet macht, kombiniert den Höchst- und Tiefpreis mit dem ATR. Wenn er sich im Bereich von 38,2 bis 61,8 befindet, bedeutet dies, dass der Markt schwach ist. Andernfalls bedeutet dies, dass der Markt stark schwankt und nicht handelbar ist.
  3. Wenn der CHOP-Indikator von der oberen Bahn von 61.8 nach unten bricht, tritt der Preis in einen Abwärtstrend ein, und wenn der kurzfristige schnelle EMA auch die Führung des Preises zeigt, wird ein Minus gemacht; im Gegensatz dazu, wenn der CHOP von der unteren Bahn von 38.2 nach oben bricht und der kurzfristige EMA den Preis anzieht, wird mehr getan.
  4. Verwenden Sie eine Stop-Stop-Strategie, um zu stoppen oder zu stoppen, wenn der Preis in die Bandbereiche 38.2-61.8 des CHOP zurückkehrt.

Strategische Stärkenanalyse

Die Strategie kombiniert Trendbeurteilung und Volatilitätskontrolle, um sowohl Preistrends zu erfassen als auch Risiken zu kontrollieren und ist eine relativ stabile Trendverfolgung.

  1. Die Verwendung von Ripple-Kanälen, die von ATR erstellt wurden, ermöglicht eine effektive Verfolgung der Preisentwicklung.
  2. Der CHOP-Indikator beurteilt die Schwankungen der Märkte und verhindert Fehlhandlungen bei starken Schwankungen.
  3. In Kombination mit schnellen EMAs, um kurzfristige Trends zu beurteilen und umgekehrte Operationen zu vermeiden.
  4. Die Stop-Loss-Strategie kontrolliert den Einzelschaden.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Bei einem Sturm können die ATR-Kanäle und die CHOP-Anzeige ein falsches Signal erzeugen. Die Parameter können entsprechend angepasst werden, um das falsche Signal zu beseitigen.
  2. Ein einziges Portfolio von technischen Indikatoren kann Verluste nicht vollständig vermeiden und erfordert eine künstliche Intervention, um große Trends zu bestimmen.
  3. Die Stop-Loss-Position ist zu locker eingestellt, sodass ein einzelner Verlust zu groß sein kann. Die Stop-Loss-Werte sollten entsprechend verkleinert werden.

Richtung der Strategieoptimierung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Hinzufügen von anderen Hilfsindikatoren, um das Signal zu beurteilen, wie z. B. K-Linienform, Verkehrsmenge usw., um die Genauigkeit des Signals zu verbessern.
  2. Optimierung der Parameter von ATR und CHOP, um die Preisschwankungen besser zu erfassen.
  3. Einstellung der dynamischen Stop-Loss-Position, um den Stop-Loss-Raum zu erweitern und den Stop-Loss schneller zu erleichtern.
  4. Nach der Beurteilung des Trends auf der großen Ebene wird die Stop-Loss-Spanne entsprechend gelockert, um mehr Gewinn in den Trends zu erzielen.

Zusammenfassen

Die Strategie integriert häufig verwendete technische Indikatoren und ist einfach und praktisch. Bei Optimierung der Parameteranpassung können gute Tracking-Effekte erzielt werden. Es ist jedoch erforderlich, die großen Trends manuell zu beurteilen und nicht vollständig zu automatisieren.

Strategiequellcode
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 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/
// © sharatgbhat

//@version=4
strategy("Weis Chop Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 10,max_lines_count = 500, max_labels_count = 500)
maxIdLossPcnt = input(1, "Max Intraday Loss(%)", type=input.float)
// strategy.risk.max_intraday_loss(maxIdLossPcnt, strategy.percent_of_equity)

method = input(defval="ATR", options=["ATR", "Traditional", "Part of Price"], title="Renko Assignment Method")
methodvalue = input(defval=14.0, type=input.float, minval=0, title="Value")
pricesource = input(defval="Close", options=["Close", "Open / Close", "High / Low"], title="Price Source")
useClose = pricesource == "Close"
useOpenClose = pricesource == "Open / Close" or useClose
useTrueRange = input(defval="Auto", options=["Always", "Auto", "Never"], title="Use True Range instead of Volume")
isOscillating = input(defval=false, type=input.bool, title="Oscillating")
normalize = input(defval=false, type=input.bool, title="Normalize")
vol = useTrueRange == "Always" or useTrueRange == "Auto" and na(volume) ? tr : volume
op = useClose ? close : open
hi = useOpenClose ? close >= op ? close : op : high
lo = useOpenClose ? close <= op ? close : op : low

if method == "ATR"
    methodvalue := atr(round(methodvalue))
if method == "Part of Price"
    methodvalue := close / methodvalue

currclose = float(na)
prevclose = nz(currclose[1])
prevhigh = prevclose + methodvalue
prevlow = prevclose - methodvalue
currclose := hi > prevhigh ? hi : lo < prevlow ? lo : prevclose

direction = int(na)
direction := currclose > prevclose ? 1 : currclose < prevclose ? -1 : nz(direction[1])
directionHasChanged = change(direction) != 0
directionIsUp = direction > 0
directionIsDown = direction < 0

barcount = 1
barcount := not directionHasChanged and normalize ? barcount[1] + barcount : barcount
vol := not directionHasChanged ? vol[1] + vol : vol
res = barcount > 1 ? vol / barcount : vol

plot(isOscillating and directionIsDown ? -res : res, style=plot.style_columns, color=directionIsUp ? color.green : color.red, transp=75, linewidth=3, title="Wave Volume")

length = input(14, minval=1)
ci = 100 * log10(sum(atr(1), length) / (highest(length) - lowest(length))) / log10(length)
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

MomentumBull = close>ema(close,8)
MomentumBear = close<ema(close,8)
Tradecon = crossunder(ci,61.8)

if (MomentumBull and directionIsUp and Tradecon)
	strategy.entry("Buy", strategy.long)
if (MomentumBear and directionIsDown and Tradecon )
    strategy.entry("Sell", strategy.short)
    strategy.exit("exit","Buy",when=directionIsDown,qty_percent=100,profit=20,loss=10)
    strategy.exit("exit","Sell",when=directionIsUp,qty_percent=100,profit=20,loss=10)