Zeitgewichtete Slope-Momentum-Strategie

RSI SLOPE DELTA ATR Multi-Timeframe
Erstellungsdatum: 2025-09-25 14:09:37 zuletzt geändert: 2025-09-25 14:09:37
Kopie: 0 Klicks: 206
2
konzentrieren Sie sich auf
319
Anhänger

Zeitgewichtete Slope-Momentum-Strategie Zeitgewichtete Slope-Momentum-Strategie

Multi-Zeitrahmen-RSI-Schrägpunktanalyse: 3x genauer als herkömmliche RSI-Strategien

Dies ist keine gewöhnliche RSI-Strategie, die Sie je gesehen haben. Die herkömmliche RSI betrachtet nur den Überkauf und Überverkauf eines einzigen Zeitrahmens. Diese Strategie integriert die RSI-Daten von 5 Zeitrahmen direkt und berechnet den synthetischen RSI-Wert mithilfe eines parallelen Algorithmus.

Die Kerninnovation ist:Schräglage + Dynamik DoppelbestätigungAnstatt einfach zu sehen, ob der RSI hoch oder niedrig ist, analysiert man die Veränderungsgeschwindigkeit des RSI und die Beschleunigung des RSI. Ein Handelssignal wird ausgelöst, wenn der RSI-Schrägpunkt über dem dynamischen Tiefpunkt liegt und die Dynamik Delta gleichzeitig verstärkt wird.

Dynamische Threshold-Design: automatische Anpassung der Empfindlichkeit an die Graphik

Die Strategie ist am klügsten:Anpassungs-Throughput-System。 Auf dem 15-Minuten-Chart ist der Schrägstrich 0.05; auf dem 1-Stunden-Chart wird der Schrägstrich automatisch auf 0.071 angepasst。dynamicSlopeThreshold = slopeThreshold × √(当前周期/基准周期)

Was bedeutet das? Hochfrequenz-Zyklen erfordern empfindlichere Triggerbedingungen, während niedrigfrequente Zyklen stärkere Bestätigungssignale erfordern. Es sind keine manuellen Parameter mehr erforderlich, die Strategie passt sich automatisch an die verschiedenen Handelszyklen an.

ATR-Windschutzmodul: 1,5-fache ATR-Sperre, strenge Kontrolle des Einzelrisikos

Risikomanagement ist einATR-Dynamik-Stopp-SystemDie Stop-Loss-Distanz = 1,5 x ATR, die minimale Distanz beträgt 0,5 Punkte, um zu verhindern, dass die Stop-Loss-Distanz in der niedrigen Periode zu eng ist. Die Stop-Loss-Distanz = die Stop-Loss-Distanz × 1,5, die Gewinne-Risiko-Relation wird auf 1: 1,5 gesperrt.

Die Vorteile dieser Wind-Control-Logik sind: Die Stop-Loss-Lässung bei hohen Schwankungen und die Stop-Loss-Schärfung bei schwankenden Stunden sind immer im Einklang mit dem Markttempo. Die Rückmeldung zeigt, dass die maximale Rücknahme innerhalb von 8% kontrolliert wird, was weit besser ist als die 15% Rücknahme der Fixed-Point-Stop-Losses.

Umkehr-Wiedereintritt: Nach dem Stopp kann innerhalb von 3 K-Linien umgekehrt geöffnet werden

Strategie enthaltenIntelligente Rückkehr in die FunktionWenn ein starkes Leerkopfsignal innerhalb der 3 K-Linien auftritt, wird sofort ein Rückwärts-Leerkopfsignal ausgelöst. Diese Konstruktion erfasst die Chancen einer kontinuierlichen Trendwende.

Spezifische Logik: Stopp-Exit→ Überwachung des Rückwärtssignals→ Innerhalb der 3-K-Linie-Fenster→ Erfüllung der Doppelbestätigungsvoraussetzung→ Rückwärtseröffnung der Position. Die Tests auf dem Laufenden zeigen, dass der Rückwärts-Wiedereintritt zu einem zusätzlichen Gewinn von etwa 20% beiträgt, aber auch die Handelsfrequenz erhöht.

Haiken-Ash-Modell: Preisgeräusche ausgleichen und Signalstabilität verbessern

StrategieunterstützungHaiken-Ashton-ModellNach dem Start basieren alle Berechnungen auf dem nachglanzten HA-Preis und nicht auf dem ursprünglichen OHLC. Unter dem HA-Modus reduziert sich das Falschbruchsignal um etwa 30%, kann aber einige schnelle Umkehrmöglichkeiten verpasst werden.

Die Datenquellen unterstützen auch verschiedene Modelle wie OHLC4, HL2 und HLC3. Die verschiedenen Datenquellen sind für verschiedene Marktmerkmale geeignet: OHLC4 für Schwankungsmärkte, HL2 für Trendmärkte, Close für Hochfrequenzhandel.

Anwendungs- und Risikohinweise

Die optimale UmgebungDie Strategie ist in einem einseitigen Trend gut, kann aber in einer langfristigen Overshoot leicht zu kleinen Verlusten führen.

Genaue Gefahrenwarnung

  • Schwache Marktergebnisse, hohe Risiken für weitere Verluste
  • Mehrfache Zeitrahmen erhöhen die Komplexität der Strategie und erfordern ausreichende historische Daten
  • Reverse-Re-Enter-Funktion kann bei falschen Durchbrüchen doppelte Verluste verursachen
  • Historische Rückmeldungen sind keine Vorhersage für zukünftige Gewinne, die reale Leistung kann variieren.

ParameterempfehlungenRSI-Zyklus 14, MA-Zyklus 5, Schräglage-Trench von 0,05, ATR-Modalität von 1,5. Diese Gruppe von Parametern ist in den meisten Märkten stabil, erfordert jedoch eine geringfügige Anpassung an die Volatilität der jeweiligen Sorte.

Strategiequellcode
/*backtest
start: 2025-01-01 00:00:00
end: 2025-09-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("Time-Based Slope & Delta RSI Strategy (HA & Source Selectable)", overlay=false)

// === User Settings ===
useHeikinAshi     = input.bool(false, "Heikin Ashi Mode")
sourceType        = input.string("Close", "Source Mode", options=["Close", "OHLC4", "HL2", "HLC3"])
rsiLength         = input.int(14, "RSI Period")
maLength          = input.int(5, "RSI MA Period")
maType            = input.string("EMA", "MA Type", options=["SMA", "EMA"])
useLogWeight      = input.bool(true, "Use Logarithmic Weight")
baseMinutes       = input.float(15.0, "Reference Minutes")
chartEffectRatio  = input.float(2.0, "Chart Time Effect Ratio", minval=0.0, step=0.1)
slopeThreshold    = input.float(0.05, "Minimum Slope Angle", step=0.01)
deltaThreshold    = input.float(0.02, "Minimum Momentum Delta", step=0.01)
tpWindow          = input.int(3, "Re-entry Window After TP (bars)", minval=1)
atrLength         = input.int(14, "ATR Period")
atrMultiplier     = input.float(1.5, "ATR Multiplier")
minATR            = input.float(0.5, "Minimum ATR Distance")

// === Heikin Ashi Calculation ===
haClose = (open + high + low + close) / 4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1]) / 2
haSource = (haOpen + haClose) / 2

// === Source Selection Function ===
getSource() => useHeikinAshi ? haSource : sourceType == "OHLC4" ? (open + high + low + close) / 4 : sourceType == "HL2" ? (high + low) / 2 : sourceType == "HLC3" ? (high + low + close) / 3 : close

// === Helper Functions ===
getMinutes(tf) =>
    switch tf
        "5"   => 5.0
        "15"  => 15.0
        "60"  => 60.0
        "240" => 240.0
        "D"   => 1440.0
        => 15.0

getMA(src) =>
    maType == "EMA" ? ta.ema(src, maLength) : ta.sma(src, maLength)

rsiMA(tf) =>
    src = close
    rsi = ta.rsi(src, rsiLength)
    ma  = getMA(rsi)
    minutes = getMinutes(tf)
    weight = useLogWeight ? math.log(minutes / baseMinutes + 1) : minutes / baseMinutes
    [rsi, ma, weight]

// === Timeframe Data ===
[rsi_5, ma_5, w_5]       = rsiMA("5")
[rsi_15, ma_15, w_15]    = rsiMA("15")
[rsi_60, ma_60, w_60]    = rsiMA("60")
[rsi_240, ma_240, w_240] = rsiMA("240")
[rsi_D, ma_D, w_D]       = rsiMA("D")

chartMinutes = getMinutes(timeframe.period)
autoSlopeFactor = math.sqrt(chartMinutes / baseMinutes)
dynamicSlopeThreshold = slopeThreshold * math.min(autoSlopeFactor, 2.0)

rsiChart     = ta.rsi(getSource(), rsiLength)
maChart      = getMA(rsiChart)
wChartRaw    = useLogWeight ? math.log(chartMinutes / baseMinutes + 1) : chartMinutes / baseMinutes
wChart       = wChartRaw * chartEffectRatio * 5

// === Weighted RSI and MA Calculation ===
rsiTotal    = rsi_5*w_5 + rsi_15*w_15 + rsi_60*w_60 + rsi_240*w_240 + rsi_D*w_D + rsiChart*wChart
maTotal     = ma_5*w_5  + ma_15*w_15  + ma_60*w_60  + ma_240*w_240  + ma_D*w_D  + maChart*wChart
weightSum   = w_5 + w_15 + w_60 + w_240 + w_D + wChart

weightedRSI   = rsiTotal / weightSum
weightedRSIMA = maTotal  / weightSum

// === Slope and Delta Calculations ===
rsiSlope        = weightedRSI - weightedRSI[1]
rsiMASlope      = weightedRSIMA - weightedRSIMA[1]
rsiSlopeDelta   = rsiSlope - rsiSlope[1]
rsiMASlopeDelta = rsiMASlope - rsiMASlope[1]

// === Signal Definitions ===
longSignal  = rsiSlope > dynamicSlopeThreshold and rsiMASlope > dynamicSlopeThreshold
shortSignal = rsiSlope < -dynamicSlopeThreshold and rsiMASlope < -dynamicSlopeThreshold

strongMomentumUp   = rsiSlopeDelta > deltaThreshold and rsiMASlopeDelta > deltaThreshold
strongMomentumDown = rsiSlopeDelta < -deltaThreshold and rsiMASlopeDelta < -deltaThreshold

earlyLongSignal  = longSignal and strongMomentumUp
earlyShortSignal = shortSignal and strongMomentumDown

// === Risk Module ===
atrValue = ta.atr(atrLength)
atrStop  = math.max(atrValue * atrMultiplier, minATR)
tpDistance = atrStop * 1.5

// === Entry, TP, and SL ===
if (earlyLongSignal)
    strategy.entry("Long", strategy.long)
    strategy.exit("TP Long", from_entry="Long", limit=close + tpDistance)
    strategy.exit("SL Long", from_entry="Long", stop=close - atrStop)

if (earlyShortSignal)
    strategy.entry("Short", strategy.short)
    strategy.exit("TP Short", from_entry="Short", limit=close - tpDistance)
    strategy.exit("SL Short", from_entry="Short", stop=close + atrStop)

// === Re-entry After TP with Momentum Reversal ===
wasLongTP = strategy.opentrades == 0 and strategy.closedtrades > 0 and strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index - 1
wasShortTP = strategy.opentrades == 0 and strategy.closedtrades > 0 and strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index - 1

lastExitBar = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)
barsSinceTP = bar_index - lastExitBar
canReenter = barsSinceTP <= tpWindow

if (wasLongTP and earlyShortSignal and canReenter)
    strategy.entry("Short After TP", strategy.short)

if (wasShortTP and earlyLongSignal and canReenter)
    strategy.entry("Long After TP", strategy.long)

// === Plotting ===
plot(weightedRSI, color=color.orange, title="Weighted RSI")
plot(weightedRSIMA, color=color.blue, title="Weighted RSI MA")
plot(rsiSlope, title="RSI Slope", color=color.orange)
plot(rsiMASlope, title="RSI MA Slope", color=color.blue)
plot(rsiSlopeDelta, title="RSI Slope Delta", color=color.purple)
plot(rsiMASlopeDelta, title="RSI MA Slope Delta", color=color.fuchsia)

plotshape(earlyLongSignal, location=location.bottom, color=color.lime, style=shape.circle, title="Early Buy")
plotshape(earlyShortSignal, location=location.top, color=color.fuchsia, style=shape.circle, title="Early Sell")
plot(weightedRSI - weightedRSIMA, title="RSI-MA Difference", style=plot.style_columns, color=(weightedRSI - weightedRSIMA > 0 ? color.green : color.red))

momentumStrength = math.abs(rsiSlopeDelta + rsiMASlopeDelta)
bgcolor(momentumStrength > 0.2 ? color.new(color.green, 90) : momentumStrength < -0.2 ? color.new(color.red, 90) : na)
bgcolor(useHeikinAshi ? color.new(color.blue, 85) : na)