Die Ressourcen sind geladen. Beförderung...

Bollinger-Momentum-Breakout-Strategie für mehrere Zeitrahmen mit Hull-Bewegungsdurchschnitt

Schriftsteller:ChaoZhang, Datum: 2024-11-29 17:00:00
Tags:VWMAHMABBMTFRSI

img

Übersicht

Diese Strategie ist ein Handelssystem, das auf Multi-Timeframe-Analyse basiert und Bollinger-Bänder, Hull-Beweglichen Durchschnitte und gewichtete Bewegliche Durchschnitte zur Erzeugung von Handelssignalen kombiniert. Die Strategie arbeitet hauptsächlich auf dem 1-Stunden-Zeitrahmen und integriert Marktdaten aus 5-Minuten-, 1-Stunden- und 3-Stunden-Perioden. Sie verwendet mehrere technische Indikatoren, um Handelschancen zu bestätigen und implementiert dynamische Stop-Loss- und Take-Profit-Mechanismen und passt die Positionsgrößen automatisch an, basierend auf dem Kontokapital für eine effektive Risikokontrolle.

Strategieprinzipien

Die Kernlogik basiert auf der Querbestätigung mehrerer technischer Indikatoren. Die Strategie überwacht die Preisbeziehungen mit verschiedenen gleitenden Durchschnitten über mehrere Zeitrahmen, einschließlich 5-minütiger VWMA, 1-stündiger VWMA und 3-stündiger HMA. Lange Signale werden erzeugt, wenn der Preis über die obere Schwelle bricht, während er über allen Zeitrahmenindikatoren liegt; umgekehrt treten kurze Signale auf, wenn der Preis unter die untere Schwelle bricht, während er unter allen Indikatoren liegt. Die Strategie beinhaltet Abweichungsberechnungen zur Festlegung dynamischer Ein- und Ausstiegsschwellen, wodurch die Handelsflexibilität erhöht wird.

Strategische Vorteile

  1. Die Analyse mehrerer Zeitrahmen verringert die Risiken eines falschen Ausbruchs und verbessert die Signalzuverlässigkeit
  2. Dynamische Stop-Loss- und Take-Profit-Einstellungen passen sich unterschiedlichen Marktbedingungen an
  3. Die Positionsgröße auf der Grundlage des Eigenkapitals gewährleistet eine rationelle Kapitalnutzung
  4. Mehrere Ausgangsmekanismen ermöglichen die Anpassungsfähigkeit der Strategie
  5. Graphische Schnittstelle bietet eine klare Handelssignalvisualisierung für die Analyse
  6. Die Integration mehrerer ausgereifter technischer Indikatoren verbessert die Genauigkeit von Handelsentscheidungen

Strategische Risiken

  1. Mehrere Indikatoren können zu verzögerten Handelssignalen führen
  2. Häufige falsche Ausbrüche auf unterschiedlichen Märkten
  3. Festgelegte Stop-Loss- und Take-Profit-Verhältnisse können nicht allen Marktbedingungen entsprechen
  4. Die Datenverarbeitung in mehreren Zeitrahmen kann die Komplexität der Strategie erhöhen
  5. Hohe Verschiebungsrisiken auf volatilen Märkten

Optimierungsrichtlinien

  1. Einführung von Volatilitätsindikatoren für dynamische Stop-Loss- und Take-Profit-Anpassungen
  2. Hinzufügen von Marktbedingungen für die Anpassung von Parametern
  3. Optimierung der Signalfilterung zur Verringerung von Fehleinschlagverlusten
  4. Einbeziehung von Volumenanalysen zur Verbesserung der Zuverlässigkeit des Ausbruchssignals
  5. Entwicklung von Mechanismen zur Optimierung adaptiver Parameter für eine verbesserte Stabilität

Zusammenfassung

Die Strategie baut ein relativ vollständiges Handelssystem durch Multi-Timeframe-Analyse und mehrere technische Indikatoren auf. Ihre Stärken liegen in der Signalzuverlässigkeit und dem effektiven Risikomanagement, obwohl sie mit Signalverzögerung und Parameteroptimierung konfrontiert ist. Durch kontinuierliche Verbesserung und Optimierung zeigt die Strategie das Potenzial, eine stabile Performance unter verschiedenen Marktbedingungen aufrechtzuerhalten.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("1H- 280, 2.7", overlay=true)


// Fetch the indicator values from different timeframes
vwma5 = request.security(syminfo.tickerid, "5", ta.wma(close, 233), lookahead = barmerge.lookahead_off)
vwma_hourly = request.security(syminfo.tickerid, "60", ta.wma(close, 89), lookahead = barmerge.lookahead_off)
hullma155_3h = request.security(syminfo.tickerid, "180", ta.hma(close, 155), lookahead = barmerge.lookahead_off)


// Calculate the deviation value
deviation = close * 0.032


// Initialize the signal variables
var float signalLine = na
var color lineColor = na


// Long Entry Conditions
longCondition_5min = close > vwma5
longCondition_hourly = close > vwma_hourly
longCondition_3h = close > hullma155_3h


// Short Entry Conditions
shortCondition_5min = close < vwma5
shortCondition_hourly = close < vwma_hourly
shortCondition_3h = close < hullma155_3h


// Long Entry
if longCondition_5min and longCondition_hourly and longCondition_3h
    signalLine := close + deviation
    lineColor := color.rgb(0, 255, 0, 1)


// Short Entry
if shortCondition_5min and shortCondition_hourly and shortCondition_3h
    signalLine := close - deviation
    lineColor := color.rgb(255, 0, 0, 1)


// Plotting the connecting line
plot(signalLine, title="Signal Line", color=lineColor, linewidth=1, style=plot.style_line)


// Colorize the signal line
bgcolor(signalLine > close ? color.rgb(0, 255, 0, 99) : color.rgb(255, 0, 0, 99), transp=90)



// Strategy settings
useTPSL = input(true, "Use TP/SL for closing long positions?")
useDownbreakOutbreak = input(false, "Use Downbreak and Outbreak for closing positions?")
useM7FClosing = input(false, "Use M7F Signal for closing positions?")


length1 = input.int(280, minval=1)
src = input(close, title="Source")
mult = input.float(2.7, minval=0.001, maxval=50, title="StdDev")


basis = ta.vwma(src, length1)
dev = mult * ta.stdev(src, length1)
upper = basis + dev
lower = basis - dev


offset = input.int(0, "Offset", minval = -500, maxval = 500)


length2 = input.int(55, minval=1)
src2 = input(close, title="Source")
hullma = ta.wma(2 * ta.wma(src2, length2 / 2) - ta.wma(src2, length2), math.floor(math.sqrt(length2)))


hullmacrosslower = ta.crossover(hullma, lower)
hullmacrossupper = ta.crossunder(hullma, upper)


breakout = ta.crossover(ohlc4, upper)
breakdown = ta.crossunder(ohlc4, upper)
outbreak = ta.crossover(ohlc4, lower)
downbreak = ta.crossunder(ohlc4, lower)


// Calculate position size and leverage
margin_pct = 1
leverage = 1
position_size = strategy.equity * margin_pct
qty = position_size / close / leverage


// Define take profit and stop loss levels
take_profit = 0.14
stop_loss = 0.06


// Opening a long position
if breakout
    strategy.entry("Long", strategy.long, qty, limit=close*(1+take_profit), stop=close*(1-stop_loss))


// Opening a short position
if downbreak
    strategy.entry("Short", strategy.short, qty, limit=close*(1-take_profit), stop=close*(1+stop_loss))


// Closing positions based on chosen method
if useTPSL
    // Using TP/SL for closing long positions
    if strategy.position_size > 0 and breakdown
        strategy.close("Long", comment="Breakdown")
else if useDownbreakOutbreak
    // Using Downbreak and Outbreak for closing positions
    if strategy.position_size > 0 and (breakdown or downbreak)
        strategy.close("Long", comment="Breakdown")
    if strategy.position_size < 0 and (outbreak or downbreak)
        strategy.close("Short", comment="Outbreak")
else if useM7FClosing
    // Using M7F Signal for closing positions
    if strategy.position_size > 0 and (signalLine < close)
        strategy.close("Long", comment="M7F Signal")
    if strategy.position_size < 0 and (signalLine > close)
        strategy.close("Short", comment="M7F Signal")


// Plotting entry signals
plotshape(hullmacrosslower, title="High Bear Volatility", style=shape.arrowup, text="^^^^^", color=color.rgb(75, 202, 79), location=location.belowbar)
plotshape(hullmacrossupper, title="High Bull Volatility", style=shape.arrowdown, text="-----", color=color.rgb(215, 72, 72), location=location.abovebar)
plotshape(breakout ? 1 : na, title="Breakout", style=shape.arrowup, text="", color=color.rgb(75, 202, 79), location=location.belowbar, size=size.tiny)
plotshape(breakdown ? 1 : na, title="Breakdown", style=shape.arrowdown, text="", color=color.rgb(201, 71, 71), location=location.abovebar, size=size.tiny)
plotshape(outbreak ? 1 : na, title="Outbreak", style=shape.arrowup, text="", color=color.rgb(0, 110, 255), location=location.belowbar, size=size.tiny)
plotshape(downbreak ? 1 : na, title="Downbreak", style=shape.arrowdown, text="", color=color.rgb(255, 111, 0), location=location.abovebar, size=size.tiny)


Verwandt

Mehr