Kurzfristige Handelsstrategie basierend auf Trendfolge und ADX-Indikator


Erstellungsdatum: 2024-01-22 17:10:55 zuletzt geändert: 2024-01-22 17:10:55
Kopie: 0 Klicks: 687
1
konzentrieren Sie sich auf
1617
Anhänger

Kurzfristige Handelsstrategie basierend auf Trendfolge und ADX-Indikator

Überblick

Die Strategie kombiniert die dynamische Stop-Line, die durch den Super Trend, die Pivot Points und die durchschnittliche echte Wellenlänge (Average True Range, ATR) gebildet wird, mit dem Average Directional Movement Index (ADX), um Trends zu beurteilen und zu verfolgen. Die Strategie eignet sich für den Kurzstreckenhandel und kann die Trendextension nach der mittleren Auswertung erfassen.

Strategieprinzip

Der Hypertrend-Indikator kombiniert die Pivot-Punkte mit den ATR-Stopps, um zu bestimmen, in welcher Richtung der Preis die dynamische Stop-Line durchbricht. Der ADX-Indikator beurteilt die Trendstärke und gibt nur dann ein Handelssignal ab, wenn der Trend stark genug ist.

Konkret werden die Pivot-Punkte zuerst mit den neuesten Unterstützungswiderständen versehen und dann mit dem arithmetischen Mittelwert der letzten zwei Tage einen dynamischen Mittelwert gebildet. Danach wird der ATR berechnet und mit dem ATR-Faktor multipliziert, der dann mit dem dynamischen Mittelwert addiert und subtrahiert wird.

Die Stop-Line wird dynamisch an den neuesten Preisen und ATR-Werten angepasst und kann Trends sehr gut verfolgen.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Der Übertrend-Indikator kann die Richtung des Trends verfolgen, um zu vermeiden, dass die Gewinne durch die Erschütterung der Märkte gesperrt werden.

  2. Die ADX-Indikatoren helfen dabei, die Trendstärke zu beurteilen, um Fehlhandlungen bei der Bilanzierung zu vermeiden.

  3. Stop-Loss-Linie wird dynamisch angepasst, um die Gewinne maximal zu lockern.

  4. Der RSI ist in Kombination mit dem RSI nicht übertrieben.

  5. Insgesamt ist die Einstellung der Strategieparameter vernünftig, die Kontinuität bei der Auswahl des dframe ist berücksichtigt, und die Stop-Loss-Einstellung ist auch gut.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Die Übertrendindikatoren und die MA-Indikatoren können ein Konfliktsignal auslösen.

  2. Der ADX-Indikator ist auf 14 Perioden festgelegt und ist unzureichend empfindlich für Ereignisse.

  3. Die RSI-Parameter sind als Standard eingestellt und können nicht vollständig vermieden werden.

  4. Die Auswirkungen von Ereignissen wie großer Gewinnschwäche/guter Nachrichten wurden nicht berücksichtigt.

Entsprechende Lösungen:

  1. Anpassung der MA-Periode an die Hypertrend-Indikatoren.

  2. Versuchen Sie, die ADX-Zyklen zu verkürzen, um die Empfindlichkeit für Überraschungen zu erhöhen.

  3. Optimierung des RSI-Parameters und Suche nach optimalen Werten.

  4. Das ist ein Modul, mit dem man sich vor wichtigen Pressemitteilungen schützen kann.

Optimierungsrichtung

Die Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Die Entwicklung von Trends in Machine Learning Modellen, um die Entscheidungsfindung zu verbessern.

  2. Versuchen Sie, alternative ADX-Indikatoren wie Emotions-Indikatoren einzuführen, um die Trendstärke zu beurteilen.

  3. Die Anpassung des Schadensstop-Moduls wurde ergänzt, um den Schadensstop dynamischer und genauer zu gestalten.

  4. Die Techniken des Deep Learning werden genutzt, um weitere Merkmale zu extrahieren und die Gesamtstrategie zu optimieren.

  5. Die Strategieentwicklung erfolgt in einer hochqualifizierten Sprache wie Python, um die Skalierbarkeit der Strategie zu erhöhen.

Zusammenfassen

Die Strategie ist sehr praktisch, da sie die Richtung des Trends verfolgt und sich an Trends beteiligt, wenn sie stark genug sind. Die Stop-Loss- und Stop-Stop-Einstellungen sind gut vorbereitet, um Gewinne zu maximieren und Verluste zu vermeiden. Natürlich gibt es noch viel Optimierungsmöglichkeiten, die durch die Einbeziehung von Machine Learning und Deep Learning-Technologien verbessert werden können.

Strategiequellcode
/*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")