Multiple Moving Average Crossover unterstützt RSI dynamische Parameter quantitative Handelsstrategie

RSI MA SMA EMA WMA SMMA RMA
Erstellungsdatum: 2025-01-17 16:14:38 zuletzt geändert: 2025-01-17 16:14:38
Kopie: 1 Klicks: 410
1
konzentrieren Sie sich auf
1617
Anhänger

Multiple Moving Average Crossover unterstützt RSI dynamische Parameter quantitative Handelsstrategie

Überblick

Dies ist eine quantitative Handelsstrategie, die den Relative Strength Index (RSI) mit mehreren gleitenden Durchschnitten kombiniert. Diese Strategie bestimmt hauptsächlich den Markttrend durch die Überwachung der Kreuzungssignale verschiedener Arten von gleitenden Durchschnitten (einschließlich SMA, EMA, WMA und SMMA) auf dem RSI-Indikator und kombiniert die überkauften und überverkauften Bereiche des RSI-Indikators selbst als Hilfsbasis für Urteilsvermögen, um den Markttrend zu bestimmen. Trading-Timing.

Strategieprinzip

Die Strategie umfasst im Wesentlichen die folgenden wesentlichen Berechnungsschritte:

  1. Berechnen Sie den 14-Perioden-RSI-Indikator, setzen Sie den überkauften Bereich auf 70 und den überverkauften Bereich auf 30
  2. Berechnen Sie drei gleitende Durchschnitte mit unterschiedlichen Parametern auf der RSI-Kurve:
    • MA1: 20 Perioden, optional SMA/EMA/WMA/SMMA
    • MA2: 50 Perioden, optional SMA/EMA/WMA/SMMA
    • MA3: 100 Perioden, optional SMA/EMA/WMA/SMMA
  3. Regeln für die Generierung von Handelssignalen:
    • Kaufsignal: Wenn MA2 MA3 nach oben kreuzt
    • Verkaufssignal: Wenn MA2 MA3 nach unten kreuzt
  4. Gleichzeitig wird die Abweichung des RSI-Indikators erkannt, um eine zusätzliche Referenz für Handelsentscheidungen bereitzustellen.

Strategische Vorteile

  1. Mehrere technische Indikatoren werden wechselseitig validiert, um die Zuverlässigkeit von Handelssignalen zu verbessern
  2. Der gleitende Durchschnittstyp und die Parameter sind anpassbar, was eine hohe Flexibilität bietet
  3. Mithilfe der RSI-Divergenzerkennungsfunktion können Wendepunkte am Markt im Voraus erkannt werden
  4. Durch prozentuales Positionsmanagement Risiken effektiv kontrollieren
  5. Hervorragender Visualisierungseffekt, einfach zu analysieren und zu testen

Strategisches Risiko

  1. Gleitende Durchschnittskreuzungen können einen verzögerten Effekt haben
  2. In Seitwärtsmärkten können häufig Fehlsignale auftreten
  3. Verzerrung des RSI-Indikators unter bestimmten Marktbedingungen
  4. Eine falsche Parameterauswahl kann zu zu vielen oder zu wenigen Handelssignalen führen Problemumgehung:
  • Es wird empfohlen, Markttrends und Handelsvolumen zur Kreuzvalidierung zu kombinieren
  • Die Handelsfrequenz kann durch Anpassung der gleitenden Durchschnittsparameter optimiert werden
  • Legen Sie Stop-Loss und Take-Profit fest, um das Risiko zu kontrollieren

Richtung der Strategieoptimierung

  1. Optimierung der Signalfilterung:
  • Trendbestätigungsindikatoren hinzufügen
  • Volumenanalyse hinzufügen
  1. Dynamische Optimierung der Parameter:
  • Passen Sie RSI- und MA-Parameter automatisch an die Marktvolatilität an
  • Einführung einer adaptiven Zyklusberechnungsmethode
  1. Optimierung der Risikokontrolle:
  • Entwickeln Sie einen dynamischen Stop-Loss- und Take-Profit-Mechanismus
  • Entwerfen Sie ein dynamisches Lagerverwaltungssystem

Zusammenfassen

Diese Strategie kombiniert RSI und mehrere gleitende Durchschnitte, um ein äußerst anpassungsfähiges Handelssystem aufzubauen. Der Hauptvorteil der Strategie liegt in der Kreuzvalidierung mehrerer technischer Indikatoren und der flexiblen Parameterkonfiguration. Gleichzeitig sollte jedoch auf die Verzögerung des gleitenden Durchschnitts und die Auswirkungen der Marktbedingungen auf die Strategieleistung geachtet werden. Durch kontinuierliche Optimierung und Risikokontrolle soll mit dieser Strategie eine stabile Performance bei tatsächlichen Transaktionen erzielt werden.

Strategiequellcode
/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy(title="Relative Strength Index with MA Strategy", shorttitle="RSI-MA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200)

// RSI Inputs
rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
calculateDivergence = input.bool(false, title="Calculate Divergence", group="RSI Settings", tooltip="Calculating divergences is needed in order for divergence alerts to fire.")

// RSI Calculation
change_rsi = ta.change(rsiSourceInput)
up = ta.rma(math.max(change_rsi, 0), rsiLengthInput)
down = ta.rma(-math.min(change_rsi, 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

// RSI Plot
plot(rsi, "RSI", color=#7E57C2)
hline(70, "RSI Upper Band", color=#787B86)
hline(50, "RSI Middle Band", color=color.new(#787B86, 50))
hline(30, "RSI Lower Band", color=#787B86)
fill(hline(70), hline(30), color=color.rgb(126, 87, 194, 90), title="RSI Background Fill")

// RSI-based MA Inputs
grpRSIMovingAverages = "RSI Moving Averages"
ma1Length = input.int(20, title="MA1 Length", group=grpRSIMovingAverages)
ma2Length = input.int(50, title="MA2 Length", group=grpRSIMovingAverages)
ma3Length = input.int(100, title="MA3 Length", group=grpRSIMovingAverages)
ma1Type = input.string("SMA", title="MA1 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)
ma2Type = input.string("EMA", title="MA2 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)
ma3Type = input.string("WMA", title="MA3 Type", options=["SMA", "EMA", "WMA", "SMMA"], group=grpRSIMovingAverages)

// MA Calculation Function
calcMA(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "WMA" => ta.wma(source, length)
        "SMMA" => ta.rma(source, length)

// MA Calculations
ma1 = calcMA(rsi, ma1Length, ma1Type)
ma2 = calcMA(rsi, ma2Length, ma2Type)
ma3 = calcMA(rsi, ma3Length, ma3Type)

// MA Plots
plot(ma1, title="RSI MA1", color=color.blue)
plot(ma2, title="RSI MA2", color=color.green)
plot(ma3, title="RSI MA3", color=color.red)

// Divergence (Retained from original script)
lookbackRight = 5
lookbackLeft = 5
rangeUpper = 60
rangeLower = 5
bearColor = color.red
bullColor = color.green
textColor = color.white
noneColor = color.new(color.white, 100)

_inRange(bool cond) =>
    bars = ta.barssince(cond)
    rangeLower <= bars and bars <= rangeUpper

plFound = false
phFound = false

bullCond = false
bearCond = false

rsiLBR = rsi[lookbackRight]

if calculateDivergence
    // Regular Bullish
    plFound := not na(ta.pivotlow(rsi, lookbackLeft, lookbackRight))    
    rsiHL = rsiLBR > ta.valuewhen(plFound, rsiLBR, 1) and _inRange(plFound[1])
    lowLBR = low[lookbackRight]
    priceLL = lowLBR < ta.valuewhen(plFound, lowLBR, 1)
    bullCond := priceLL and rsiHL and plFound

    // Regular Bearish
    phFound := not na(ta.pivothigh(rsi, lookbackLeft, lookbackRight))
    rsiLH = rsiLBR < ta.valuewhen(phFound, rsiLBR, 1) and _inRange(phFound[1])
    highLBR = high[lookbackRight]
    priceHH = highLBR > ta.valuewhen(phFound, highLBR, 1)
    bearCond := priceHH and rsiLH and phFound

// plot(
//      plFound ? rsiLBR : na,
//      offset=-lookbackRight,
//      title="Regular Bullish",
//      linewidth=2,
//      color=(bullCond ? bullColor : noneColor),
//      display = display.pane
//      )

plotshape(
     bullCond ? rsiLBR : na,
     offset=-lookbackRight,
     title="Regular Bullish Label",
     text=" Bull ",
     style=shape.labelup,
     location=location.absolute,
     color=bullColor,
     textcolor=textColor
     )

// plot(
//      phFound ? rsiLBR : na,
//      offset=-lookbackRight,
//      title="Regular Bearish",
//      linewidth=2,
//      color=(bearCond ? bearColor : noneColor),
//      display = display.pane
//      )

plotshape(
     bearCond ? rsiLBR : na,
     offset=-lookbackRight,
     title="Regular Bearish Label",
     text=" Bear ",
     style=shape.labeldown,
     location=location.absolute,
     color=bearColor,
     textcolor=textColor
     )

alertcondition(bullCond, title='Regular Bullish Divergence', message="Found a new Regular Bullish Divergence, `Pivot Lookback Right` number of bars to the left of the current bar.")
alertcondition(bearCond, title='Regular Bearish Divergence', message='Found a new Regular Bearish Divergence, `Pivot Lookback Right` number of bars to the left of the current bar.')

// ----- MUA/BÁN -----

// Điều kiện Mua: MA2 cắt lên MA3 và MA3 < 55
buyCondition = ta.crossover(ma2, ma3) 

// Điều kiện Bán: MA2 cắt xuống MA3 và MA3 > 40
sellCondition = ta.crossunder(ma2, ma3)

// Thực hiện lệnh Mua/Bán
if (buyCondition)
    strategy.entry("Buy", strategy.long, comment="Buy Signal")

if (sellCondition)
    strategy.close("Buy", comment="Sell Signal")



// ----- KẾT THÚC -----