
Der RSI-Deflexionsindikator ist eine quantitative Handelsstrategie, die auf einem relativ starken (RSI) basiert. Er analysiert die Differenzen zwischen dem RSI-Indikator und dem Preis, um Chancen für eine Preisumkehr zu erkennen und zu kaufen oder zu verkaufen.
Der Kern der Strategie ist der RSI. Es analysiert die Abweichung zwischen dem RSI und dem Preis. Die Abweichung ist die Abweichung zwischen dem RSI und dem Preis.
Wenn der RSI einen niedrigeren Tiefpunkt und der Preis einen höheren Tiefpunkt bildet, ist dies eine Mehrkopf-Differenz zwischen dem RSI und dem Preis. Dies ist ein Hinweis darauf, dass der Preis möglicherweise nach oben umkehren kann. Die Strategie errichtet zu diesem Zeitpunkt mehrkopfige Positionen.
Im Gegensatz dazu, wenn der RSI einen höheren Höchststand bildet, während der Preis einen niedrigeren Höchststand bildet, ist dies die Lücke zwischen dem RSI und dem Preis. Dies ist ein Hinweis darauf, dass der Preis möglicherweise rückläufig wird. Die Strategie errichtet an diesem Punkt eine Lückeposition.
Durch die Erfassung dieser Abweichungen zwischen dem RSI und den Preisen kann die Strategie die Gelegenheit für eine Preisumkehr erkennen, um zu kaufen und zu verkaufen.
Die RSI-Hochspanne hat folgende Vorteile:
Der RSI ist ein sehr wirksames Vorhersage-Signal, wenn die Abweichung vom Preis eine bevorstehende Trendwende signalisiert.
Durch das Aufbauen von Positionen an den Differenzpunkten ist es möglich, an relativ niedrigen Punkten zu kaufen und an relativ hohen Punkten zu verkaufen, was den besten Praktiken des quantitativen Handels entspricht.
Durchbrechen der Einschränkungen der herkömmlichen RSI-Strategie. Die herkömmliche RSI-Strategie konzentriert sich nur auf überkaufte und überverkaufte Bereiche. Die Strategie nutzt die Reversal-Eigenschaft des RSI-Indikators selbst, um Wendepunkte in einer präziseren Weise zu erfassen.
Einfache Parameter-Einstellung. Die Hauptparameter sind nur zwei RSI-Zyklen und Rückblick-Bereiche, sehr einfach und leicht zu optimieren.
Die RSI-Strategie mit hoher Leerheit birgt auch Risiken:
Die Abweichung kann ein falsches Signal sein. Die Abweichung zwischen dem RSI und dem Preis führt nicht unbedingt zu einer echten Preisumkehr. Manchmal entsteht eine falsche Umkehr. Dies führt zu einem Handelsverlust.
In einem Trendmarkt ist die Strategie nicht so gut. Wenn die Aktienkurse in eine klare Richtung treten, ist der Gewinnraum für die Strategie relativ gering. In diesem Fall ist es am besten, die Strategie vorübergehend auszusetzen und auf neue Schockbewegungen zu warten.
Die Strategie setzt die Renditeparameter ein, die den Verlust des Kontos beschleunigen können, wenn mehrere Verlustgeschäfte auftreten. Dies erfordert die Kontrolle der Positionsgröße und der Stop-Loss-Punkte, um das Risiko zu verringern.
Die Strategie kann auch in folgenden Bereichen optimiert werden:
In Kombination mit anderen Indikatoren Filtersignale. Sie können MACD, KDJ und andere Indikatoren hinzufügen, um den RSI-Ausfallpunkt zu überprüfen, einige falsche Signale zu filtern und die Strategie-Gewinnrate zu erhöhen.
Optimierung der RSI-Parameter. Verschiedene RSI-Zyklusparameter können getestet werden, um die RSI-Zyklus-Einstellungen zu finden, die besser zu den Merkmalen der Sorte passen.
Optimierung der Rückschau-Bereich. Der Rückschau-Bereich beeinflusst direkt die Häufigkeit der Strategie. Verschiedene Parameter können getestet werden, um die optimale Häufigkeit zu finden.
Erhöhung der Stop-Strategie. Eine angemessene Stop-Logik kann basierend auf ATR, Mobile Stop usw. eingestellt werden. Schnelle Stop-Strategie bei Verlusten kann das Risiko der Strategie effektiv kontrollieren.
Die RSI-Polarisierungsstrategie erfasst die Wendepunkte der Preisveränderungen durch die Analyse der Reversibilität des RSI-Indikators selbst. Sie ermöglicht eine Handelsstrategie, bei der niedrige und hohe Käufe erzielt werden. Im Vergleich zur traditionellen RSI-Over-Buy-Over-Sell-Strategie verwendet sie die feineren und primitiveren RSI-Eigenschaften und erhöht die Effizienz der Strategie erheblich.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//study(title="Divergence Indicator", format=format.price)
//GOOGL setting 5 , close, 3 , 1 profitLevel at 75 shows win rate 87.21 % profit factor 7.059
//GOOGL setting 8 , close, 3 , 1 profitLevel at 80 shows win rate 86.57 % profit factor 18.96
//SPY setting 5, close , 3, 3 profitLevel at 70 , shows win rate 80.34% profit factor 2.348
strategy(title="RSI Divergence Indicator", overlay=false,pyramiding=2, default_qty_value=2, default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)
len = input(title="RSI Period", minval=1, defval=9)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=3)
lbL = input(title="Pivot Lookback Left", defval=1)
takeProfitRSILevel = input(title="Take Profit at RSI Level", minval=70, defval=80)
rangeUpper = input(title="Max of Lookback Range", defval=60)
rangeLower = input(title="Min of Lookback Range", defval=5)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=false)
//useTrailStopLoss = input(false, title="Use Trailing Stop Loss")
sl_type = input("NONE", title="Trailing StopLoss Type", options=['ATR','PERC', 'NONE'])
stopLoss = input(title="Stop Loss%", defval=5, minval=1)
atrLength=input(14, title="ATR Length (for Trailing stop loss)")
atrMultiplier=input(3.5, title="ATR Multiplier (for Trailing stop loss)")
bearColor = color.purple
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)
osc = rsi(src, len)
plot(osc, title="RSI", linewidth=2, color=#8D1699)
hline(50, title="Middle Line", linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=#9915FF, transp=90)
plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
bars = barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper
//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low
oscHL = osc[lbR] > valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)
bullCond = plotBull and priceLL and oscHL and plFound
plot(
plFound ? osc[lbR] : na,
offset=-lbR,
title="Regular Bullish",
linewidth=2,
color=(bullCond ? bullColor : noneColor),
transp=0
)
plotshape(
bullCond ? osc[lbR] : na,
offset=-lbR,
title="Regular Bullish Label",
text=" Bull ",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])
// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
plot(
plFound ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bullish",
linewidth=2,
color=(hiddenBullCond ? hiddenBullColor : noneColor),
transp=0
)
plotshape(
hiddenBullCond ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bullish Label",
text=" H Bull ",
style=shape.labelup,
location=location.absolute,
color=bullColor,
textcolor=textColor,
transp=0
)
longCondition=bullCond or hiddenBullCond
//? osc[lbR] : na
//hiddenBullCond
strategy.entry(id="RSIDivLE", long=true, when=longCondition)
//Trailing StopLoss
////// Calculate trailing SL
/////////////////////////////////////////////////////
sl_val = sl_type == "ATR" ? stopLoss * atr(atrLength) :
sl_type == "PERC" ? close * stopLoss / 100 : 0.00
trailing_sl = 0.0
trailing_sl := strategy.position_size>=1 ? max(low - sl_val, nz(trailing_sl[1])) : na
//draw initil stop loss
//plot(strategy.position_size>=1 ? trailing_sl : na, color = color.blue , style=plot.style_linebr, linewidth = 2, title = "stop loss")
//plot(trailing_sl, title="ATR Trailing Stop Loss", style=plot.style_linebr, linewidth=1, color=color.purple, transp=30)
//Trailing StopLoss
////// Calculate trailing SL
/////////////////////////////////////////////////////
//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High
oscLH = osc[lbR] < valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)
bearCond = plotBear and priceHH and oscLH and phFound
plot(
phFound ? osc[lbR] : na,
offset=-lbR,
title="Regular Bearish",
linewidth=2,
color=(bearCond ? bearColor : noneColor),
transp=0
)
plotshape(
bearCond ? osc[lbR] : na,
offset=-lbR,
title="Regular Bearish Label",
text=" Bear ",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor,
transp=0
)
//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High
oscHH = osc[lbR] > valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])
// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)
hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
plot(
phFound ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bearish",
linewidth=2,
color=(hiddenBearCond ? hiddenBearColor : noneColor),
transp=0
)
plotshape(
hiddenBearCond ? osc[lbR] : na,
offset=-lbR,
title="Hidden Bearish Label",
text=" H Bear ",
style=shape.labeldown,
location=location.absolute,
color=bearColor,
textcolor=textColor,
transp=0
)
longCloseCondition=crossover(osc,takeProfitRSILevel) or bearCond
strategy.close(id="RSIDivLE", comment="Close All="+tostring(close - strategy.position_avg_price, "####.##"), when= abs(strategy.position_size)>=1 and sl_type == "NONE" and longCloseCondition)
//close all on stop loss
strategy.close(id="RSIDivLE", comment="TSL="+tostring(close - strategy.position_avg_price, "####.##"), when=abs(strategy.position_size)>=1 and (sl_type == "PERC" or sl_type == "ATR" ) and crossunder(close, trailing_sl) ) //close<ema55 and rsi5Val<20 //ema34<ema55 //close<ema89
// Calculate start/end date and time condition
startDate = input(timestamp("2019-01-01T00:00:00"), type = input.time)
finishDate = input(timestamp("2021-01-01T00:00:00"), type = input.time)
time_cond = time >= startDate and time <= finishDate