Mehrstufige Ziel- und Trailing-Stop-Loss-Strategie

HEIKIN ASHI HA TARGET ZONE Trailing Stop PYRAMIDING BREAK-EVEN risk management
Erstellungsdatum: 2025-03-31 16:20:21 zuletzt geändert: 2025-03-31 16:20:21
Kopie: 1 Klicks: 309
2
konzentrieren Sie sich auf
319
Anhänger

Mehrstufige Ziel- und Trailing-Stop-Loss-Strategie Mehrstufige Ziel- und Trailing-Stop-Loss-Strategie

Überblick

Die Multi-Level-Targeting- und Stop-Loss-Strategie ist ein Trend-Tracking-System, das auf dem Heinrich-Ansi-Chart-Modell basiert und für die Erfassung von Marktbewegungen und die Sicherung von Gewinnen entwickelt wurde. Die Strategie erlaubt eine Erst- und Zweiteingabe (Pyramide-Hinlage), wobei bei jedem Einstieg ein unabhängiges Gewinnziel und eine Stop-Loss-Einstellung vorhanden ist.

Strategieprinzip

Die Strategie basiert auf mehreren wichtigen Prinzipien:

  1. Ein Hinweis auf die Karte von Heinrich Ansi: Verwenden Sie die Heineken-Ansi-Chart, um Marktgeräusche zu filtern und Trends zu identifizieren. Die Mehrkopfsignale werden ausgelöst, wenn der aktuelle HA-Abschlusskurs höher ist als der HA-Eröffnungskurs und höher als der vorherige HA-Abschlusskurs.

  2. Doppelte Eintrittssysteme:

    • Erster Einstieg: Setzen Sie vordefinierte Ziele und Stop-Loss-Levels basierend auf den anfänglichen HA-Signalen
    • Zweiter Einstieg: Zusätzlicher Einstieg erlaubt, wenn der Markt nach Erreichen des ersten Ziels weiterhin günstige HA-Signale zeigt
  3. Durchschnittsschutz bei Zins- und VerlustbilanzWenn das erste Ziel erreicht wird, verschiebt die Strategie automatisch den Stop-Loss-Level zum Einstiegspreis (Gewinn-Verlust-Gleichgewichtspunkt), um sicherzustellen, dass der Handel keine Verluste verursacht.

  4. Zielgebietskonzept: Strategie startet “Zielzone” und erhöht das Zielniveau, um mehr potenzielle Gewinne zu erfassen, wenn der Preis sich dem Zielniveau nähert (im Rahmen eines vordefinierten Abwärtstrends)

  5. Nachschubschutzmechanismus:

    • Erste Eintrittsfollowing: Nach Erreichen des anfänglichen Ziels folgt der Stop-Loss-Punkt der Bewegung des Höchst-/Tiefstpreises, wobei ein fester Abstand gehalten wird
    • Zweiteinstiegs-Folge: Für die Aufnahme von Positionen gibt es eine separate Folge-Stopp-Parameter
  6. StatusverfolgungStrategie: Beibehalten mehrerer Variablen, um die Richtung des Handels, die Preis-Punkte, die Erreichung des ersten Ziels und die derzeitige Lage in der Zielzone zu verfolgen

Strategische Vorteile

  1. Umfassendes RisikomanagementDie Strategie bietet ein vielschichtiges Risikomanagement und schützt das Kapital vor einem starken Rückgang durch die Einrichtung von Stop-Loss- und Loss-Balance-Schutz sowie von Trailing-Loss-Schutz.

  2. Pyramidenartige GewinneDurch die Erlaubnis eines zweiten Einstiegs kann die Strategie die Position in einem bestätigten Trend erhöhen und das Gewinnpotenzial erhöhen, ohne das Gesamtrisiko zu erhöhen, da der erste Handel bereits an der Gewinn- und Verlust-Gleichgewichtsstelle gesperrt ist.

  3. Dynamische GewinnspielereiZielgebiete und Ziel-Erhöhungen ermöglichen es der Strategie, die Gewinnziele in starken Märkten automatisch zu erweitern, anstatt vorzeitig aus einem starken Trend auszusteigen.

  4. Anpassbar für die HöheDie Strategie bietet eine breite Palette von Parametern, die es dem Händler ermöglichen, sich an die Marktbedingungen, die Eigenschaften der Handelsvariante und die persönlichen Risikopräferenzen anzupassen.

  5. Automatisierte AusführungWenn die Parameter eingestellt sind, führt die Strategie sämtliche Ein- und Ausstiegs- und Stop-Loss-Anpassungen durch, wodurch die Auswirkungen des Emotionshandels beseitigt werden.

  6. BildfeedbackDie Strategie beinhaltet klare visuelle Komponenten, die die Ziel- und Stop-Loss-Level sowie die aktuellen Statusindikatoren anzeigen, so dass der Händler den Handelsfortschritt leicht überwachen kann.

Strategisches Risiko

  1. ParameterempfindlichkeitStrategie-Performance hängt stark von der Parameter-Einstellung ab. Fehlgelegte Ziel- oder Stop-Loss-Parameter können zu einem vorzeitigen Ausstieg aus einem guten Handel führen oder zu viel Absenkungsrisiko mit sich bringen. Dieses Risiko kann durch historische Rückschau und Optimierung von marktspezifischen Parametern gemindert werden.

  2. Slippage-RisikoEs ist möglich, dass die tatsächliche Ausführung des Preises von den idealen Stop-Loss-Niveaus abweicht, insbesondere während der Ausführung von Trailing-Stopps. Das Risiko kann verringert werden, wenn man die Slip-Punkt-Bufferung erhöht oder konservativere Trailing-Parameter verwendet.

  3. Wiederholte ÜbertriebeDie Aktivierung von Second-Entry könnte zu übermäßigen Transaktionen in instabilen Märkten führen. Die Einführung von zusätzlichen Filterbedingungen oder der Begrenzung der Zeit für den zweiten Eintrag kann dies verringern.

  4. MarktwechselrisikenDie Strategie kann zwar in einem Trendmarkt gut funktionieren, kann aber in einem Markt mit Zwischenbewegungen oder plötzlichen Wendungen schlecht funktionieren. Die Kombination der Strategie mit einem Marktstatusfilter kann die Gesamtwirkung verbessern.

  5. RechendichteStrategie, die mehrere Variablen und Zustände verfolgt, die auf einigen Plattformen zu Verzögerungen bei der Ausführung führen können. Optimierung des Codes und Vereinfachung bestimmter Berechnungen können die Leistung verbessern.

Richtung der Strategieoptimierung

  1. Hinzufügen von TrendfilternDie Integration von Trendindikatoren (wie beispielsweise Moving Averages, ADX oder Trendstärke-Indikatoren) kann die Einstiegsqualität verbessern und nur in der bestätigten Trendrichtung handeln. Dies reduziert die Fehlsignale in einem wackligen Markt.

  2. Einführung von ZeitfilterbedingungenEs wird eine Zeitfenster oder eine Abkühlungsphase für den zweiten Eintritt hinzugefügt, um zu verhindern, dass zu viele Trades oder häufige Ein- und Ausgänge in kurzer Zeit stattfinden.

  3. VolatilitätsanpassungDie Strategie kann an unterschiedliche Marktbedingungen angepasst werden, indem die Ziel- und Stop-Loss-Parameter dynamisch an die Marktvolatilität angepasst werden (z. B. ATR). Dadurch werden die Stop-Loss- und Zielwerte besser an die aktuellen Marktbedingungen angepasst.

  4. Verbesserungen der Heinrich-Ansi-LogikDerzeit ist das HA-Gutachten relativ einfach, und die Signalqualität kann durch Berücksichtigung von mehreren HA-Hypothesen oder HA-Dynamik-Indikatoren verbessert werden.

  5. Hinzufügen von Teil-Profit-LockingDie Einführung von Phasen-Profit-Locking-Funktionen, die es ermöglichen, einen Teil der Position zu platzieren, wenn ein bestimmtes Profitspiegel erreicht wird, während der Rest weitergeführt wird, um den Gewinnschutz und die Maximierung der potenziellen Gewinne auszugleichen.

  6. Optimierung der ZielregionallogikDerzeitige Zielgebiete mit festen Steigerungslängen. Eine dynamische Zielbereinigung basierend auf Marktvolatilität oder jüngsten Preisentwicklungen kann in Betracht gezogen werden, um besser an veränderte Marktbedingungen anzupassen.

Zusammenfassen

Die Multi-Level Targeting and Trailing Stop Strategie ist ein umfassendes Handelssystem, das Heineken Trend-Erkennung, dynamische Zielmanagement, Second-Entry-Gelegenheiten und mehrschichtige Risikokontrollen kombiniert. Die Hauptvorteile der Strategie liegen in ihrer flexiblen Gewinnspanne und einem strengen Risikomanagement-Framework, die sie geeignet machen, um signifikante Bewegungen in trendigen Märkten zu erfassen.

Obwohl die Strategie einen starken Rahmen bietet, hängt ihre Wirksamkeit immer noch von geeigneten Parameteranpassungen und Marktbedingungen ab. Die Strategie kann ihre Robustheit und Anpassungsfähigkeit durch die Hinzufügung von Marktsituationsfiltern, Volatilitätsanpassungsmechanismen und komplexeren Einstiegsbestätigungslogiken weiter verbessern. Letztendlich stellt diese Strategie eine Art Gleichgewichtsring dar, der das Handelskapital durch systematische Risikokontrolle schützt, während er versucht, Trends zu maximieren und zu erfassen.

Strategiequellcode
/*backtest
start: 2024-03-31 00:00:00
end: 2025-03-29 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Algo Trading v1 | SUNNY GUHA By OIESU", overlay=true, margin_long=100, margin_short=100, pyramiding=100)

// ———— USER INPUTS ———— //
// First Entry Settings
float initialTarget  = input.float(10000, "First Entry: Target ($)", minval=1, tooltip="First target level")
float initialStopLoss = input.float(3000, "First Entry: Stop Loss ($)", minval=1, tooltip="Initial stop loss distance")
bool  useTrailFirst = input.bool(true, "First Entry: Enable Trail", tooltip="Enable trailing features after first target hit")
float profitTrailStepFirst = input.float(1500, "First Entry: Trail Amount ($)", minval=1, tooltip="Trail amount after first target hit")
bool  useTargetZoneFirst = input.bool(true, "First Entry: Enable Target Zone", tooltip="Enable target zone feature")
float targetZoneThresholdFirst = input.float(1000, "First Entry: Target Zone Threshold ($)", minval=1, tooltip="Distance to activate target zone")
float targetIncreaseStepFirst = input.float(2000, "First Entry: Target Increase ($)", minval=1, tooltip="Amount to increase target")

// Second Entry Settings
bool  enableSecondEntries = input.bool(true, "Enable Second Entries", tooltip="Allow re-entries after first target hit")
float secondTarget = input.float(5000, "Second Entry: Target ($)", minval=1, tooltip="Target for second entries")
float secondStopLoss = input.float(2000, "Second Entry: Stop Loss ($)", minval=1, tooltip="Stop loss for second entries")
bool  useTrailSecond = input.bool(true, "Second Entry: Enable Trail", tooltip="Enable trailing for second entries")
float profitTrailStepSecond = input.float(1500, "Second Entry: Trail Amount ($)", minval=1, tooltip="Trail amount for second entries")
bool  useTargetZoneSecond = input.bool(true, "Second Entry: Enable Target Zone", tooltip="Enable target zone")
float targetZoneThresholdSecond = input.float(1000, "Second Entry: Target Zone Threshold ($)", minval=1)
float targetIncreaseStepSecond = input.float(2000, "Second Entry: Target Increase ($)", minval=1)

// ———— HEIKIN-ASHI CALCULATIONS ———— //
var float haOpen   = na
var float haClose  = na
var float haHigh   = na
var float haLow    = na

haClose := (open + high + low + close)/4
haOpen  := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1])/2
haHigh  := math.max(high, math.max(haOpen, haClose))
haLow   := math.min(low, math.min(haOpen, haClose))

// ———— TRACKING VARIABLES ———— //
var float highestPrice     = na  // Tracks highest price for long positions
var float lowestPrice      = na  // Tracks lowest price for short positions
var float basePrice        = na  // Entry price for position
var float targetLevel      = na  // Current target level
var float stopLevel        = na  // Current stop level
var bool  firstTargetHit   = false  // Indicates if first target was hit
var string tradeDirection  = "none"  // Current trade direction
var bool   isSecondEntry   = false   // Tracks if current position is a second entry
var bool   inTargetZone    = false   // Tracks if price is in target zone

// ———— SIGNAL DETECTION ———— //
bullish = haClose > haOpen and haClose > haClose[1]
bearish = haClose < haOpen and haClose < haClose[1]

// Entry conditions - only allow second entries if enabled and after first target hit
longCondition  = bullish and (tradeDirection != "long" or (enableSecondEntries and firstTargetHit))
shortCondition = bearish and (tradeDirection != "short" or (enableSecondEntries and firstTargetHit))

// Position Management - Long Positions
if strategy.position_size > 0
    highestPrice := math.max(high, nz(highestPrice, high))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and high >= targetLevel - targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel + targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.max(stopLevel, highestPrice - profitTrailStepSecond)

        if low <= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and high >= basePrice + initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? high + targetIncreaseStepFirst : basePrice + initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and high >= targetLevel - targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel + targetIncreaseStepFirst
                // Trail stop-loss but never below break-even
                stopLevel := math.max(basePrice, highestPrice - profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice + initialTarget
            stopLevel := basePrice - initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if low <= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// Position Management - Short Positions
if strategy.position_size < 0
    lowestPrice := math.min(low, nz(lowestPrice, low))

    if isSecondEntry
        // Second Entry Management
        inTargetZone := useTargetZoneSecond and low <= targetLevel + targetZoneThresholdSecond

        if inTargetZone and useTargetZoneSecond
            targetLevel := targetLevel - targetIncreaseStepSecond

        if useTrailSecond
            stopLevel := math.min(stopLevel, lowestPrice + profitTrailStepSecond)

        if high >= stopLevel
            strategy.close_all("Second Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"
    else
        // First Entry Management - improved profit locking
        if not firstTargetHit and low <= basePrice - initialTarget
            // First target hit - ALWAYS lock profit at break-even
            firstTargetHit := true
            stopLevel := basePrice  // Move stop to break-even
            targetLevel := useTrailFirst ? low - targetIncreaseStepFirst : basePrice - initialTarget
        else if firstTargetHit
            // Only modify target if trailing is enabled
            if useTrailFirst
                inTargetZone := useTargetZoneFirst and low <= targetLevel + targetZoneThresholdFirst
                if inTargetZone and useTargetZoneFirst
                    targetLevel := targetLevel - targetIncreaseStepFirst
                // Trail stop-loss but never above break-even
                stopLevel := math.min(basePrice, lowestPrice + profitTrailStepFirst)
        else
            // Before first target hit
            targetLevel := basePrice - initialTarget
            stopLevel := basePrice + initialStopLoss

        // Exit on stop hit - this could only be at break-even or better after first target
        if high >= stopLevel
            strategy.close_all("First Entry Stop")
            basePrice := na
            targetLevel := na
            stopLevel := na
            highestPrice := na
            lowestPrice := na
            firstTargetHit := false
            isSecondEntry := false
            inTargetZone := false
            tradeDirection := "none"

// New Position Entry
if strategy.position_size == 0
    if longCondition
        tradeDirection := "long"
        basePrice := close
        targetLevel := basePrice + (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice - (firstTargetHit ? secondStopLoss : initialStopLoss)
        highestPrice := high
        isSecondEntry := firstTargetHit
        strategy.entry("Long", strategy.long)
    else if shortCondition
        tradeDirection := "short"
        basePrice := close
        targetLevel := basePrice - (firstTargetHit ? secondTarget : initialTarget)
        stopLevel := basePrice + (firstTargetHit ? secondStopLoss : initialStopLoss)
        lowestPrice := low
        isSecondEntry := firstTargetHit
        strategy.entry("Short", strategy.short)

// ———— VISUALIZATION ———— //
// Entry signals
plotshape(longCondition and (strategy.position_size == 0),     title="Buy", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)

plotshape(shortCondition and (strategy.position_size == 0),     title="Sell", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)

// Target and stop levels with clearer colors
plot(targetLevel, title="Target Level", color=color.orange, linewidth=2)
plot(stopLevel, title="Stop Level", color=color.red, linewidth=2)

// Break-even level - shown prominently after first target hit
plot(strategy.position_size != 0 and firstTargetHit ? basePrice : na,     title="Break-Even Level", color=color.green, linewidth=2, style=plot.style_linebr)

// Debug plots for state tracking
plotchar(firstTargetHit, title="First Target Hit", char="T", location=location.top, color=color.yellow, size=size.tiny)
plotchar(isSecondEntry, title="Second Entry", char="2", location=location.top, color=color.white, size=size.tiny)
plotchar(useTrailFirst and firstTargetHit, title="Trail Active", char="→", location=location.top, color=color.blue, size=size.tiny)
plotchar(inTargetZone, title="Target Zone", char="Z", location=location.top, color=color.fuchsia, size=size.tiny)