
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.
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.
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.
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.
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.
Die optimale UmgebungDie Strategie ist in einem einseitigen Trend gut, kann aber in einer langfristigen Overshoot leicht zu kleinen Verlusten führen.
Genaue Gefahrenwarnung:
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.
/*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)