Überlagerung von Trendsignalen

Schriftsteller:ChaoZhang, Datum: 2024-02-18 10:00
Tags:

img

Übersicht

Diese Strategie erzeugt Handelssignale durch Berechnung der Richtungsbewegungsindizes (DMI) DI+ und DI- zusammen mit dem Durchschnittlichen Richtungsindex (ADX) und dem Exponential Moving Average (EMA). Es löst ein langes Signal aus, wenn DI+ über DI- und ADX über 20 liegt. Ein kurzes Signal wird ausgelöst, wenn DI- unter DI+ und ADX über 25 liegt.

Strategie Logik

  1. Berechnung von DI+, DI-, ADX

    • Verwenden Sie ta.dmi() zur Berechnung von DI+, DI-, ADX
    • DI+/DI- misst die Kursbewegung in Richtung
    • ADX misst die Stärke der Preisbewegung
  2. Berechnen Sie den exponentiellen gleitenden Durchschnitt

    • Verwenden Sie die benutzerdefinierte Funktion my_ema() zur Berechnung der EMA
    • EMA glättet die Preisdaten aus
  3. Erstellen von Handelssignalen

    • Langes Signal: DI+ kreuzt über DI- und ADX > 20 und schließt > EMA
      • Zeigt aufwärts und erhöhte Volatilität an
    • Kurzsignal: DI- unter DI+ und ADX > 25 und nahe < EMA
      • Zeigt Abwärtstrend und hohe Volatilität an
  4. Stop-Loss-Einstellung

    • Lange Stoppverluste: DI- Kreuzungen über DI+ und ADX > 30
      • Zeigt eine Trendumkehr an
    • Kurzer Stoppverlust: DI+ unter DI- und ADX > 30 kreuzt
      • Zeigt eine Trendumkehr an

Zusammenfassend lässt sich sagen, dass diese Strategie Dynamik- und Trendanalyseindikatoren kombiniert, um bei starken Preistrends zu handeln, wobei Stop-Losses verwendet werden, um Verluste zu begrenzen.

Analyse der Vorteile

  1. Dual DI vermeidet falsche Signale
    • Einziger DI kann falsche Signale geben, doppelter DI sorgt für einen Trend
  2. ADX-Schwellenwert erfordert eine erhöhte Volatilität
    • Nur mit hohen Volatilitätsbewegungen gehandelt,
  3. EMA ergänzt DI
    • EMA identifiziert mittelfristige und langfristige Trends
  4. Striktes Stop-Loss
    • Verluste schnell reduzieren

Risikoanalyse

  1. Häufiger Stop-Loss
    • Flüchtige Schwankungen können zu häufigen Stopps führen
  2. Abhängigkeit von Parametern
    • Es müssen optimale DI- und ADX-Parameter gefunden werden
  3. Niedrige Handelsfrequenz
    • Strenge Regeln verringern den Handel

Kann optimieren, indem er Stoppverlust erweitert, Parameter einstellt, Filter hinzufügt, um die Frequenz zu erhöhen.

Optimierungsmöglichkeiten

  1. Optimierung der Parameter
    • Optimierung der DI- und ADX-Parameter
  2. Filter hinzufügen
    • Volumen, Divergenz usw.
  3. Vergrößerung des Stop-Loss
    • Zur Verringerung der Häufigkeit lassen Sie die Haltestellen entspannen.

Schlussfolgerung

Diese Strategie kombiniert Dynamik- und Trendanalyseindikatoren, um starke Trends zu handeln, mit strengen Stops, um das Risiko zu kontrollieren.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



Mehr