Trendverfolgung und kurzfristige Handelsstrategie auf Basis des ADX-Indikators

Schriftsteller:ChaoZhang, Datum: 2024-01-22 17:10:55
Tags:

img

Übersicht

Diese Strategie kombiniert den Super Trend, die Pivot Points und den Average True Range (ATR), um eine dynamische Stop-Loss-Linie und den Average Directional Movement Index (ADX) zu bilden, um Trends zu beurteilen und zu verfolgen.

Grundsätze

Der Super Trend in Kombination mit Pivot Points und ATR Stop Loss beurteilt die Richtung des Preisbruchs durch die dynamische Stop Loss-Linie, um die Öffnungsrichtung zu bestimmen.

Die Pivot Points erhalten zunächst die neuesten Support- und Widerstandspunkte und bilden dann einen dynamischen Mittelkurs mit dem arithmetischen Mittel der vorangegangenen zwei Tage. Dann wird ATR berechnet und mit dem ATR-Faktor multipliziert und dann dem dynamischen Mittelkurs hinzugerechnet oder davon abgezogen, um die oberen und unteren Schienen zu erhalten. Wenn der Preis durch die obere Schiene bricht, ist er bullisch. Wenn er durch die untere Schiene bricht, ist er bärisch. Der ADX-Indikator beurteilt die Stärke des Trends und nimmt nur an dem Handel teil, wenn der Trend stark genug ist.

Die Stop-Loss-Linie wird dynamisch nach dem letzten Preis und dem ATR-Wert angepasst, wodurch der Trend sehr gut verfolgt werden kann.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Verwenden Sie den Super Trend-Indikator, um die Richtung des Trendverlaufs zu verfolgen, um durch schwankende Märkte keine Gewinne zu erzielen.

  2. Mit Hilfe des ADX-Indikators können Sie die Stärke des Trends beurteilen und Fehler beim Handel während der Konsolidierung vermeiden.

  3. Die Stop-Loss-Linie wird dynamisch angepasst, um den Gewinn zu maximieren.

  4. Kombinieren Sie RSI, um Überkauf und Überverkauf zu vermeiden.

  5. Im Allgemeinen ist die Einstellung der Strategieparameter angemessen. Die Auswahl von dframe berücksichtigt Kontinuität. Die Einstellung von Take Profit und Stop Loss ist ebenfalls gut.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Die Super Trend- und MA-Indikatoren können widersprüchliche Signale geben.

  2. Der ADX-Indikator ist auf 14 Zyklen eingestellt, was für plötzliche Ereignisse nicht empfindlich genug ist.

  3. Der RSI-Parameter ist auf Standard eingestellt, was möglicherweise nicht dazu führt, Überkauf und Überverkauf zu vermeiden.

  4. Die Auswirkungen plötzlicher Ereignisse, wie z. B. schlechte/gute Nachrichten, wurden nicht berücksichtigt.

Entsprechende Lösungen

  1. Der MA-Zyklus wird an den Super Trend-Indikator angepasst.

  2. Versuchen Sie, den ADX-Zyklus zu verkürzen, um die Empfindlichkeit gegenüber plötzlichen Ereignissen zu erhöhen.

  3. Optimieren Sie die RSI-Parameter, um optimale Werte zu finden.

  4. Hinzufügen eines Nachrichtenfiltermoduls, um wichtige Pressemitteilungen zu vermeiden.

Optimierung

Die Strategie kann auch in folgenden Aspekten optimiert werden:

  1. Fügen Sie ein maschinelles Lernmodell hinzu, um den Trend zu beurteilen, was Handelsentscheidungen intelligenter macht.

  2. Versuchen Sie, alternative emotionale Indikatoren anstelle von ADX einzuführen, um die Stärke des Trends zu beurteilen.

  3. Erhöhen Sie das adaptive Stop-Loss-Modul, um den Stop-Loss dynamischer und genauer zu gestalten.

  4. Extrahieren Sie mehr Funktionen mit Deep Learning-Technologie, um die Gesamtstrategie zu optimieren.

  5. Verwenden Sie fortgeschrittene Sprachen wie Python für die Strategieentwicklung, um die Skalierbarkeit der Strategie zu erhöhen.

Zusammenfassung

Insgesamt ist diese Strategie sehr praktisch. Der Kern besteht darin, die Richtung des Trendlaufs zu verfolgen und teilzunehmen, wenn der Trend stark genug ist. Die Einstellung von Stop-Loss und Take-Profit ist auch sehr gut, um Gewinne zu maximieren und gleichzeitig Verluste zu vermeiden. Natürlich gibt es noch viel Raum für Optimierung. Das Hinzufügen von maschinellem Lernen und Deep-Learning-Technologie wird die Strategie effektiver und erweiterbar machen.


/*backtest
start: 2023-01-15 00:00:00
end: 2024-01-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bendre ADX STrend", overlay = true)

///////////////////////////
// SuperTrend + Pivot Point
//////////////////////////

src =  input(close, title="EMA Source")
PPprd = input(defval = 2, title="Pivot Point Period")
AtrFactor=input(defval = 2, title = "ATR Factor")
AtrPd=input(defval = 21, title = "ATR Period")

StartDate = input(timestamp("1 Dec 2023"), title="Start Date")
EndDate = input(timestamp("12 Jan 2024"), title="End Date")
window()  => true

var float ph = na
var float pl = na
ph := ta.pivothigh(PPprd, PPprd)
pl :=ta.pivotlow(PPprd, PPprd)

float center = na
center := center[1]
// float lastpp = ph ? ph : pl ? pl : 0.0
float lastpp = na(ph) ? na(pl) ? na : pl : ph

if lastpp > 0
    if na(center)
        center := lastpp
    else
        center := (center * 2 + lastpp) / 3

Up = center - (AtrFactor * ta.atr(AtrPd))
Dn = center + (AtrFactor * ta.atr(AtrPd))

var float TUp = na
var float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// Lines
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")

bsignalSSPP = close > Trailingsl
ssignalSSPP = close < Trailingsl


///////
// ADX
//////

lenADX = 14
th = 14
TrueRange = math.max(math.max(high-low, math.abs(high-nz(close[1]))), math.abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? math.max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? math.max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/lenADX) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/lenADX) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/lenADX) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = math.abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = ta.sma(DX, lenADX)


//////
// MA
/////

lenMA = 21
srcMA = input(close, title="Source")
// offsetMA = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
offsetMA = input(0, title="Offset")
outMA = ta.sma(srcMA, lenMA)

//
// RSI
//
length = input( 14 )
overSold = input( 30 )
overBought = input( 65 )
price = close
vrsi = ta.rsi(price, length)

//
// DMI - Direction Movement Index
// 
[diplus1, diminus1, adx] = ta.dmi(14, 14)

// Buy - Sell Entries
buy = bsignalSSPP and outMA < close and ADX > th
sell = ssignalSSPP 


if (buy and vrsi > overBought and adx > 19)
    // .order // Tuned version
    strategy.entry("Buy", strategy.long, when = window())
    // strategy.close("Sell", "close Sell")

if (sell) and (strategy.position_size > 0)
    // strategy.entry("Sell", strategy.short)
    strategy.close("Buy", "Close Buy")

if(sell and vrsi < overSold and adx > 25)
    strategy.entry("Sell", strategy.short, when = window())

if ( ta.crossover( diminus1, diplus1) or ((buy) and (strategy.position_size > 0)) )
    strategy.close("Sell", "close Sell")

// if(sell) and (diminus1 > diplus1) and adx > 23 and adx > adx[1] and (vrsi < overSold)
//     strategy.entry("Sell", strategy.short, when = window())

// if (strategy.position_size > 0 and ta.crossunder(diminus1, adx)) or (strategy.position_size > 0  and (buy))
//     strategy.close("Sell", "close Sell")





Mehr