Detrending-Strategie basierend auf dem Bollinger Bands-Prozentindikator


Erstellungsdatum: 2023-12-06 14:43:39 zuletzt geändert: 2023-12-06 14:43:39
Kopie: 0 Klicks: 654
1
konzentrieren Sie sich auf
1621
Anhänger

Detrending-Strategie basierend auf dem Bollinger Bands-Prozentindikator

Überblick

Die Strategie basiert auf Bollinger Bands Percentage Indicator in Kombination mit RSI und MFI-Indikatoren, durch die Detektion von Preisen für Finanzprodukte, die die Bollinger Band brechen und nach unten gehen, in Kombination mit RSI-Überverkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf-Überkauf.

Strategieprinzip

  1. Berechnen Sie den Brin-Band-Prozentsatz ((BB%)). BB% bedeutet, dass die Preise gegenüber der Brin-Band-Mittelbahn die Standardabweichung aufweisen und die Marktrichtung durch den Brin-Band-Kanal bestimmen.
  2. Überkaufen und überverkaufen in Kombination mit dem RSI und dem MFI. Der RSI beurteilt Überkaufen und Überverkaufen durch den Vergleich von durchschnittlichem Anstieg und durchschnittlichem Rückgang über einen Zeitraum. MFI beurteilt Überkaufen und Überverkaufen durch den Vergleich von steigendem und fallendem Handelsvolumen.
  3. Wenn der Preis von unten nach oben über die Bollinger Bands nach unten geht, machen Sie mehr; wenn der Preis von oben nach unten über die Bollinger Bands nach oben geht, machen Sie weniger. Gleichzeitig wird ein Überverkauf-Überkauf-Signal in Kombination mit RSI und MFI-Indikatoren gefiltert.

Strategische Vorteile

  1. Es ist wichtig, dass man sich nicht auf die Trends konzentriert, sondern dass man sich von den Marktbewegungen abwendet und die Ertragsschwankungen reduziert.
  2. In Kombination mit mehreren Indikatoren werden Filtersignale verwendet, um die Entscheidungsgenauigkeit zu verbessern.
  3. Die Einstellung der Parameter ist flexibel und die Strategie kann angepasst werden Risiko-Gewinn-Charakteristik.
  4. Es gibt keine spezifischen Regeln, die für hochschwankende Indizes wie Kommoditäten, Devisen und Kryptowährungen gelten.

Risiken und Lösungen

  1. Die Wahrscheinlichkeit, dass ein Brin-Band-Bruch ein falsches Signal erzeugt, ist hoch und erfordert eine Kombination von mehreren Indikatoren.
  2. Die Entscheidung über den Durchbruch signalisiert eine angemessene Lockerung, um nicht zu verpassen, dass gute Chancen verpasst werden.
  3. Anpassung der Parameter-Einstellungen zur Risikokontrolle, z. B. Anpassung der Positionsgröße, Erhöhung der Stop-Loss-Linie usw.

Optimierungsrichtung

  1. Erhöhung von Stop-Loss-Mechanismen auf Basis von Volatilität, wie z. B. der ATR.
  2. Die Einführung eines maschinellen Lernmodells zur Unterstützung der Bewertung der Qualität des Durchbruchs signalisiert.
  3. Optimierung der Mechanismen zur Auswahl der Sorten und dynamische Anpassung der Zielgruppen.
  4. Die Entscheidungssysteme werden verbessert, indem mehrere Faktoren, wie z.B. Stimmungsindikatoren und Nachrichtenseite, miteinbezogen werden.

Zusammenfassen

Die Strategie wird hauptsächlich auf nicht-trendgebundene Sorten mit hoher Volatilität angewendet, um den Trend durch eine Kombination von Brin-Band-Kanälen und Indikatoren zu bestimmen. Die Risiko-Gewinn-Charakteristik kann durch Anpassung der Parameter gesteuert werden. In der Folge können mehr Hilfsindikatoren und Modelle eingeführt werden, um die Entscheidungsqualität zu optimieren und so eine bessere Strategie zu erzielen.

Strategiequellcode
/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From Day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To Day")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()