ADX Smart Trend Following-Strategie


Erstellungsdatum: 2023-11-28 14:04:00 zuletzt geändert: 2023-11-28 14:04:00
Kopie: 0 Klicks: 884
1
konzentrieren Sie sich auf
1617
Anhänger

ADX Smart Trend Following-Strategie

Überblick

Die ADX-Smart-Trend-Tracking-Strategie nutzt den durchschnittlichen Trendindex (ADX) zur Beurteilung der Trendstärke, um Trendfang in schwachen Trends durchzuführen und bei starken Trends zu profitieren. Die Strategie, die die Trendstärke beurteilt und gleichzeitig mit einem Preisbruch ein Handelssignal erzeugt, gehört zu den Trend-Tracking-Strategien.

Strategieprinzip

Die Strategie basiert hauptsächlich auf dem durchschnittlichen Trendindex (ADX), um die aktuelle Trendstärke zu beurteilen. Der ADX zeigt die Trendstärke an, indem er den Durchschnitt des DIRECTIONAL INDICATORs für die Preisschwankungen innerhalb eines bestimmten Zeitraums berechnet. Wenn der ADX-Wert unter der eingestellten Schwelle liegt, werden wir davon ausgegangen, dass die Situation sich ausrichtet.

Konkret berechnet die Strategie zunächst den ADX-Wert von 14 Zyklen, der unter 18 als schwach angesehen wird. Dann berechnet sie den Rahmen für den Höchst- und Tiefpreis der letzten 20 K-Linien. Wenn der Preis diesen Rahmen durchbricht, erzeugt er ein Kauf- und Verkaufsignal.

Die Strategie kombiniert die Trendstärke und die Signalbrechung, um die Trendstärke zu erfassen und zu sammeln, um den häufigen Handel in unordentlichen Situationen zu vermeiden. Wenn ein starker Trend auftritt, ist der Stop-Range größer und kann mehr Gewinn erzielt werden.

Strategische Vorteile

  1. In Kombination mit Trendbeurteilungen kann es vermieden werden, häufig in unordentlichen Situationen zu handeln.
  2. Durch das Durchbrechen des Rahmens wurde ein Filter hinzugefügt, um das Einschalten bei Erschütterungen zu vermeiden.
  3. In den USA gibt es eine Reihe von Anwendungen, die es ermöglichen, sich in Trends zu stoppen.
  4. ADX-Parameter, Quadratparameter, Stop-loss-Stop-Faktor usw. können für verschiedene Sorten angepasst werden.

Strategisches Risiko

  1. Eine falsche Einstellung der ADX-Parameter kann zu Trends oder Fehleinschätzungen führen.
  2. Ein zu großer oder ein zu kleiner Rahmen kann die Wirkung beeinträchtigen.
  3. Ein falscher Stoppfaktor kann zu wenig oder zu früh zum Stoppen führen.

Es kann optimiert werden, indem die ADX-Parameter, die Quadratur-Parameter, die Stop-Loss-Rückzahlungskoeffizienten usw. angepasst werden, um sie besser für verschiedene Sorten und Umgebungen geeignet zu machen. Gleichzeitig ist eine strenge Geldverwaltung wichtig, um die Einzelschadenquote zu kontrollieren und große Einzelschaden zu vermeiden.

Richtung der Strategieoptimierung

  1. Die ADX-Parameter können verschiedene Zyklus-Effekte testen.
  2. Die Quadratparameter können mit unterschiedlichen Längen getestet werden, um die optimale Größe des Bereichs zu bestimmen.
  3. Der Stop-Loss-Stopp-Faktor kann leicht angepasst werden, um das Risiko-Gewinn-Verhältnis zu optimieren.
  4. Die Einseitigkeit von Transaktionen, bei denen nur über oder nur leer gehandelt wird, lässt sich testen.
  5. Es können andere Indikatoren kombiniert werden, wie z. B. die Zunahme der Energieeffizienz.

Zusammenfassen

Die ADX-Smart-Trend-Tracking-Strategie ist insgesamt eine eher stabile Trend-Strategie. Sie kombiniert gleichzeitig die Beurteilung der Trendstärke und die Signalisierung eines Preisbruchs und vermeidet zu einem gewissen Grad das Problem der Verfolgung von Höhen und Tiefen in der üblichen Trend-Tracking-Strategie. Durch die Optimierung der Parameter und die strenge Verwaltung der Gelder kann die Strategie stabil gewinnbringend sein.

Strategiequellcode
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Developer: Andrew Palladino. 
//Creator: Rob Booker.
//Date: 9/29/2017
//@version=5
//Date: 08/10/2022
//Updated to V5 from V1, default cash settings added and indicators made more easily visible by:
// @ Powerscooter

strategy("Rob Booker - ADX Breakout", shorttitle="ADX Breakout V5", overlay=true, default_qty_type = strategy.cash, default_qty_value = 100000, initial_capital = 100000)

adxSmoothPeriod = input(14, title="ADX Smoothing Period", group = "ADX Settings")
adxPeriod = input(14, title="ADX Period", group = "ADX Settings")
adxLowerLevel = input(18, title="ADX Lower Level", group = "ADX Settings")
boxLookBack = input(20, title="BreakoutBox Lookback Period", group = "BreakoutBox")
profitTargetMultiple = input(1.0, title="Profit Target Box Width Multiple", group = "Take Profit and Stop Loss")
stopLossMultiple = input(0.5, title="Stop Loss Box Width Multiple", group = "Take Profit and Stop Loss")
enableDirection = input(0, title="Both(0), Long(1), Short(-1)", group = "Trade Direction")


// When the ADX drops below threshold limit, then we consider the pair in consolidation. 
// Set Box around highs and lows of the last 20 candles. with upper and lower boundaries. 
// When price breaks outside of box, a trade is taken. (on close or on touch?)
// Stop is placed, default 50%, of the size of the box. So if box is 200 pips, stop is at 100 pips. 
// Profit target is 100% of the size of the box. Default. User can set a profit target of 0.5, 1 full size, 2 or 3. 


dirmov(len) =>
	up = ta.change(high)
	down = -ta.change(low)
	truerange = ta.rma(ta.tr, len)
	plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
	minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, 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)

adxHigh(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	plus
	
adxLow(dilen, adxlen) => 
	[plus, minus] = dirmov(dilen)
	minus
	
sig = adx(adxSmoothPeriod, adxPeriod)
//sigHigh = adxHigh(dilen, adxlen)
//sigLow = adxLow(dilen, adxlen)

isADXLow = sig < adxLowerLevel

//boxUpperLevel = ta.highest(high, boxLookBack)[1]
//boxLowerLevel = ta.lowest(low, boxLookBack)[1]

var float boxUpperLevelCarry = 0
var float boxLowerLevelCarry = 0

boxUpperLevel = strategy.position_size == 0 ? ta.highest(high, boxLookBack)[1] : boxUpperLevelCarry
boxUpperLevelCarry := boxUpperLevel
boxLowerLevel = strategy.position_size == 0 ? ta.lowest(low, boxLookBack)[1] : boxLowerLevelCarry
boxLowerLevelCarry := boxLowerLevel

boxWidth = boxUpperLevel - boxLowerLevel

profitTarget = strategy.position_size > 0  ? strategy.position_avg_price + profitTargetMultiple*boxWidth : strategy.position_size < 0 ?  strategy.position_avg_price - profitTargetMultiple*boxWidth : na
stopLoss = strategy.position_size > 0 ? strategy.position_avg_price - stopLossMultiple*boxWidth : strategy.position_size < 0 ? strategy.position_avg_price + stopLossMultiple*boxWidth : na

plot(strategy.position_size == 0 ? boxUpperLevel : na, color=color.white, style = plot.style_linebr)
plot(strategy.position_size == 0 ? boxLowerLevel : na, color=color.white, style = plot.style_linebr)


bgcolor(isADXLow ? color.purple : na, transp=72, title = "ADX limit")
plot(stopLoss, color=color.red, linewidth=2, style = plot.style_linebr, title="StopLossLine")
plot(profitTarget, color=color.blue, linewidth=2, style = plot.style_linebr, title="ProfitTargetLine")

isBuyValid = strategy.position_size == 0 and ta.cross(close, boxUpperLevel) and isADXLow

//Long Entry Condition
strategy.exit("close_long", from_entry="open_long", limit = profitTarget, stop = stopLoss)
if isBuyValid and strategy.opentrades == 0 and (enableDirection == -1 or enableDirection == 0)
    strategy.entry("open_long", strategy.long)

isSellValid = strategy.position_size == 0 and ta.cross(close, boxLowerLevel) and isADXLow

//Short Entry condition
strategy.exit(id="close_short", from_entry="open_short", limit = profitTarget, stop = stopLoss)
if isSellValid and strategy.opentrades == 0 and (enableDirection == 1 or enableDirection == 0)
    strategy.entry("open_short", strategy.short)