ADX Filter Chande Kroll Stop Loss Trend nach der Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-06 14:52:27
Tags:

img

Übersicht

Diese Strategie kombiniert den Chande Kroll Stop-Loss-Indikator und den Average Directional Movement Index (ADX) Indikator, um eine relativ einfache Trend-Folge-Strategie umzusetzen.

Strategie Logik

Die Strategie berechnet zunächst die Long-Stop-Long- und Short-Stop-Short-Linien des Chande Kroll-Stop-Loss. Die Long-Line wird auf der Grundlage des höchsten Preises in den letzten p-Perioden berechnet. Die Short-Line wird auf der Grundlage des niedrigsten Preises in den letzten p-Perioden berechnet. Der höchste Punkt der Long- und Short-Linien in den letzten q-Perioden wird dann als aktuelle Long- und Short-Stop-Loss-Linien verwendet. Dies filtert kurzfristige Preisschwankungen aus und löst nur den Stop-Loss an Trendumkehrpunkten aus.

Wenn der Schlusskurs über die kurze Linie stop_short überschreitet, wird ein Long-Signal generiert.

Darüber hinaus wird der ADX-Indikator verwendet, um die Stärke des Trends zu beurteilen. Nur wenn der ADX größer als die Schwelle ist, löst das Stop-Loss-Signal den Eintritt aus. Dies filtert bei der Konsolidierung nicht-direktionale Whipsaw aus.

Vorteile

Die Strategie kombiniert die Vorteile von Trendindikatoren und Stop-Loss-Indikatoren. Sie kann Trendumkehrungen rechtzeitig erfassen und gleichzeitig Whipsaws in nicht-direktionalen Märkten vermeiden. Die Optimierung der Chande Kroll-Stop-Loss-Parameter kann das Filtern und den Stop-Loss nur an Trendumkehrpunkten gewährleisten. Der ADX-Indikator gewährleistet den Einstieg nur, wenn der Trend signifikant ist und Stopp-Loss-Whipsaws während der Marktkonsolidierung vermeiden.

Risiken

Wenn der ADX-Schwellenwert zu hoch gesetzt wird, können Einstiegsmöglichkeiten zu Beginn der Trends verpasst werden, wenn die ADX-Werte noch niedrig sind.

Ein zu nahe Stop-Loss-Punkt kann auch zu häufiger Eröffnung und Schließung von Strategiepositionen führen. Dies erhöht die Handels- und Rutschkosten. Stop-Loss-Punkte müssen vernünftigerweise eingestellt werden, um etwas Raum für Trends zu schaffen.

Optimierung

Es ist wichtig zu berücksichtigen, dass Stop-Loss-Signale nur dann ausgelöst werden, wenn der ADX einen Schwellenwert überschreitet. Dies kann die Zuverlässigkeit des Eintrittszeitpunkts verbessern.

Stop-Loss-Linien können auch dynamisch auf Basis von ATR angepasst werden, so dass breitere Stops möglich sind, wenn die Marktvolatilität steigt, um übermäßige Empfindlichkeit zu vermeiden.

Zusammenfassung

Die Strategie integriert die Stärken von Chande Kroll Stop-Loss und ADX-Indikatoren, um eine relativ einfache und praktische Trendfolgestrategie aufzubauen. Durch Parameteroptimierung können die Stabilität und Rentabilität der Strategie weiter verbessert werden.


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

//@version=5
strategy(title = "Chande Kroll Stop", overlay=true)
p = input.int(10, minval=1)
x = input.int(1, minval=1)
q = input.int(9, minval=1)
first_high_stop = ta.highest(high, p) - x * ta.atr(p)
first_low_stop = ta.lowest(low, p) + x * ta.atr(p)
stop_short = ta.highest(first_high_stop, q)
stop_long = ta.lowest(first_low_stop, q)
plot(stop_long, color=color.blue)
plot(stop_short, color=color.orange)

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
ADX_sig = input.int(20, title="minimum ADX threshold for signal")
dirmov(len) =>
	up = ta.change(high)
	down = -ta.change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
	minus = fixnan(100 * ta.rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
sig = adx(dilen, adxlen)


if ta.crossunder(close, stop_long) and sig>ADX_sig
    strategy.entry("long", strategy.long)
if ta.crossover(close, stop_short) and sig>ADX_sig
    strategy.entry("short", strategy.short)

Mehr