Die Ressourcen sind geladen. Beförderung...

RSI-Momentum und ADX-Strength-Trend-basiertes Kapitalmanagementsystem

Schriftsteller:ChaoZhang, Datum: 2024-12-20 14:24:34
Tags:RSIADXATREMATP

img

Übersicht

Die Strategie ist ein hybrides System, das Trend-Folgen und Swing-Handel kombiniert und durch mehrere technische Indikatoren und strenges Kapitalmanagement einen stabilen Handel erzielt. Die Strategie setzt einen schrittweisen Take-Profit-Ansatz ein, um Gewinne zu erzielen und gleichzeitig maximale Drawdown-Kontrolle festzulegen, um Risiken zu managen und gleichzeitig Renditen zu gewährleisten. Das System verwendet den RSI-Momentumsindikator und den ADX-Trendstärkeindikator als Haupthandelssignal-Trigger, kombiniert mit mehreren Volumen-, ATR- und EMA-Filtern, um die Handelswirksamkeit zu gewährleisten.

Strategieprinzip

Die Kernlogik der Strategie umfasst folgende Schlüsselelemente:

  1. Die Einstiegsbedingungen müssen gleichzeitig erfüllt werden: Handelsvolumen größer als 1M, ADX größer als 25, was auf einen klaren Trend hinweist, RSI größer als 60, der eine starke Dynamik zeigt, ATR größer als 2, der eine ausreichende Volatilitätsspanne gewährleistet, Preis über 200-Tage- gleitenden Durchschnitt, der einen Aufwärtstrend aufrechterhält.
  2. Schrittweise Gewinnentnahme: Erste Gewinnentnahme bei 15%, Schließung der 50%-Position; zweite Gewinnentnahme bei 30%, Schließung der verbleibenden Position.
  3. Stop-Loss-Kontrolle: Eine Stop-Loss-Position von 15% schützt das Kapital und tritt gleichzeitig aus, wenn der RSI unter 50 fällt oder der Kurs unter 200 MA fällt.
  4. Abziehungsmanagement: Echtzeitverfolgung des Strategie-Eigenkapitals, Auslöser der systemischen Risikokontrolle und Clearing aller Positionen, wenn die Abziehung 30% übersteigt.

Strategische Vorteile

  1. Die Kreuzvalidierung mehrerer technischer Indikatoren verbessert die Zuverlässigkeit der Handelssignale
  2. Schrittweise Gewinngewinnentwicklung balanciert kurzfristigen Gewinn und erfasst wichtige Trends
  3. Vollständiges Risikokontrollsystem, einschließlich individueller Bestandsstopp-Loss und systemischer Risikokontrolle
  4. Strenge Handelsbedingungen filtern falsche Signale effektiv aus
  5. Klare Strategie-Logik, einfache Anpassung der Parameter an die Marktbedingungen

Strategische Risiken

  1. Mehrfache Indikatorfilterung kann einige Handelsmöglichkeiten verpassen
  2. Häufige Stop-Losses können auf schwankenden Märkten ausgelöst werden
  3. Festprozentual-Stop-Loss- und Take-Profit-Einstellungen sind möglicherweise nicht für alle Marktumgebungen geeignet
  4. Die Strategie stützt sich auf technische Indikatoren, kann auf grundlegende plötzliche Ereignisse nicht ausreichend reagieren
  5. Für die Erfüllung der Anforderungen an das Handelsvolumen erfordert ein größeres Eigenkapital

Strategieoptimierungsrichtlinien

  1. Einführung anpassungsfähiger Stop-Loss- und Take-Profit-Mechanismen, die sich dynamisch an die Marktvolatilität anpassen
  2. Hinzufügen eines Marktumfeldbeurteilungsmoduls unter Verwendung verschiedener Parameter-Einstellungen unter unterschiedlichen Marktbedingungen
  3. Optimierung der ADX-Berechnungsmethode, Berücksichtigung der Verwendung von Anpassungszeiten
  4. Einbeziehung von Transaktionskosten, Optimierung des Positionsmanagementsystems
  5. Entwicklung eines maschinellen Lernmechanismus zur Signalfilterung

Zusammenfassung

Diese Strategie ist ein umfassendes Handelssystem, das durch mehrere technische Indikatoren und ein strenges Kapitalmanagement einen stabilen Handel erzielt. Die Hauptvorteile der Strategie liegen in ihrem vollständigen Risikokontrollsystem und dem schrittweisen Gewinnmechanismus, aber es muss auf zeitnahe Parameteranpassungen basierend auf den Marktbedingungen in der praktischen Anwendung geachtet werden. Der weitere Optimierungsraum der Strategie liegt hauptsächlich in der dynamischen Anpassung der Parameter und der Verbesserung des Signalfiltermechanismus.


/*backtest
start: 2023-12-20 00:00:00
end: 2024-12-18 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Swing Strategy (<30% DD)", shorttitle="SwingStratDD", overlay=true)

//-----------------------------------------------------
// Example Indicators and Logic
//-----------------------------------------------------
emaLen   = input.int(200, "EMA Length", minval=1)
emaValue = ta.ema(close, emaLen)

plot(emaValue, color=color.yellow, linewidth=2, title="EMA 200")


//-----------------------------------------------------
// User Inputs
//-----------------------------------------------------
adxLen           = input.int(14,  "ADX Length",      minval=1)
rsiLen           = input.int(14,  "RSI Length",      minval=1)
atrLen           = input.int(14,  "ATR Length",      minval=1)

rsiBuyThresh     = input.float(60, "RSI Buy Threshold",     minval=1, maxval=100)
adxThresh        = input.float(25, "ADX Threshold (Trend)", minval=1, maxval=100)
minVolume        = input.float(1e6,"Minimum Volume",         minval=1)
minATR           = input.float(2,  "Minimum ATR(14)",        minval=0.1, step=0.1)

stopLossPerc     = input.float(15, "Stop-Loss %",            minval=0.1, step=0.1)
// We’ll do two partial take-profit levels to aim for consistent cashflow:
takeProfit1Perc  = input.float(15, "Take-Profit1 %",         minval=0.1, step=0.1)
takeProfit2Perc  = input.float(30, "Take-Profit2 %",         minval=0.1, step=0.1)

ddLimit          = input.float(30, "Max Drawdown %",         minval=0.1, step=0.1)

//-----------------------------------------------------
// Indicators
//-----------------------------------------------------

rsiValue = ta.rsi(close, rsiLen)
atrValue = ta.atr(atrLen)

//--- Fully Manual ADX Calculation ---
upMove      = high - high[1]
downMove    = low[1] - low
plusDM      = (upMove > downMove and upMove > 0) ? upMove : 0.0
minusDM     = (downMove > upMove and downMove > 0) ? downMove : 0.0
smPlusDM    = ta.rma(plusDM, adxLen)
smMinusDM   = ta.rma(minusDM, adxLen)
smTR        = ta.rma(ta.tr, adxLen)
plusDI      = (smPlusDM / smTR) * 100
minusDI     = (smMinusDM / smTR) * 100
dx          = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adxValue    = ta.rma(dx, adxLen)

//-----------------------------------------------------
// Screener-Like Conditions (Technical Only)
//-----------------------------------------------------
volumeCondition   = volume > minVolume
adxCondition      = adxValue > adxThresh
rsiCondition      = rsiValue > rsiBuyThresh
atrCondition      = atrValue > minATR
aboveEmaCondition = close > emaValue

longCondition = volumeCondition and adxCondition and rsiCondition and atrCondition and aboveEmaCondition

//-----------------------------------------------------
// Strategy Entry / Exit Logic
//-----------------------------------------------------
var bool inTrade = false

// Entry
if longCondition and not inTrade
    strategy.entry("Long", strategy.long)

// Basic Exit Condition: RSI < 50 or Price < EMA
exitCondition = (rsiValue < 50) or (close < emaValue)
if inTrade and exitCondition
    strategy.close("Long")

// Update inTrade status
inTrade := strategy.position_size > 0

//-----------------------------------------------------
// Multi-Level Stop-Loss & Partial Profits
//-----------------------------------------------------
if inTrade
    float entryPrice = strategy.position_avg_price

    // Stop-Loss
    float stopPrice     = entryPrice * (1 - stopLossPerc / 100)

    // Two partial take-profit levels
    float tp1Price      = entryPrice * (1 + takeProfit1Perc / 100)
    float tp2Price      = entryPrice * (1 + takeProfit2Perc / 100)

    // Example approach: exit half at TP1, half at TP2
    strategy.exit("TP1/SL",     from_entry="Long", stop=stopPrice,    limit=tp1Price, qty_percent=50)
    strategy.exit("TP2",        from_entry="Long", limit=tp2Price,    qty_percent=50)

//-----------------------------------------------------
// Dynamic Drawdown Handling
//-----------------------------------------------------
var float peakEquity = strategy.equity
peakEquity := math.max(peakEquity, strategy.equity)

currentDrawdownPerc = (peakEquity - strategy.equity) / peakEquity * 100
if currentDrawdownPerc > ddLimit
    strategy.close_all("Max Drawdown Exceeded")

//-----------------------------------------------------
// Plotting
//-----------------------------------------------------
plot(emaValue, title="EMA 200", color=color.yellow, linewidth=2)
plotchar(rsiValue, title="RSI", char='●', location=location.bottom, color=color.new(color.teal, 50))
plot(adxValue, title="Manual ADX", color=color.orange)


Verwandt

Mehr