Mehrere Indikatoren bestätigen die dynamische Gewinnmitnahmestrategie von DCA zum Durchbruch des gleitenden Durchschnitts

EMA RSI MACD BB DCA HTF
Erstellungsdatum: 2025-04-11 11:09:00 zuletzt geändert: 2025-04-11 11:09:00
Kopie: 1 Klicks: 341
2
konzentrieren Sie sich auf
319
Anhänger

Mehrere Indikatoren bestätigen die dynamische Gewinnmitnahmestrategie von DCA zum Durchbruch des gleitenden Durchschnitts Mehrere Indikatoren bestätigen die dynamische Gewinnmitnahmestrategie von DCA zum Durchbruch des gleitenden Durchschnitts

Überblick

Die Strategie verwendet mehrere technische Indikatoren wie EMA 48, RSI 14, MACD und die Brin-Band, um potenzielle Einstiegspunkte zu identifizieren, während eine strukturierte Position-Management-Methode und ein vorgefertigtes Risiko-Kontrollmechanismus implementiert werden. Der Kern der Strategie ist die Identifizierung der Preise an der Kreuzung mit EMA, und die Verwendung von RSI, MACD und Brin-Band für die Bestätigung, in Kombination mit einer hohen Zeitrahmenanalyse, um Falschsignale zu vermeiden, eine DCA-Strategie auf drei Ebenen zu verwenden, um Positionen zu erhöhen und die Gewinne durch mehrere Stufen von Stop-Off und Dynamischen Stop-Loss zu schützen.

Strategieprinzip

Das Prinzip der Strategie basiert auf einer Kombination aus mehreren technischen Kennzahlen, die hauptsächlich folgende Schlüsselkomponenten umfassen:

  1. Eintrittsbedingungen

    • Der Preis muss die 48-Zyklus-EMA überschreiten, wenn er hoch ist, muss er nach unten gehen, wenn er leer ist.
    • Der RSI muss die Richtungsstärke bestätigen (<60 bei Mehrköpfen und <40 bei Leerköpfen)
    • Die MACD-Linie muss durch die Signallinie gehen, um die Richtung der Dynamik zu bestätigen.
    • Der Preis muss sich dem vorherigen Unterstützungs-/Widerstandsbereich nähern.
    • RSI zeigt Abweichsignal auf Peak/Valley 5
    • Hohe Zeitrahmen bestätigen, dass dies der zweite Standort ist.
  2. Dynamische Positionsverwaltung

    • Beginnsrisiko auf 1-3% des Kontos begrenzt
    • Die Positionsgröße folgt dem DCA-Verhältnis 1-2-6 für die Gewinne
    • Erste Stop-Loss-Einstellung bei 1-3% des Einstiegspunktes, berechnet in monetären Beträgen
    • Nach vollständiger DCA-Bereitstellung wird die Stop-Loss-Aktualisierung auf die Position 1.3% des Einstiegspunktes umgestellt
  3. Intelligente Profitmechanismen

    • Schließen Sie 25% der Positionen, wenn der Preis 0,5% Gewinn erzielt
    • Schließen Sie 50% der Positionen, wenn der Preis einen Gewinn von 1% erreicht
    • Nach dem zweiten Gewinn bewegt sich der Stop-Loss in die Basisposition.

Eine tiefe Analyse des Codes zeigt, dass die Strategie auch ein intelligentes Peak-Valley-Identifizierungssystem enthält, um Abweichungen von der Regel zu erkennen, indem es die letzten 5 Punkte der Preise und des RSI verfolgt. Das High-Time-Frame-Confirmation-System vermeidet falsche Signale auf den niedrigen Zeitfenstern, indem es die Unterstützung und den Widerstand auf den Tagelinen analysiert.

Strategische Vorteile

Wenn wir den Code der Strategie genauer analysieren, können wir folgende deutliche Vorteile feststellen:

  1. Mehrstufige BestätigungDie Kombination von EMA, RSI, MACD und Brin-Band sorgt für eine hohe Qualität der Einstiegspunkte.

  2. Intelligente GeldverwaltungDie Methode des 1-2-6-DCA-Verhältnisses nutzt sowohl die volatilen Durchschnittskosten des Marktes als auch die Einschränkung der Gesamtrisikoabschnitte. Das anfängliche Risiko ist auf 1-3% des Kontos beschränkt, um sicherzustellen, dass selbst in einem schlimmsten Fall keine katastrophalen Verluste verursacht werden.

  3. Dynamische VerlustschutzDie Stop-Loss-Mechanismen werden mit der Entwicklung des Handels angepasst, insbesondere wenn die Stop-Loss-Position nach dem Erreichen eines Teils des Gewinns in die Sicherungsposition verschoben wird, was die Notwendigkeit, die Gewinne zu schützen und den Handel zu erleichtern, effektiv ausgleicht.

  4. Strategie der schrittweisen GewinnungDurch die Schließung von Positionen von 25% und 50% bei 0,5% bzw. 1% Gewinnpunkten ist die Strategie in der Lage, einen Teil der Gewinne zu sperren, während Positionen beibehalten werden, um größere Marktbewegungen zu erfassen und ein Gleichgewicht zwischen Risiko und Rendite herzustellen.

  5. Bestätigung der HochzeitDie Verwendung von Unterstützungs- und Widerstandspunkten für höhere Zeiträume zur Filterung von Handelssignalen reduziert die Auswirkungen von Geräuschen und Falschbrüchen, die häufig auf niedrigeren Zeiträumen vorkommen.

Strategisches Risiko

Obwohl die Strategie so gut konzipiert ist, gibt es einige Risikofaktoren, die zu beachten sind:

  1. ParameterempfindlichkeitDie Performance einer Strategie ist stark von mehreren Parameter-Sets abhängig, darunter EMA-Zyklen, RSI-Trenchwerte und DCA-Levels. Kleine Änderungen dieser Parameter können zu signifikanten Unterschieden in den Handelsergebnissen führen und erfordern sorgfältige Optimierung und Rückmessung.

  2. Die Gefahr großer SchwankungenTrotz der DCA-Mechanismen können die Preise bei starken Marktschwankungen schnell alle festgelegten Stop-Loss-Punkte überschreiten, was zu einem höheren tatsächlichen Verlust als erwartet führt. Für diese Risiken kann die Verwendung einer strengeren Anfangspositionsgröße oder die Aussetzung des Handels während hoher Volatilität in Betracht gezogen werden.

  3. Überschneidung von VerlustenEs wird empfohlen, zusätzliche Gesamtrisikokontrollen zu implementieren, wie z. B. die Begrenzung des maximalen Verlustes pro Tag oder pro Woche.

  4. RSI entfernt sich von der Komplexität der IdentifizierungDie Erkennung von RSI-Abweichungen im Code hängt von der Genauigkeit der historischen Daten ab und kann unter bestimmten Marktbedingungen nicht zuverlässig sein. Es kann in Betracht gezogen werden, die Abweichungen mit Hilfe von fortschrittlicheren statistischen Methoden zu bestätigen.

  5. Abhängigkeit von MarktliquiditätIn einem Markt mit geringer Liquidität kann es zu Problemen mit der Schiebepunkte bei einer großen Anzahl von DCA-Ordern kommen, was die Gesamteffizienz der Strategie beeinträchtigt. Die Verwendung dieser Strategie sollte auf Märkte mit hoher Liquidität beschränkt werden.

Richtung der Strategieoptimierung

Basierend auf einer eingehenden Analyse des Codes können wir einige Optimierungsmöglichkeiten für diese Strategie ermitteln:

  1. Anpassung der dynamischen ParameterEs können dynamische Parameter-Anpassungsmechanismen eingeführt werden, die auf Marktschwankungen basieren. Zum Beispiel können die Minimierungsanforderungen für den RSI während hoher Volatilität automatisch erhöht oder die EMA-Länge an unterschiedliche Marktzyklen angepasst werden. Solche Anpassungsmechanismen können die Stabilität der Strategie in verschiedenen Marktumgebungen verbessern.

  2. Verstärkte AbweichungDer aktuelle RSI ist relativ einfach zu erkennen und kann durch die Einführung von komplexeren Algorithmen verbessert werden, wie die Verwendung von Fisher-Konvertierungen für den RSI oder die Hinzufügung von Traffic Confirmation. Dies reduziert die Fehlmeldung und erhöht die Genauigkeit der Strategie.

  3. Intelligente Profit-OptimierungDerzeitige feste Vorteile können zu dynamischen Vorteilen, die auf Marktvolatilität basieren, umgewandelt werden. Zum Beispiel kann ein höherer Gewinnziel bei hoher Volatilität und ein niedrigerer bei niedrigerer Volatilität gesetzt werden, um sich an veränderte Marktbedingungen anzupassen.

  4. FinanzierungsentwicklungDer DCA-Anteil und die Triggerpunkte können optimiert werden, wobei die Dynamik der Marktstruktur und der aktuellen Trendstärke berücksichtigt wird. So wird beispielsweise ein aggressiverer DCA-Anteil bei starken Trends und ein konservativerer bei schwachen Trends verwendet.

  5. Optimierung der HandelszeitenDie Einführung von Zeitfiltern auf Basis von Handelsvolumen und -volatilität verhindert den Handel in Zeiten mit geringer Aktivität. Dies kann durch die Analyse von historischen Daten erreicht werden, um die optimale Handelszeitfenster zu bestimmen.

Zusammenfassen

Die Dynamische Stop-Strategie ist ein gut konzipiertes Short-Line-Handelssystem, das mehrere technische Analyse-Tools mit fortschrittlichen Geldmanagement-Technologien kombiniert. Durch die synchronische Arbeit mit Indikatoren wie EMA, RSI, MACD und Brin-Band kann die Strategie Eintrittspunkte mit hoher Wahrscheinlichkeit identifizieren und gleichzeitig strukturierte DCA-Methoden und dynamische Stop-Loss-/Stop-Mechanismen verwenden, um Risiken zu verwalten und Gewinne zu sichern.

Obwohl die Strategie eindeutige Vorteile bietet, einschließlich strenger Risikokontrollen, mehrstufiger Bestätigungssysteme und intelligenter Gewinnmechanismen, müssen Benutzer auf Parameter-Sensitivität und Risiken durch starke Marktschwankungen achten. Die Robustheit und Profitabilität der Strategie werden durch die Implementierung empfohlener Optimierungsmaßnahmen, wie dynamische Parameteranpassungen, verstärkte Abweichungserkennung und intelligente Gewinnoptimierung, voraussichtlich weiter verbessert.

Für Händler ist die Strategie am besten geeignet für Märkte mit ausreichender Liquidität und sollte vor der Verwendung mit einer ausreichenden Historik und Optimierung der Parameter durchgeführt werden. Mit sorgfältiger Implementierung und kontinuierlicher Überwachung und Anpassung kann dieses mehrschichtige Handelssystem zu einer mächtigen Waffe in der Toolbox eines Short-Line-Händlers werden.

Strategiequellcode
/*backtest
start: 2024-04-11 00:00:00
end: 2025-04-10 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Scalping Strategy with DCA - V2", overlay=true, margin_long=100, margin_short=100)

// Input parameters
emaLength = input.int(48, title="EMA Length", minval=1, group="Main Indicators")
rsiLength = input.int(14, title="RSI Length", minval=1, group="Main Indicators")
macdShortLength = input.int(12, title="MACD Short Length", minval=1, group="Main Indicators")
macdLongLength = input.int(30, title="MACD Long Length", minval=1, group="Main Indicators")
macdSignalLength = input.int(9, title="MACD Signal Length", minval=1, group="Main Indicators")
bbLength = input.int(20, title="Bollinger Bands Length", group="Main Indicators")
bbMult = input.float(2.0, title="Bollinger Bands Multiplier", group="Main Indicators")

// Risk management parameters
initialRiskPercent = input.float(1.0, title="Initial Risk % of Account", minval=0.1, maxval=3.0, step=0.1, group="Risk Management")
stopLossPercent = input.float(1.5, title="Stop Loss % (Unboosted)", minval=0.5, maxval=3.0, step=0.1, group="Risk Management")
fixedSLPercent = input.float(1.3, title="Fixed SL % after full DCA", minval=0.1, maxval=5.0, step=0.1, group="Risk Management")
takeProfitPercent1 = input.float(0.5, title="First Take Profit % (25% Volume)", minval=0.1, group="Risk Management")
takeProfitPercent2 = input.float(1.0, title="Second Take Profit % (50% Volume)", minval=0.1, group="Risk Management")

// DCA parameters
enableDCA = input.bool(true, title="Enable DCA", group="DCA Settings")
dcaLevel1 = input.float(1.0, title="DCA Level 1 % Drop", minval=0.1, group="DCA Settings")
dcaLevel2 = input.float(2.0, title="DCA Level 2 % Drop", minval=0.1, group="DCA Settings")

// Higher Timeframe parameters
higherTF = input.timeframe("D", title="Higher Timeframe for Confirmation", group="Advanced Settings")
useHTFConfirmation = input.bool(true, title="Use Higher Timeframe Confirmation", group="Advanced Settings")

// Debug parameters
showLabels = input.bool(true, title="Show Entry/Exit Labels", group="Visual")
showSL = input.bool(true, title="Show Stop Loss Lines", group="Visual")
showTP = input.bool(true, title="Show Take Profit Lines", group="Visual")

// Calculate indicators
ema = ta.ema(close, emaLength)
rsi = ta.rsi(close, rsiLength)
[macdLine, signalLine, _] = ta.macd(close, macdShortLength, macdLongLength, macdSignalLength)
[middle, upper, lower] = ta.bb(close, bbLength, bbMult)

// Variables for tracking peaks and troughs
var priceHighs = array.new_float(0)
var priceLows = array.new_float(0)
var rsiHighs = array.new_float(0)
var rsiLows = array.new_float(0)

// Track last 5 peaks and troughs for both price and RSI
pivot_high = ta.pivothigh(high, 2, 2)
if not na(pivot_high)
    array.push(priceHighs, pivot_high)
    if array.size(priceHighs) > 5
        array.shift(priceHighs)

pivot_low = ta.pivotlow(low, 2, 2)
if not na(pivot_low)
    array.push(priceLows, pivot_low)
    if array.size(priceLows) > 5
        array.shift(priceLows)

rsi_pivot_high = ta.pivothigh(rsi, 2, 2)
if not na(rsi_pivot_high)
    array.push(rsiHighs, rsi_pivot_high)
    if array.size(rsiHighs) > 5
        array.shift(rsiHighs)

rsi_pivot_low = ta.pivotlow(rsi, 2, 2)
if not na(rsi_pivot_low)
    array.push(rsiLows, rsi_pivot_low)
    if array.size(rsiLows) > 5
        array.shift(rsiLows)

// Check for RSI divergence
rsiDivergenceBullish = array.size(priceLows) >= 5 and array.size(rsiLows) >= 5 and array.get(priceLows, array.size(priceLows) - 1) < array.get(priceLows, array.size(priceLows) - 5) and array.get(rsiLows, array.size(rsiLows) - 1) > array.get(rsiLows, array.size(rsiLows) - 5)

rsiDivergenceBearish = array.size(priceHighs) >= 5 and array.size(rsiHighs) >= 5 and array.get(priceHighs, array.size(priceHighs) - 1) > array.get(priceHighs, array.size(priceHighs) - 5) and array.get(rsiHighs, array.size(rsiHighs) - 1) < array.get(rsiHighs, array.size(rsiHighs) - 5)

// Check if price is near previous high/low (Rule #4)
isNearPrevHigh = array.size(priceHighs) >= 2 and math.abs(high - array.get(priceHighs, array.size(priceHighs) - 2)) / array.get(priceHighs, array.size(priceHighs) - 2) < 0.01
isNearPrevLow = array.size(priceLows) >= 2 and math.abs(low - array.get(priceLows, array.size(priceLows) - 2)) / array.get(priceLows, array.size(priceLows) - 2) < 0.01

// Higher timeframe confirmation (Rule #10)
// Get pivot points from higher timeframe
htf_is_pivot_low = request.security(syminfo.tickerid, higherTF, not na(ta.pivotlow(low, 2, 2)), barmerge.gaps_off, barmerge.lookahead_off)
htf_is_pivot_high = request.security(syminfo.tickerid, higherTF, not na(ta.pivothigh(high, 2, 2)), barmerge.gaps_off, barmerge.lookahead_off)

// Count pivots in higher timeframe to check if this is the 2nd pivot
var htf_pivot_low_count = 0
var htf_pivot_high_count = 0

if htf_is_pivot_low
    htf_pivot_low_count := htf_pivot_low_count + 1
    htf_pivot_low_count := math.min(htf_pivot_low_count, 10)  // Prevent unlimited counting

if htf_is_pivot_high
    htf_pivot_high_count := htf_pivot_high_count + 1
    htf_pivot_high_count := math.min(htf_pivot_high_count, 10)  // Prevent unlimited counting

// Reset counts after a while to maintain relevance
if not htf_is_pivot_low and not htf_is_pivot_high and bar_index % 100 == 0
    htf_pivot_low_count := 0
    htf_pivot_high_count := 0

// Check if this is the 2nd pivot in higher timeframe
isHTFSecondPivotLow = htf_is_pivot_low and htf_pivot_low_count == 2
isHTFSecondPivotHigh = htf_is_pivot_high and htf_pivot_high_count == 2

// Check crossing of Bollinger Bands
crossUpperBand = ta.crossover(close, upper)
crossLowerBand = ta.crossunder(close, lower)

// Entry conditions refined with higher timeframe confirmation
longCondition = close > ema and close[1] <= ema[1] and rsi > 60 and macdLine > signalLine and isNearPrevLow and rsiDivergenceBullish and (not useHTFConfirmation or isHTFSecondPivotLow)
shortCondition = close < ema and close[1] >= ema[1] and rsi < 40 and macdLine < signalLine and isNearPrevHigh and rsiDivergenceBearish and (not useHTFConfirmation or isHTFSecondPivotHigh)

// Additional entry conditions when price crosses Bollinger Bands (Rule #11)
longBBCondition = crossLowerBand and rsi < 30
shortBBCondition = crossUpperBand and rsi > 70

// Calculate position sizes for DCA
initialSize = strategy.equity * initialRiskPercent / 100 / 9  // Initial sizing according to the 1-2-6 rule
dca1Size = initialSize * 2
dca2Size = initialSize * 6

// Calculate SL in money terms (Rule #3)
slMoneyAmount = strategy.equity * initialRiskPercent / 100 * stopLossPercent / 100

// Variables to track DCA levels
var float longEntryPrice = 0.0
var float shortEntryPrice = 0.0
var int longDCACount = 0
var int shortDCACount = 0
var float stopLossLevel = 0.0
var float takeProfit1Level = 0.0
var float takeProfit2Level = 0.0
var float slMoneyValue = 0.0

// Close partial positions at take profit levels
if strategy.position_size > 0
    if close >= takeProfit1Level and takeProfit1Level > 0 and strategy.position_size == initialSize + (longDCACount > 0 ? dca1Size : 0) + (longDCACount > 1 ? dca2Size : 0)
        strategy.order("Long TP1", strategy.short, qty=strategy.position_size * 0.25)
        if showLabels
            label.new(bar_index, high, "TP1 (25%)", color=color.green, textcolor=color.white, style=label.style_label_down)
    
    if close >= takeProfit2Level and takeProfit2Level > 0 and strategy.position_size > initialSize * 0.25
        strategy.order("Long TP2", strategy.short, qty=strategy.position_size * 0.5)
        stopLossLevel := longEntryPrice  // Move SL to breakeven after TP2
        if showLabels
            label.new(bar_index, high, "TP2 (50%) & SL→BE", color=color.green, textcolor=color.white, style=label.style_label_down)

if strategy.position_size < 0
    if close <= takeProfit1Level and takeProfit1Level > 0 and math.abs(strategy.position_size) == initialSize + (shortDCACount > 0 ? dca1Size : 0) + (shortDCACount > 1 ? dca2Size : 0)
        strategy.order("Short TP1", strategy.long, qty=math.abs(strategy.position_size) * 0.25)
        if showLabels
            label.new(bar_index, low, "TP1 (25%)", color=color.red, textcolor=color.white, style=label.style_label_up)
    
    if close <= takeProfit2Level and takeProfit2Level > 0 and math.abs(strategy.position_size) > initialSize * 0.25
        strategy.order("Short TP2", strategy.long, qty=math.abs(strategy.position_size) * 0.5)
        stopLossLevel := shortEntryPrice  // Move SL to breakeven after TP2
        if showLabels
            label.new(bar_index, low, "TP2 (50%) & SL→BE", color=color.red, textcolor=color.white, style=label.style_label_up)

// DCA Logic
if enableDCA and strategy.position_size > 0 and longDCACount < 2
    if close < longEntryPrice * (1 - dcaLevel1/100) and longDCACount == 0
        strategy.entry("Long DCA1", strategy.long, qty=dca1Size)
        longDCACount := 1
        if showLabels
            label.new(bar_index, low, "DCA1", color=color.blue, textcolor=color.white, style=label.style_label_up)
    
    if close < longEntryPrice * (1 - dcaLevel2/100) and longDCACount == 1
        strategy.entry("Long DCA2", strategy.long, qty=dca2Size)
        longDCACount := 2
        // Update SL to fixed percentage after full DCA (Rule #6)
        stopLossLevel := longEntryPrice * (1 - fixedSLPercent/100)
        if showLabels
            label.new(bar_index, low, "DCA2 & SL Update", color=color.blue, textcolor=color.white, style=label.style_label_up)

if enableDCA and strategy.position_size < 0 and shortDCACount < 2
    if close > shortEntryPrice * (1 + dcaLevel1/100) and shortDCACount == 0
        strategy.entry("Short DCA1", strategy.short, qty=dca1Size)
        shortDCACount := 1
        if showLabels
            label.new(bar_index, high, "DCA1", color=color.purple, textcolor=color.white, style=label.style_label_down)
    
    if close > shortEntryPrice * (1 + dcaLevel2/100) and shortDCACount == 1
        strategy.entry("Short DCA2", strategy.short, qty=dca2Size)
        shortDCACount := 2
        // Update SL to fixed percentage after full DCA (Rule #6)
        stopLossLevel := shortEntryPrice * (1 + fixedSLPercent/100)
        if showLabels
            label.new(bar_index, high, "DCA2 & SL Update", color=color.purple, textcolor=color.white, style=label.style_label_down)

// Entry with initial position
if longCondition or longBBCondition
    strategy.close("Short")
    strategy.entry("Long", strategy.long, qty=initialSize)
    longEntryPrice := close
    longDCACount := 0
    shortDCACount := 0
    
    // Set SL based on money value (not percentage)
    slMoneyValue := slMoneyAmount
    // Convert to price level - simplified version
    stopLossLevel := close * (1 - stopLossPercent/100)
    
    takeProfit1Level := close * (1 + takeProfitPercent1/100)
    takeProfit2Level := close * (1 + takeProfitPercent2/100)
    if showLabels
        label.new(bar_index, low, "LONG", color=color.green, textcolor=color.white, style=label.style_label_up)

if shortCondition or shortBBCondition
    strategy.close("Long")
    strategy.entry("Short", strategy.short, qty=initialSize)
    shortEntryPrice := close
    longDCACount := 0
    shortDCACount := 0
    
    // Set SL based on money value (not percentage)
    slMoneyValue := slMoneyAmount
    // Convert to price level - simplified version
    stopLossLevel := close * (1 + stopLossPercent/100)
    
    takeProfit1Level := close * (1 - takeProfitPercent1/100)
    takeProfit2Level := close * (1 - takeProfitPercent2/100)
    if showLabels
        label.new(bar_index, high, "SHORT", color=color.red, textcolor=color.white, style=label.style_label_down)

// Stop Loss
if strategy.position_size > 0 and low <= stopLossLevel
    strategy.close("Long")
    if showLabels
        label.new(bar_index, low, "SL", color=color.red, textcolor=color.white, style=label.style_label_up)

if strategy.position_size < 0 and high >= stopLossLevel
    strategy.close("Short")
    if showLabels
        label.new(bar_index, high, "SL", color=color.red, textcolor=color.white, style=label.style_label_down)

// Market cap and holder % check can't be done directly in TradingView, but we display a reminder
if strategy.position_size != 0 and bar_index % 100 == 0
    label.new(bar_index, close, "Remember: Only trade coins with large market cap and >7% holder ratio", 
              color=color.yellow, textcolor=color.black, style=label.style_label_left)

// Plot indicators - these must be at the global scope in Pine Script v6
plot(ema, color=color.blue, title="48 EMA")
plot(upper, color=color.red, title="Upper BB")
plot(lower, color=color.green, title="Lower BB")
plot(middle, color=color.yellow, title="Middle BB")

// Plot stop loss and take profit levels - conditions need to be part of the plot function in v6
plotSL = showSL and stopLossLevel > 0 ? stopLossLevel : na
plot(plotSL, color=color.red, style=plot.style_circles, linewidth=2, title="Stop Loss")

// TP for long positions
plotTP1Long = showTP and strategy.position_size > 0 and takeProfit1Level > 0 ? takeProfit1Level : na
plot(plotTP1Long, color=color.green, style=plot.style_circles, linewidth=1, title="TP1 Long")

plotTP2Long = showTP and strategy.position_size > 0 and takeProfit2Level > 0 ? takeProfit2Level : na
plot(plotTP2Long, color=color.green, style=plot.style_circles, linewidth=2, title="TP2 Long")

// TP for short positions
plotTP1Short = showTP and strategy.position_size < 0 and takeProfit1Level > 0 ? takeProfit1Level : na
plot(plotTP1Short, color=color.green, style=plot.style_circles, linewidth=1, title="TP1 Short")

plotTP2Short = showTP and strategy.position_size < 0 and takeProfit2Level > 0 ? takeProfit2Level : na
plot(plotTP2Short, color=color.green, style=plot.style_circles, linewidth=2, title="TP2 Short")

// Additional table with strategy information
if barstate.islastconfirmedhistory
    var table infoTable = table.new(position=position.top_right, columns=2, rows=5, bgcolor=color.new(color.black, 70), frame_width=1)
    
    table.cell(infoTable, 0, 0, "Strategy:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 0, "Scalping with DCA", text_color=color.white)
    
    table.cell(infoTable, 0, 1, "Initial Risk:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 1, str.tostring(initialRiskPercent, "#.##") + "% of account", text_color=color.white)
    
    table.cell(infoTable, 0, 2, "DCA Ratio:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 2, "1-2-6", text_color=color.white)
    
    table.cell(infoTable, 0, 3, "SL After DCA:", bgcolor=color.new(color.blue, 90), text_color=color.white)
    table.cell(infoTable, 1, 3, str.tostring(fixedSLPercent, "#.##") + "%", text_color=color.white)
    
    table.cell(infoTable, 0, 4, "REMINDERS:", bgcolor=color.new(color.red, 90), text_color=color.white)
    table.cell(infoTable, 1, 4, "Only trade coins with market cap and >7% holder ratio", text_color=color.white)