Basierend auf der Dual-Trend-Breakout-Strategie


Erstellungsdatum: 2024-02-19 11:52:40 zuletzt geändert: 2024-02-19 11:52:40
Kopie: 0 Klicks: 711
1
konzentrieren Sie sich auf
1617
Anhänger

Basierend auf der Dual-Trend-Breakout-Strategie

Überblick

Die Doppeltrend-Breakout-Strategie verwendet mehrere technische Indikatoren, hauptsächlich Trendlinien, Mittellinien-Kreuzungen und Preiskanal-Breakouts, um Markttrendänderungen zu identifizieren und Trendwende-Gelegenheiten zu erfassen. Die Strategie kombiniert Trend-Tracking und Breakout-Signale und ist relativ robust bei Ein- und Ausstieg, besteht jedoch auch ein gewisses Risiko für einen falschen Breakout.

Strategieprinzip

Trendlinie

Die Strategie unterscheidet zunächst den Pivotal High und den Pivotal Low, um einen hohen Trend abzugrenzen. Wenn der Preis die Trendlinie durchbricht, wird eine potenzielle Trendwende angezeigt. Die Schräglage wird mit der ATR-Methode berechnet, um die tatsächlichen Schwankungen näher zu bringen.

Gleichschnitt

Die Strategie verwendet die kurze 5-Tage-Linie und die lange 34-Tage-Linie, um eine schnelle Durchschnittslinie-Kreuzstrategie zu erstellen. Die kurze Durchschnittslinie überschreitet die lange Durchschnittslinie als Kaufsignal, die untere als Verkaufsignal. Die schnelle Durchschnittslinie wird verwendet, um die kurzfristigen Trends zu erfassen, und die langsame Durchschnittslinie verfolgt die langfristigen Trends.

Preiskanal

Die Strategie setzt auch einen 5-Tage-Preiskanal ein, um die Auf- und die Aus-Breitbahnen zu durchbrechen und die kurzfristigen Preiserhebungen zu erfassen. Die Zuverlässigkeit des Durchbruchs wird in Kombination mit der schnellen und langsamen Mittellinie bestimmt.

Die Kombination der drei technischen Kennzeichen wird in der Strategie verwendet, um eine solide Doppel-Urteils-Mechanismus zu bilden und falsche Geschäfte zu vermeiden.

Strategische Vorteile

  1. Die Integration verschiedener technischer Indikatoren ergab, dass die Signale stabiler waren und die Schäden durch falsche Durchbrüche verringert wurden.

  2. Schnelle Durchschnittslinien und Preiskanäle sind in der Lage, kurzfristige Preistrendänderungen zeitnah zu erfassen. Langsame Durchschnittslinien und Trendlinien verfolgen langfristige Trends und sind relativ stabil in und aus dem Markt.

  3. Die Code-Struktur ist klar, die Indikatorparameter sind anpassbar und können für verschiedene Perioden und Sorten optimiert werden.

  4. In Kombination mit Trendbeurteilung und Breakout-Signalen ist eine aggressivere Marktentwicklung in einem Trendbullmarkt für den Gewinn geeignet. In einer Spannungsbereinigung wird die Häufigkeit des Breakout-Signalhandels reduziert, was dazu beiträgt, große Erschütterungen zu vermeiden.

Strategisches Risiko

  1. Es besteht eine gewisse Gefahr eines False Breakthroughs, insbesondere bei einem Szenario, in dem die Preisschwankungen aufgelöst werden, was zu Verlusten führen kann.

  2. Ein Durchschnittskreuz ist ein Rückstandssignal, bei dem ein großer Trendwechsel das Risiko eines Aufkaufs oder Verlusts von Auf- oder Verkäufen beinhaltet.

  3. Die Integration von mehreren technischen Kennzahlen erfordert eine große Anzahl von Tests und Berechnungen bei der Optimierung der Parameter und ist zeitaufwändig.

  • Für die Gefahr eines falschen Durchbruchs kann ein Filter mit einem Handelsvolumen-Indikator hinzugefügt werden, z. B. um den Handelsvolumen zu erhöhen, wenn ein Durchbruch erforderlich ist, oder um einen K-Linie-Abschlusskurs zu ermitteln, der den vorherigen Hoch oder vorherigen Tief nicht durchbrochen hat.

  • Für die Gefahr von Überkauf kann man die Filterbedingungen für Überkauf-Überverkauf-Indikatoren einstellen, z. B. den RSI-Indikator, um einen Überkauf zu vermeiden. Oder eine Stop-Line, um den Stop-Loss zu beschleunigen.

  • Bei Problemen mit Parameteroptimierung kann eine Methode des maschinellen Lernens eingesetzt werden, um Optimierungen zu finden und die optimale Kombination von Parametern in einer großen Menge an historischen Daten zu finden.

Strategieoptimierung

  1. Die Zuverlässigkeit des Trends wird anhand der Überkauf- und Überverkaufskennzahlen beurteilt. Strenge Filterbedingungen werden festgelegt, um zu vermeiden, dass falsche Durchbrüche zu Verlusten führen.

  2. Für verschiedene Handelsarten werden die Einstellungen der Mittellinienparameter und der Preiskanalparameter angepasst, um sie den Eigenschaften der Sorte anzupassen.

  3. Erhöhung der Stop-Loss-Strategie, Einzelschäden durch bewegliche Stop-Loss-Strategie, Einzelschaden-Strategie, Einzelschaden-Strategie usw.

  4. Anpassungsmethoden, die die Häufigkeit der Positionseröffnung verringern, wenn der Markt in die Phase der Erschütterung eintritt; erhöhen Sie die Häufigkeit der Transaktionen, wenn ein Trend sichtbar ist.

  5. Modelle werden mit Deep Learning-Methoden trainiert, um Kauf- und Verkaufspunkte zu ermitteln, traditionelle technische Indikatoren zu ergänzen oder zu ersetzen, und die Fähigkeit zur Verallgemeinerung von Deep Learning wird genutzt, um effektivere Handelsstrategien zu finden.

Zusammenfassen

Diese Strategie integriert mehrere gängige technische Indikatoren zu einem doppelten Urteilssystem, um Trends zu identifizieren und eine gute Stabilität bei der Rückmessung zu zeigen. Es sollte jedoch auch auf bestimmte Risiken für falsche Durchbrüche geachtet werden, die durch die Hinzufügung von Filterbedingungen, Stop-Loss-Strategien, Parameter-Anpassung und die Verwendung von Machine-Learning-Methoden optimiert werden können, um die reale Leistung der Strategie weiter zu verbessern.

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