Trendfolgestrategie basierend auf Bollinger-Bändern


Erstellungsdatum: 2024-01-15 14:31:21 zuletzt geändert: 2024-01-15 14:31:21
Kopie: 0 Klicks: 556
1
konzentrieren Sie sich auf
1617
Anhänger

Trendfolgestrategie basierend auf Bollinger-Bändern

Überblick

Diese Strategie, die als Trend-Tracking-Strategie für Bollinger-Bands bezeichnet wird, verwendet die Bollinger-Bands-Indikatoren, um die Preisentwicklung zu bestimmen und bei einem Preisbruch in den Bollinger-Bands-Kanal einzugreifen. Sie kombiniert ein Gleichlinienfilter, um die Richtung des Trends zu bestimmen, wenn ein Bruch auftritt, und entscheidet sich somit für einen Überschuss.

Strategieprinzip

Die Strategie basiert hauptsächlich auf den BollingerBands, um die Preisentwicklung zu bestimmen. BollingerBands umfassen drei Linien:

  1. Mittlere Linie: Moving Average für n Tage
  2. Oberseite: Aufwärtsbewegung mit einer Standardabweichung von n Tagen
  3. Bottom Line: Abwärts bewegt, n Tage Standarddifferenz entfernt

Wenn der Preis von der unteren Linie nach oben bricht, wird davon ausgegangen, dass ein bullisher Trend entsteht; wenn der Preis von der oberen Linie nach unten bricht, wird davon ausgegangen, dass ein bearisher Trend entsteht. Die Strategie besteht darin, bei diesen beiden Durchbrüchen mehr zu machen.

Die Logik der Strategie lautet:

  1. Wenn der Kurs von der Bands-Unterlinie auf die Linie kommt, machen Sie einen Aufschlag.
  2. Kurzfristige Eintritte, wenn der Schlusskurs von den oberen Bands die unteren durchbricht

Um falsche Durchbrüche zu filtern, wird die Strategie mit einer Mittellinie beurteilt. Der Einstieg wird nur ausgelöst, wenn der Schlusskurs gleichzeitig die Bands durchbricht und die Mittellinie durchbricht.

Der Exponential Moving Average wird hier als Mittelwert verwendet.

Die Strategie beurteilt Trends wie folgt:

  1. Mehr Signale: Der Kurs überschreitet die Bands && Der Kurs überschreitet die Durchschnittslinie
  2. Kurzfristige Signal: Kurzfristige Kursüberschreitung Bands nach unten && Kurzfristige Kursüberschreitung Durchschnitt

Nach dem Eintritt folgt der Stop-Loss-Methode der Mittellinie. Wenn der Preis die Mittellinie wieder berührt, wird der Stop-Loss beendet.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Der Bands-Kanal bietet Raum für Preisschwankungen, und ein Durchbruch bedeutet, dass die Preise eine neue Richtung beginnen zu bilden.
  2. Durch die Kombination mit einer einheitlichen Linie-Filterung wird das Problem des falschen Durchbruchs vermieden, um sicherzustellen, dass der Einstieg nur dann erfolgt, wenn eine echte Trendwende eintritt.
  3. Mit einem eingebauten Stop-Mechanismus, der aktiven Stop-Verlust bei der Rückkehr des Preises zur mittleren Bandlinie ermöglicht, wird das Risiko effektiv kontrolliert.
  4. Die Strategie ist klar und einfach zu verstehen und zu implementieren.
  5. Die Bands-Kanal- und Gleichgewichtsindikatoren sind besser geeignet, um Trends zu beurteilen, ohne die Preise vorherzusagen, und die Trends auf der Grundlage von Nachbeweisen zu beurteilen.

Risikoanalyse

Obwohl diese Strategie einige Vorteile hat, gibt es folgende Risiken:

  1. Die falsche Einstellung der Bands-Parameter kann zu einer erhöhten Handelsfrequenz und Handelsrisiken führen. Wenn die Parameter zu sensibel sind, kann es zu einer großen Anzahl von False-Breakouts führen, die zu häufigen Positionseröffnungen führen.
  2. Eine falsche Auswahl der Mittellinienparameter kann auch dazu führen, dass ein echter Trend verpasst oder ein falsches Signal erzeugt wird. Die Parameter-Einstellungen müssen wiederholt getestet und optimiert werden.
  3. Der Stop-Loss ist auf die Mittellinie angewiesen und kann zu früh aufhören oder den Preisen zu viel Spielraum geben. Dies kann dazu führen, dass ein Großteil der Gewinne verpasst wird oder das Risiko von Verlusten erhöht wird.

Um die oben genannten Risiken zu kontrollieren, können Optimierungen in folgenden Bereichen vorgenommen werden:

  1. Richtige Anpassung der Bands-Parameter zur Erhöhung der Kanalbreite und Verringerung der Wahrscheinlichkeit eines falschen Durchbruchs
  2. Verschiedene Arten und Längen von Durchschnittslinien testen, um die beste Kombination zu finden
  3. Versuchen Sie andere Stop-Methoden, z. B. Trend-Tracking-Stopps oder schrittweise Stop-Movements

Optimierungsrichtung

Nach der oben beschriebenen Risikoanalyse kann die Strategie in folgenden Bereichen weiter optimiert werden:

  1. ParameteroptimierungDie Strategie ist stabiler und profitabler, wenn die optimale Kombination von Bands und Durchschnittsparametern durch systematischere Methoden wie genetische Algorithmen gefunden wird.

  2. Stop-Loss-OptimierungTest verschiedener Stopp-Methoden, wie ATR-Stopp, Tracking-Stopp usw., um optimale Stopp-Mechanismen zu ermitteln.

  3. FilteroptimierungVersuchen Sie, andere Indikatoren wie RSI, KD usw. als zusätzliche Filterbedingungen hinzuzufügen, um die Wahrscheinlichkeit von Falschsignalen zu verringern und die Rentabilität zu erhöhen.

  4. Optimierte EintrittsbedingungenDie Eintrittszeiten werden streng geprüft, um unnötige Positionen zu reduzieren.

  5. Maschinelles LernenDas Ziel ist es, mehr historische Daten zu sammeln, Modelle mit Deep Learning-Modellen wie LSTM, RNN und anderen zu erstellen, und die KI zu nutzen, um die besten Einstiegs- und Ausstiegspunkte zu bestimmen.

  6. Risikomanagement und ErtragsdynamikDie Strategie des Unternehmens besteht darin, die Risiken und Gewinne dynamisch zu verwalten.

Durch die Optimierung der oben genannten Aspekte können die Indikatoren wie die Stabilität, die Rendite und die Risikomanagementfähigkeit der Strategie verbessert werden, um eine algorithmische Strategie zu werden, die für den Handel in der Praxis geeignet ist.

Zusammenfassen

Insgesamt ist die BollingerBands-Trend-Tracking-Strategie, die die Bands-Indikatoren und die Preis-Trend-Bewertung nutzt, bei einem Durchbruch an einem wichtigen Punkt eingeschaltet ist, eine Trend-Tracking-Strategie. Sie hat die Vorteile von Urteilssicherheit, Logik, Einfachheit und einfacher Umsetzung. Es gibt auch einige Optimierungsmöglichkeiten wie Parameteroptimierung und Stop-Loss-Methoden.

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

//VERSION =================================================================================================================
//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// This strategy is intended to study.
// It can also be used to signal a bot to open a deal by providing the Bot ID, email token and trading pair in the strategy settings screen.
// As currently written, this strategy uses a Bollinger Bands for trend folling, you can use a EMA as a filter.
//Autor Credsonb (M4TR1X_BR)

//▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
//STRATEGY ================================================================================================================

strategy(title = 'BT-Bollinger Bands - Trend Following',
         shorttitle = 'BBTF',
         overlay = true )


//▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
// CONFIG =================================================================================================================

// TIME INPUTS
usefromDate = input.bool(defval = true, title = 'Start date', inline = '0', group = "Time Filters")
initialDate = input(defval = timestamp('01 Jan 2022 00:00 UTC'), title = '', inline = "0",group = 'Time Filters',tooltip="This start date is in the time zone of the exchange ")
usetoDate = input.bool(defval = true, title = 'End date', inline = '1', group = "Time Filters")
finalDate = input(defval = timestamp('31 Dec 2029 23:59 UTC'), title = '', inline = "1",group = 'Time Filters',tooltip="This end date is in the time zone of the exchange")

// TIME LOGIC 
inTradeWindow = true

// ENABLE LONG SHORT OPTIONS
string entrygroup ='Long/Short Options ==================================='
checkboxLong = input.bool(defval=true, title="Enable Long Entrys",group=entrygroup)
checkboxShort = input.bool(defval=true, title="Enable Short Entrys",group=entrygroup)


// BOLLINGER BANDS INPUTS ==================================================================================================
string bbgroup ='Bollinger Bands ======================================'
bbLength = input.int(defval=20,title='BB Length', minval=1, step=5, group=bbgroup)
bbStddev = input.float(defval=2, title='BB StdDev', minval=0.5, group=bbgroup)

//BOLLINGER BANDS LOGIC
[bbMiddle, bbUpper, bbLower] = ta.bb(close, bbLength, bbStddev)


// MOVING AVERAGES INPUTS ================================================================================================
string magroup =  'Moving Average ======================================='
useEma = input.bool(defval = true, title = 'Moving Average Filter',inline='', group= magroup,tooltip='This will enable or disable Exponential Moving Average Filter on Strategy')
emaType=input.string (defval='Ema',title='Type',options=['Ema','Sma'],inline='', group= magroup)
emaSource = input.source(defval=close,title="  Source",inline="", group= magroup)
emaLength = input.int(defval=100,title="Length",minval=0,inline='', group= magroup)

// MOVING AVERAGE LOGIC
float ema = emaType=='Ema'? ta.ema(emaSource,emaLength): ta.sma(emaSource,emaLength)

// BOT MESSAGES
string msgroup='Alert Message For Bot ================================'
messageEntry = input.string("", title="Strategy Entry Message",group=msgroup)
messageExit  =input.string("",title="Strategy Exit Message",group=msgroup)
messageClose = input.string("", title="Strategy Close Message",group=msgroup)




// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
// POSITIONS =============================================================================================================

//VERIFY IF THE BUY FILTERS ARE ON OR OFF 
bool emaFilterBuy = useEma? (close > ema):(close >= ema) or (close <= ema)                      

//LONG / SHORT POSITIONS LOGIC
bool openLongPosition  = (close[1] < bbUpper) and (close > bbUpper)   and (emaFilterBuy)
bool openShortPosition = (close[1] > bbLower) and (close < bbLower) and (emaFilterBuy)
//bool closeLongPosition = (close > bbMiddle)
//bool closeShortPosition= (close < bbLower)


// CHEK OPEN POSITONS =====================================================================================================
// open signal when not already into a position
bool validOpenLongPosition = openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) <= 0
bool longIsActive = validOpenLongPosition or strategy.opentrades.size(strategy.opentrades - 1) > 0

bool validOpenShortPosition = openShortPosition and strategy.opentrades.size(strategy.opentrades - 1) <= 0
bool shortIsActive = validOpenShortPosition or strategy.opentrades.size(strategy.opentrades - 1) < 0

longEntryPoint = high
if (openLongPosition) and (inTradeWindow) and (checkboxLong)
    strategy.entry(id = 'Long Entry', direction = strategy.long, stop = longEntryPoint, alert_message=messageEntry)

if not (openLongPosition)
    strategy.cancel('Long Entry')

//submit exit orders for trailing take profit price 
if (longIsActive) and (inTradeWindow)
    strategy.exit(id = 'Long Exit',  stop=bbMiddle, alert_message=messageExit)

//if (closeLongPosition)
   // strategy.close(id = 'Long Entry', alert_message=messageClose)
      

shortEntryPoint = low 
if (openShortPosition) and (inTradeWindow) and (checkboxShort)
    strategy.entry(id = 'Short Entry', direction = strategy.short, stop = shortEntryPoint, alert_message=messageEntry)

if not(openShortPosition)
    strategy.cancel('Short Entry')

if (shortIsActive)
    strategy.exit(id = 'Short Exit',  stop = bbMiddle, alert_message=messageExit)

//if (closeShortPosition)
    //strategy.close(id = 'Short Close', alert_message=messageClose)

// ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
// PLOTS ===============================================================================================================

// TRADE WINDOW ========================================================================================================
bgcolor(color = inTradeWindow ? color.new(#089981,90):na, title = 'Time Window')

// EMA/SMA 
var emafilterColor = color.new(color.white, 0)
plot(series=useEma? ema:na, title = 'EMA Filter', color = emafilterColor, linewidth = 2, style = plot.style_line)

// BOLLINGER BANDS
plot(series=bbUpper, title = "Upper Band", color = color.aqua)//, display = display.none)
plot(series=bbMiddle, title = "MA Band", color = color.red)//, display = display.none)
plot(series=bbLower, title = "Lower Band", color = color.aqua)//, display = display.none)

// PAINT BARS COLORS
bool bulls = (close[1] < bbUpper[1]) and (close > bbUpper)
bool bears = (close[1] > bbLower [1]) and (close < bbLower)
neutral_color = color.new(color.black, 100)
barcolors = bulls ? color.green : bears ? color.red : neutral_color
barcolor(barcolors)

// ======================================================================================================================