Strategie für einen doppelten Trendbruch

Schriftsteller:ChaoZhang, Datum: 2024-02-19 11:52:40
Tags:

img

Übersicht

Die Dual Trend Breakout Strategie integriert mehrere technische Indikatoren, einschließlich Trendlinien, gleitenden Durchschnittsüberschreitungen und Preiskanal-Breakouts, um potenzielle Wendepunkte auf dem Markt zu identifizieren.

Strategie Logik

Trendlinien

Die Strategie verwendet zuerst Pivot-Hochs und Tiefs, um bullische und bärische Trends zu trennen. Wenn der Preis die Trendlinie bricht, signalisiert er eine mögliche Trendwende. Die Steigung wird mit der ATR-Methode berechnet, um mit den tatsächlichen Schwankungen Schritt zu halten.

Kreuzung des gleitenden Durchschnitts

Die Strategie verwendet einen 5-tägigen kurzfristigen gleitenden Durchschnitt und einen 34-tägigen langfristigen gleitenden Durchschnitt für den schnellen und langsamen Crossover-Handel.

Preiskanal

Ein 5-Tage-Preiskanale ist auch in der Strategie konfiguriert. Ein Bruch über dem oberen Band löst einen langen Eintritt aus und ein Bruch unter dem unteren Band löst einen kurzen Eintritt aus, um kurzfristige Preisschwankungen zu erfassen. Es arbeitet mit dem MA-Crossover, um die Zuverlässigkeit von Ausbruchssignalen zu bestimmen.

Die drei Arten technischer Indikatoren werden in eine Strategie integriert, um einen robusten Doppelbestätigungsmechanismus zu schaffen und falsche Trades zu vermeiden.

Vorteile

  1. Integriert mehrere Indikatoren für relativ zuverlässige Signale und reduziert Verluste durch falsche Ausbrüche.

  2. Schnelle MA und Preiskanal erfassen kurzfristige Trendveränderungen schnell.

  3. Saubere Codestruktur mit verstellbaren Parametern für die Optimierung über verschiedene Produkte und Zeitrahmen hinweg.

  4. Kombiniert Trendverfolgung und Breakout-Signale für die Rentabilität bei starken Trends und Vermeidung von Whipsaws in Bereichsgebundenen Märkten

Risiken

  1. Es kann einige Risiken von falschen Ausbrüchen geben, insbesondere bei Szenarien mit Bandbreite, die zu Verlusten führen.

  2. Die Verzögerungen bei den MA-Kreuzungen bergen das Risiko, dass nach einer wesentlichen Trendwende Höhen oder Tiefen gekauft oder verkauft werden.

  3. Mehrere integrierte Indikatoren erfordern starkes Backtesting und Berechnungen für die Parameteranpassung.

  • Für die Validierung von Ausbrüchen können Volumenindikatoren hinzugefügt werden, z. B. die Erweiterung des Volumens bei Ausbrüchen erfordern.

  • Überverkaufte/überkaufte Indikatoren verhindern Szenarien, in denen der Kauf/Verkauf erschöpft ist.

  • Stop-Loss, um Verluste bei falschen Trades zu kontrollieren.

  • Maschinelles Lernen, um durch massive historische Daten schnell optimale Parameter zu finden.

Erweiterung

  1. Zusätzliche Volumen- oder RSI-Filter zur Bestätigung zuverlässiger Trendveränderungen, wobei strenge Filter festgelegt werden, um Verluste durch falsche Ausbrüche zu vermeiden.

  2. Abstimmen der MA- und Kanalparameter für verschiedene Produkte auf ihre Eigenschaften.

  3. Hinzufügen von Stop-Loss-Mechanismen über Trailing-Stop-Loss, Stop-Limit-Orders, um Verluste pro Handel zu begrenzen.

  4. Anpassungsfähige Ansätze einführen, um weniger häufig während von Bandbreitenmärkten und häufiger während starker etablierter Trends zu handeln.

  5. Trainieren Sie Deep-Learning-Modelle, um Kauf-/Verkaufssignale zu generieren, anstatt nur technische Indikatoren zu verwenden, und nutzen Sie neuronale Netzwerke Mustererkennungsfähigkeiten, um prädiktive Strategien zu finden.

Schlussfolgerung

Diese Strategie bildet durch die Kombination mehrerer beliebter technischer Indikatoren ein Dual-Confirmation-System, das in der Lage ist, Trendänderungen mit relativ stabilen Backtest-Ergebnissen effektiv zu erfassen.


/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
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/
// © FinanceUpPvtLtd

//@version=5
strategy("FINANCE UP FREE STRATEGY (+919665229664)", overlay=true)

// Script 01 - Trendlines
length_tl = input.int(14, 'Swing Detection Lookback')
mult_tl = input.float(1., 'Slope', minval=0, step=.1)
calcMethod_tl = input.string('Atr', 'Slope Calculation Method', options=['Atr', 'Stdev', 'Linreg'])
backpaint_tl = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
upCss_tl = input(color.teal, 'Up Trendline Color', group='Style')
dnCss_tl = input(color.red, 'Down Trendline Color', group='Style')
showExt_tl = input(true, 'Show Extended Lines')

var upper_tl = 0.
var lower_tl = 0.
var slope_ph_tl = 0.
var slope_pl_tl = 0.
var offset_tl = backpaint_tl ? length_tl : 0
n_tl = bar_index
src_tl = close
ph_tl = ta.pivothigh(length_tl, length_tl)
pl_tl = ta.pivotlow(length_tl, length_tl)
slope_tl = switch calcMethod_tl
    'Atr'    => ta.atr(length_tl) / length_tl * mult_tl
    'Stdev'  => ta.stdev(src_tl, length_tl) / length_tl * mult_tl
    'Linreg' => math.abs(ta.sma(src_tl * n_tl, length_tl) - ta.sma(src_tl, length_tl) * ta.sma(n_tl, length_tl)) / ta.variance(n_tl, length_tl) / 2 * mult_tl
slope_ph_tl := ph_tl ? slope_tl : slope_ph_tl
slope_pl_tl := pl_tl ? slope_tl : slope_pl_tl
upper_tl := ph_tl ? ph_tl : upper_tl - slope_ph_tl
lower_tl := pl_tl ? pl_tl : lower_tl + slope_pl_tl
var upos_tl = 0
var dnos_tl = 0
upos_tl := ph_tl ? 0 : close > upper_tl - slope_ph_tl * length_tl ? 1 : upos_tl
dnos_tl := pl_tl ? 0 : close < lower_tl + slope_pl_tl * length_tl ? 1 : dnos_tl

// var uptl_tl = line.new(na, na, na, na, color=upCss_tl, style=line.style_dashed, extend=extend.right)
// var dntl_tl = line.new(na, na, na, na, color=dnCss_tl, style=line.style_dashed, extend=extend.right)
// if ph_tl and showExt_tl
//     uptl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? ph_tl : upper_tl - slope_ph_tl * length_tl)
//     uptl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? ph_tl - slope_tl : upper_tl - slope_ph_tl * (length_tl + 1))
// if pl_tl and showExt_tl
//     dntl_tl.set_xy1(n_tl - offset_tl, backpaint_tl ? pl_tl : lower_tl + slope_pl_tl * length_tl)
//     dntl_tl.set_xy2(n_tl - offset_tl + 1, backpaint_tl ? pl_tl + slope_tl : lower_tl + slope_pl_tl * (length_tl + 1))

plot(backpaint_tl ? upper_tl : upper_tl - slope_ph_tl * length_tl, 'Upper', color=ph_tl ? na : upCss_tl, offset=-offset_tl)
plot(backpaint_tl ? lower_tl : lower_tl + slope_pl_tl * length_tl, 'Lower', color=pl_tl ? na : dnCss_tl, offset=-offset_tl)

plotshape(upos_tl > upos_tl[1] ? low : na, "Upper Break", shape.labelup, location.absolute, upCss_tl, text="B", textcolor=color.white, size=size.tiny)
plotshape(dnos_tl > dnos_tl[1] ? high : na, "Lower Break", shape.labeldown, location.absolute, dnCss_tl, text="B", textcolor=color.white, size=size.tiny)

alertcondition(upos_tl > upos_tl[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos_tl > dnos_tl[1], 'Downward Breakout', 'Price broke the up-trendline downward')

// Script 02 - Channel Breakout
length_channel = input.int(title="Channel Length", minval=1, maxval=1000, defval=5)
upBound_channel = ta.highest(high, length_channel)
downBound_channel = ta.lowest(low, length_channel)
if (not na(close[length_channel]))
    strategy.entry("LE-LE", strategy.long, stop=upBound_channel + syminfo.mintick, comment="LE-LE")
strategy.entry("BECH-DE", strategy.short, stop=downBound_channel - syminfo.mintick, comment="BECH-DE")

// Script 03 - MA Cross
shortlen_ma = input.int(5, "Short MA Length", minval=1)
longlen_ma = input.int(34, "Long MA Length", minval=1)
short_ma = ta.sma(close, shortlen_ma)
long_ma = ta.sma(close, longlen_ma)
plot(short_ma, color=#FF6D00, title="Short MA")
plot(long_ma, color=#43A047, title="Long MA")
plot(ta.cross(short_ma, long_ma) ? short_ma : na, color=#2962FF, style=plot.style_cross, linewidth=4, title="Cross")


Mehr