
Die Strategie nutzt die RSI-Anzeige, um zu beurteilen, ob der Markt überkauft oder überverkauft ist, und den Bereich der Preisschwankungen in Kombination mit dem Brin-Band. Darüber hinaus wird eine dynamische Resistenz gegen die Unterstützung auf Basis der hohen und niedrigen Punkte erzeugt. Die Kauf- und Verkaufsaktion wird nur durchgeführt, wenn der Preis nahe an der Resistenz liegt.
Die Strategie besteht hauptsächlich aus 3 Teilen: RSI, Brin-Band und Resistenz bei dynamischer Unterstützung.
Der RSI wird zum Teil für Überkauf und Überverkauf verwendet. Wenn der RSI unter 30 liegt, wird ein Überverkaufssignal ausgegeben. Wenn der RSI über 70 liegt, wird ein Überverkaufssignal ausgegeben.
Die Brin-Band ist ein Auf- und Abwärtstrend, der auf der Grundlage der Preismittellinie und der Standarddifferenz berechnet wird, um zu beurteilen, ob der Preis von der normalen Schwankungsbreite entfernt ist. Wenn der Preis nahe an der Oberbahn ist, wird verkauft, wenn er nahe an der Unterbahn ist, wird gekauft.
Der Resistenz-Unterstützungsbereich verwendet eine dynamische Berechnungsmethode, die den höchsten niedrigsten Preis (oder den Eröffnungs- und Schlusskurs) innerhalb eines bestimmten Zeitraums als Basis verwendet, um einen Bereich innerhalb eines bestimmten Prozentsatzes zu begrenzen und die historischen Preiswendepunkte als kritische Resistenz-Unterstützungsstellen zu erfassen. Wenn der Preis in der Nähe der kritischen Resistenz-Unterstützungsstellen steigt, wird ein Verkaufssignal ausgegeben; wenn der Preis bis zu den kritischen Unterstützungsstellen fällt, wird ein Kaufsignal ausgegeben.
Insgesamt wird die Strategie nur dann getätigt, wenn gleichzeitig die drei Bedingungen erfüllt werden: der RSI-Überkauf, der Preis ist außerhalb des Normalbereichs und der Widerstandslage der dynamischen Unterstützung nahe.
Der RSI beurteilt die Basis überkauft und überverkauft, während der Brin-Band die Preistechnik beurteilt.
Dynamische Unterstützung und Widerstandsberechnung, die der tatsächlichen Unterstützung und Widerstandsberechnung der Preisbewegung näher kommt.
Benutzer können Trendfilter hinzufügen, die mit RSI und Brin-Band kombiniert werden, um die Urteilsfähigkeit zu verbessern und den Großteil der Geräuschsignale zu filtern.
Die falsche Einstellung der RSI-Parameter kann zu Fehleinschätzungen führen. Eine zu kurze Länge des RSI erhöht die Geräusche. Die falsche Einstellung der RSI-Überkauf-Überverkauf-Schwelle kann zu Fehlern führen.
Die falsche Einstellung von Brin-Band-Parametern wie der Länge und der StdDev-Mehrzahl beeinträchtigt die Genauigkeit der Beurteilung.
Die dynamischen Unterstützungs-Widerstandswerte werden durch die Berechnung historischer Höhen und Tiefen verzögert. Benutzer sollten die Unterstützungs-Widerstandsparameter entsprechend optimieren, um die Unterstützungs-Widerstandswerte näher an den aktuellen Preis zu bringen.
Diese Strategie ist kompliziert, da mehrere Kombinationen von Indikatoren gegenseitige Interferenzen verursachen können. Der Benutzer sollte die Parameter der Indikatoren testen, um Konflikte zu verringern. Zusätzlich können die Kombinationsbedingungen entsprechend vereinfacht werden, um die Wahrscheinlichkeit von Fehleinschätzungen zu verringern.
Testen Sie die RSI-Parameter-Einstellungen, optimieren Sie die RSI-Länge und überschreiten Sie die Überverkaufsschwelle.
Testen Sie die Einstellungen der Brin-Band-Parameter, optimieren Sie die Brin-Band-Länge, multiplizieren Sie StdDev.
Optimieren Sie die dynamischen Unterstützungs-Widerstandsparameter, um die Unterstützungs-Widerstandsstufe näher am Preis zu bringen. Sie können kürzere Perioden und weniger historische Höhen und Tiefen einstellen.
Hinzufügen oder Testen anderer Hilfsindikatoren, wie KDJ, MACD usw. in Kombination mit dem RSI, um die Genauigkeit der Beurteilung zu verbessern.
Testen Sie Trendfilterparameter, optimieren Sie die Filterlänge, erhöhen Sie die Haltedauer und reduzieren Sie unnötige Umkehroperationen.
Die Strategie verwendet mehrere Indikatoren wie RSI, Brinband und Dynamische Unterstützung Widerstand, um die Vorteile der einzelnen Indikatoren zu nutzen, gegenseitig zu überprüfen, und die Urteilsfähigkeit ist stark. Gleichzeitig kann ein Trendfilter hinzugefügt werden, um den Lärm weiter zu reduzieren. Die Parameter der Strategie sind flexibel eingestellt, und der Benutzer kann die Parameterkombination an seine Bedürfnisse anpassen.
/*backtest
start: 2023-01-17 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("RSI + BB + S/R Strategy with Trend Filter", shorttitle="RSI + BB + S/R + Trend Filter", overlay=true)
// RSI Settings
rsi_length = input.int(14, title="RSI Length")
overbought = input.int(70, title="Overbought Level")
oversold = input.int(30, title="Oversold Level")
// Bollinger Bands Settings
bb_length = input.int(20, title="BB Length")
bb_deviation = input.float(2.0, title="BB Deviation")
// Dynamic Support/Resistance Settings
pivot_period = input.int(10, title="Pivot Period")
pivot_source = input.string("High/Low", title="Pivot Source", options=["High/Low", "Close/Open"])
max_pivots = input.int(20, title="Maximum Number of Pivot", minval=5, maxval=100)
channel_width = input.int(10, title="Maximum Channel Width %", minval=1)
max_sr_levels = input.int(5, title="Maximum Number of S/R Levels", minval=1, maxval=10)
min_strength = input.int(2, title="Minimum Strength", minval=1, maxval=10)
// Trend Filter Settings
use_trend_filter = input.bool(false, title="Use Trend Filter")
trend_filter_length = input.int(50, title="Trend Filter Length")
// Calculate RSI and Bollinger Bands
rsi = ta.rsi(close, rsi_length)
basis = ta.sma(close, bb_length)
deviation = ta.stdev(close, bb_length)
upper_band = basis + bb_deviation * deviation
lower_band = basis - bb_deviation * deviation
// Plot Bollinger Bands on the chart
plot(upper_band, color=color.blue, title="Upper Bollinger Band")
plot(lower_band, color=color.red, title="Lower Bollinger Band")
// Dynamic Support/Resistance Calculation
float src1 = pivot_source == "High/Low" ? high : math.max(close, open)
float src2 = pivot_source == "High/Low" ? low : math.min(close, open)
float ph = ta.pivothigh(src1, pivot_period, pivot_period)
float pl = ta.pivotlow(src2, pivot_period, pivot_period)
// Calculate maximum S/R channel zone width
prdhighest = ta.highest(300)
prdlowest = ta.lowest(300)
cwidth = (prdhighest - prdlowest) * channel_width / 100
var pivotvals = array.new_float(0)
if ph or pl
array.unshift(pivotvals, ph ? ph : pl)
if array.size(pivotvals) > max_pivots
array.pop(pivotvals)
get_sr_vals(ind) =>
float lo = array.get(pivotvals, ind)
float hi = lo
int numpp = 0
for y = 0 to array.size(pivotvals) - 1 by 1
float cpp = array.get(pivotvals, y)
float wdth = cpp <= lo ? hi - cpp : cpp - lo
if wdth <= cwidth
if cpp <= hi
lo := math.min(lo, cpp)
else
hi := math.max(hi, cpp)
numpp += 1
[hi, lo, numpp]
var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)
find_loc(strength) =>
ret = array.size(sr_strength)
for i = ret > 0 ? array.size(sr_strength) - 1 : na to 0 by 1
if strength <= array.get(sr_strength, i)
break
ret := i
ret
check_sr(hi, lo, strength) =>
ret = true
for i = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by 1
if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
if strength >= array.get(sr_strength, i)
array.remove(sr_strength, i)
array.remove(sr_up_level, i)
array.remove(sr_dn_level, i)
else
ret := false
break
ret
if ph or pl
array.clear(sr_up_level)
array.clear(sr_dn_level)
array.clear(sr_strength)
for x = 0 to array.size(pivotvals) - 1 by 1
[hi, lo, strength] = get_sr_vals(x)
if check_sr(hi, lo, strength)
loc = find_loc(strength)
if loc < max_sr_levels and strength >= min_strength
array.insert(sr_strength, loc, strength)
array.insert(sr_up_level, loc, hi)
array.insert(sr_dn_level, loc, lo)
if array.size(sr_strength) > max_sr_levels
array.pop(sr_strength)
array.pop(sr_up_level)
array.pop(sr_dn_level)
// Calculate the Trend Filter
trend_filter = use_trend_filter ? ta.sma(close, trend_filter_length) : close
// Buy Condition (RSI + Proximity to Support + Trend Filter)
buy_condition = ta.crossover(rsi, oversold) and close <= ta.highest(high, max_sr_levels) and close >= ta.lowest(low, max_sr_levels) and (not use_trend_filter or close > trend_filter)
// Sell Condition (RSI + Proximity to Resistance + Trend Filter)
sell_condition = ta.crossunder(rsi, overbought) and close >= ta.lowest(low, max_sr_levels) and close <= ta.highest(high, max_sr_levels) and (not use_trend_filter or close < trend_filter)
// Strategy Orders
strategy.entry("Buy", strategy.long, when = buy_condition)
strategy.entry("Sell", strategy.short, when = sell_condition)