Quantitative Strategie für gleitenden Durchschnitt-Crossover und Stop-Loss mit dynamischer Volatilität

SMA RSI ATR RISK-TO-REWARD RATIO TREND FOLLOWING
Erstellungsdatum: 2025-04-02 11:08:39 zuletzt geändert: 2025-04-02 11:08:39
Kopie: 2 Klicks: 323
2
konzentrieren Sie sich auf
319
Anhänger

Quantitative Strategie für gleitenden Durchschnitt-Crossover und Stop-Loss mit dynamischer Volatilität Quantitative Strategie für gleitenden Durchschnitt-Crossover und Stop-Loss mit dynamischer Volatilität

Überblick

Diese quantitative Trading-Strategie ist ein umfassendes System aus einer Kombination von Moving Average Crossover, relativ starken RSI-Filter und einem dynamischen Stop-Loss-Mechanismus, der auf der realen Durchschnittsspanne basiert. Die Strategie dient hauptsächlich dazu, mittelfristige Trends zu erfassen, während man durch den RSI-Indikator ausgeht, um in überkauftem oder überverkauftem Marktumfeld einzutreten, und den ATR-Indikator verwendet, um einen dynamischen Stop-Loss zu setzen, um sich an Veränderungen in der Marktvolatilität anzupassen. Die Strategie ist besonders gut auf dem 15-Minuten-Zeitrahmen, um ein gutes Gleichgewicht zwischen der Erfassung von Tagestrends und der Vermeidung von übermäßigem Lärm in den niedrigen Zeitrahmen zu erreichen.

Strategieprinzip

Die Kernlogik der Strategie basiert auf den folgenden Schlüsselkomponenten:

  1. Moving-Average-KreuzsignaleDie Strategie verwendet zwei einfache Moving Averages (SMA), nämlich einen 50-Zyklus-Kurz- und einen 200-Zyklus-Langzeit-Mittelwert. Wenn der kurzfristige Mittelwert unter dem langfristigen Mittelwert liegt und der RSI-Wert größer als 30 ist, wird ein Mehrfachsignal ausgelöst. Diese Konstruktion dient der Identifizierung potenzieller Trendwendepunkte.

  2. RSI-FiltermechanismusDie Strategie nutzt den 14-Zyklen-RSI-Indikator zur Eintrittsfilterung. Insbesondere ist ein Übertritt nur dann erlaubt, wenn der RSI-Wert über 30 liegt, was dazu beiträgt, einen blinden Einstieg in die tiefen Überverkaufszonen zu vermeiden. Obwohl der Rahmen für die Kurzkursbedingungen im Code beibehalten wird, konzentriert sich die aktuelle Version hauptsächlich auf die Übertrittsstrategie.

  3. ATR-Dynamik ausgeschaltetDie Strategie verwendet den 14-Zyklen-ATR-Indikator, um den dynamischen Stop-Loss-Level zu berechnen. Der Stop-Loss-Level ist als Einstiegspreis minus ((ATR-Wert × Multiplikator) eingestellt, wobei der ATR-Multiplikator als 1.0 eingestellt ist. Diese dynamische Stop-Loss-Mechanismen können sich an die tatsächliche Volatilität des Marktes anpassen und bieten während hoher Schwankungen einen lockeren Stop-Loss-Raum und halten eine engere Risikokontrolle während niedrigerer Schwankungen.

  4. RisikobetragDie Strategie implementiert eine Stop-Setung basierend auf dem Risiko-Rendite-Verhältnis (RRR) mit dem Standardwert von 1,5. Die Stop-Setung wird als Einstiegspreis plus Einstiegspreis (Einstiegspreis - Stop-Loss) × Risiko-Rendite-Verhältnis berechnet, um sicherzustellen, dass die potenziellen Gewinne pro Handel im richtigen Verhältnis zum eingegangenen Risiko stehen.

Strategische Vorteile

  1. Trends mit Filter kombiniertDie Strategie nutzt nicht nur den Moving Average, um Trendänderungen zu erfassen, sondern filtert auch durch den RSI, wodurch falsche Signale reduziert und die Einstiegsqualität verbessert wird.

  2. Dynamische RisikomanagementDer ATR-basierte Stop-Mechanismus ist ein großes Highlight der Strategie, da er die Stop-Distanz an die dynamische Marktvolatilität anpasst, um das Problem eines vorzeitigen Auslösen von Fixed Stops in einem hochflüchtigen Umfeld zu vermeiden und gleichzeitig geeignete Risikokontrollen in einem niedrigen Umfeld zu erhalten.

  3. Optimierung der RisikobeträgeDie Strategie sorgt dafür, dass die potenziellen Gewinne und Risiken eines jeden Handels im Verhältnis stehen, was zu einem langfristigen Kapitalwachstum beiträgt, auch wenn die Gewinnquote nicht hoch ist.

  4. TransaktionsvisualisierungDie Strategie beinhaltet eine Echtzeit-Mapping von Stop-Loss- und Stop-Option-Positionen sowie die Markierung von abgeschlossenen Geschäften, was die Visualisierung der Strategie-Betrieb erheblich verbessert und die Rückmeldungsanalyse und Strategieoptimierung erleichtert.

  5. FinanzierungsintegrationStrategie: Die Standardstrategie ist die Verwendung eines Prozentsatzes des Gesamtwerts des Kontos zur Positionsabwicklung. Diese Methode ist flexibler als eine feste Anzahl und kann die Handelsgröße automatisch an die Größe des Kontos anpassen.

Strategisches Risiko

  1. TrendumkehrrisikoDie Lösung ist, die Einführung eines sensibleren kurzfristigen Indikator als zusätzliche Bestätigung zu betrachten, oder die RSI-Trenchwert zu ändern, um die Sensibilität für die Umkehr zu erhöhen.

  2. ParameterempfindlichkeitSchlüsselparameter der Strategie wie SMA-Zyklen, RSI-Trenchwerte, ATR-Multiplikatoren usw. haben einen signifikanten Einfluss auf die Performance. Unterschiedliche Marktumgebungen können unterschiedliche Parameter-Einstellungen erfordern, so dass eine ausreichende historische Rückführung erforderlich ist, um die optimale Kombination von Parametern zu finden.

  3. Einseitige MarktbeschränkungenDie aktuelle Version konzentriert sich hauptsächlich auf mehrere Strategien, die in einem kontinuierlich rückläufigen Markt schlechter abschneiden können. Die Lösung besteht darin, die Depositionsbedingungen im Code zu aktivieren und die Möglichkeit zu bi-Weg-Handel zu ermöglichen.

  4. Übermäßige RisikostoppungEs kann eine Obergrenze für die ATR-Multiplikatoren oder eine Kombination aus Fixed-Amount-Stop und ATR-Dynamic-Stop in Betracht gezogen werden.

  5. Unsicherheit über die Häufigkeit des HandelsDie Lösung ist die Erwägung, kurzfristige Handelssignale als Ergänzung zu verwenden oder nach der Feststellung eines Haupttrends mit einem kürzeren Indikator zu setzen.

Richtung der Strategieoptimierung

  1. Integration von mehreren ZeitrahmenDie aktuelle Strategie funktioniert nur auf einem einzigen Zeitrahmen. Eine Integration von mehreren Zeitrahmen-Analysen kann in Betracht gezogen werden, z. B. die Verwendung von höheren Zeitrahmen zur Bestätigung der Haupttrendrichtung und dann die Suche nach Einstiegspunkten in niedrigeren Zeitrahmen, um die Einstiegsgenauigkeit zu verbessern.

  2. Die Perfektion der Logik der LeereAktivierung und Optimierung der Shorting-Logik in der Strategie, so dass sie auch in fallenden Märkten wirksam ist. Dies kann eine Anpassung des Shorting-RSI-Drehwerts erfordern (z. B. ein Shorting bei einem RSI größer als 70) und verschiedene Parameter für verschiedene Marktrichtungen.

  3. Einführung von UmsatzindikatorenErwägen Sie die Integration von Handelsvolumenindikatoren in die Einstiegslogik und die Ausführung von Handelssignalen nur bei der Bestätigung von Handelsvolumen, was dazu beiträgt, die Verluste durch falsche Durchbrüche zu reduzieren.

  4. Optimierung der Anti-Epidemie-StrategieDerzeitige Strategien mit festen Risiko-Renditen als Stop-Sets können zum Teil Gewinne sperren oder Stopps verfolgen, um mehr Gewinne zu erzielen, wenn sich der Trend fortsetzt.

  5. Hinzufügen von ZeitrafferfilternDerzeit kann ein Zeitfilter für Märkte mit deutlichen Zeitabschnitten hinzugefügt werden, um den Handel in Zeiten mit geringer Liquidität oder hoher Unsicherheit zu vermeiden.

  6. Anpassungsmechanismus der ParameterDie Anpassung von Parametern an historische Schwankungen oder andere Merkmale des Marktes ermöglicht eine automatische Optimierung der Parameter für die Veränderung der Marktumgebung.

Zusammenfassen

Diese quantitative Strategie basierend auf Moving Average Crossover, RSI Filter und ATR Dynamic Stop Loss bietet einen ausgewogenen Handelsrahmen, der besonders für den Handel mit mittleren und langen Trends geeignet ist. Ihr zentraler Vorteil liegt in der nahtlosen Kombination von Technischer Indikatorenanalyse und Dynamischem Risikomanagement, um sowohl Trendänderungen zu erfassen als auch die Risikolockage entsprechend der Marktvolatilität anzupassen.

Obwohl die Strategie mit Parameter-Sensitivität und Einschränkungen für einseitige Transaktionen behaftet ist, können diese Probleme durch empfohlene Optimierungsrichtungen wie Multi-Time-Frame-Analysen, verbesserte Leerlauflogik und die Einführung von Transaktionsbestätigungen wirksam verbessert werden. Insbesondere die Kombination von dynamischen Parameter-Anpassungsmechanismen mit komplexeren Stop-Stop-Strategien könnte die Stabilität und Profitabilität der Strategie weiter verbessern.

Für Trader, die mittel- und langfristige Trends suchen und gleichzeitig Risikokontrollen berücksichtigen, bietet diese Strategie einen soliden Ausgangspunkt und hat das Potenzial, durch individualisierte Anpassungen und kontinuierliche Optimierung zu einem effizienten Handelssystem zu werden.

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

//@version=6
strategy(title=" VS-NTC> NASDQ100 Long MA+RSI+ATR", shorttitle="VS-NTC> Long NASDQ100 MA+RSI+ATR", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ————— Inputs —————
smaLenShort  = input.int(50,  title="Short SMA Length")
smaLenLong   = input.int(200, title="Long SMA Length")
rsiLen       = input.int(14,  title="RSI Length")
atrPeriod    = input.int(14,  title="ATR Period")
atrMult      = input.float(1.0, title="Stop-Loss ATR Multiplier", step=0.1)
rrRatio      = input.float(1.5, title="Risk-to-Reward Ratio",    step=0.1)

// ————— Indicator Calculations —————
smaShort = ta.sma(close, smaLenShort)
smaLong  = ta.sma(close, smaLenLong)
rsiVal   = ta.rsi(close, rsiLen)
atrVal   = ta.atr(atrPeriod)

// ————— Entry Conditions —————
// Long Condition: 50SMA > 200SMA and RSI < 70
longCondition = (smaShort < smaLong) and (rsiVal > 30)
// Short Condition: 50SMA < 200SMA and RSI > 30 (example: avoid oversold)
// Or use RSI > 70 to short if the market is overbought.
shortCondition = false
// shortCondition = (smaShort > smaLong) and (rsiVal < 35)

// ————— Entry Logic —————
if longCondition
    strategy.entry(id="Long", direction=strategy.long)

if shortCondition
    strategy.entry(id="Short", direction=strategy.short)

// ————— Stop-Loss & Take-Profit Calculation —————
var float stopPrice       = na
var float takeProfitPrice = na

// If we have a position open, we determine SL & TP differently for Long or Short.
if strategy.position_size > 0
    // We are in a Long trade
    stopPrice       := strategy.position_avg_price - (atrVal * atrMult)
    takeProfitPrice := strategy.position_avg_price + ((strategy.position_avg_price - stopPrice) * rrRatio)

    strategy.exit("Exit SL/TP", stop=stopPrice, limit=takeProfitPrice)
else if strategy.position_size < 0
    // We are in a Short trade
    stopPrice       := strategy.position_avg_price + (atrVal * atrMult)
    // For short, the distance from entry to stop is (stopPrice - entry)
    // So the take-profit is entry - that same distance times RR
    takeProfitPrice := strategy.position_avg_price - ((stopPrice - strategy.position_avg_price) * rrRatio)

    strategy.exit("Exit SL/TP", stop=stopPrice, limit=takeProfitPrice)
else
    // No open position → reset plots to na
    stopPrice       := na
    takeProfitPrice := na

// ————— Plot the Planned Stop-Loss & Take-Profit —————
plot(stopPrice,       title="Stop Loss",   color=color.red,   linewidth=2)
plot(takeProfitPrice, title="Take Profit", color=color.green, linewidth=2)


// ————— Label Each Closed Trade (Wins & Losses) —————
var int lastClosedTradeCount = 0
currentClosedCount = strategy.closedtrades

// If there's at least one new closed trade, label it
if currentClosedCount > lastClosedTradeCount
    newTradeIndex = currentClosedCount - 1

    tradeProfit  = strategy.closedtrades.profit(newTradeIndex)
    exitBarIndex = strategy.closedtrades.exit_bar_index(newTradeIndex)
    exitPrice    = strategy.closedtrades.exit_price(newTradeIndex)

    // Win label if profit > 0
    if tradeProfit > 0
        labelText  = "Win: " + str.tostring(tradeProfit)
        labelStyle = label.style_label_up
        labelColor = color.new(color.green, 0)
        label.new(exitBarIndex, exitPrice, text=labelText, style=labelStyle, color=labelColor, size=size.tiny)

    // Loss label if profit < 0
    if tradeProfit < 0
        labelText  = "Loss: " + str.tostring(tradeProfit)
        labelStyle = label.style_label_down
        labelColor = color.new(color.red, 0)
        label.new(exitBarIndex, exitPrice, text=labelText, style=labelStyle, color=labelColor, size=size.tiny)

    lastClosedTradeCount := currentClosedCount