Quantitative Handelsstrategie auf Basis von Bollinger-Bändern und MACD

Schriftsteller:ChaoZhang, Datum: 2024-02-23 14:30
Tags:

img

Übersicht

Diese Strategie ist eine quantitative Handelsstrategie, die auf Bollinger Bands und MACD-Indikatoren basiert.

Strategieprinzip

Die Strategie verwendet hauptsächlich Bollinger-Bänder und MACD-Indikatoren zur Bestimmung von Handelssignalen.

Bollinger Bands bestehen aus einem mittleren Band, einem oberen Band und einem unteren Band. Ein Kaufsignal wird erzeugt, wenn der Preis durch das untere Band bricht. Ein Verkaufssignal wird erzeugt, wenn der Preis durch das obere Band bricht.

Der MACD-Indikator spiegelt die Beziehung zwischen kurzfristigen und langfristigen gleitenden Durchschnitten wider. Er verwendet Crossovers der Differenzlinie und Signallinie, um Ein- und Ausstiegspunkte zu bestimmen. Diese Strategie integriert die Verwendung von MACD-Indikatoren, um Bollinger Bands-Handelssignale zu filtern und wirksamere Kaufsignale zu generieren, wenn die Differenzlinie über die Signallinie kreuzt.

Insgesamt kombiniert die Strategie die Trendverfolgung der Bollinger-Bänder mit den Vorteilen des gleitenden Durchschnitts des MACD, um stärkere Marktschwankungen bei starken Trends zu erfassen.

Vorteile der Strategie

  1. Die Kombination von Bollinger Bands und MACD-Indikatoren macht Handelssignale zuverlässiger.

  2. Bollinger-Bands-Trendverfolgung und MACD-Geschwindigkeitsquerschnitte können stärkere Eintrittssignale in Trendmärkte erzeugen.

  3. Falsche Signale können durch ein doppeltes Indikator-Urteilsvermögen effektiv gefiltert werden, wodurch das Handelsrisiko verringert wird.

  4. Es besteht ein großer Raum für die Optimierung der Parameter der Strategie, die je nach verschiedenen Produkten und Zyklen angepasst werden kann.

Risiken der Strategie

  1. In den Märkten mit Range-Bindungen können Handelssignale, die durch Bollinger-Bänder und MACD erzeugt werden, häufig vorkommen und Risiken für einen Überhandel mit sich bringen.

  2. Bei drei aufeinanderfolgenden MACD-Goldkreuzen auf niedrigen Niveaus besteht das Risiko einer Umkehrung.

  3. Die Strategie verwendet mehrere Indikatoren, was die Optimierung von Parametern und die Strategieprüfung recht schwierig macht.

Um diesen Risiken entgegenzuwirken, können Methoden wie die Anpassung von Haltezeiten, das Setzen von Stop-Losses und die Optimierung von Parametern zur Kontrolle verwendet werden.

Richtungen für die Optimierung der Strategie

  1. Testen Sie längerfristige Bollinger-Bänderparameter, um die Handelsfrequenz zu reduzieren.

  2. Optimierung der MACD-Schnellen- und Langsamlinienparameter zur Verbesserung der Indikatorempfindlichkeit.

  3. Hinzufügen anderer Indikatoren für die Filterung, wie KDJ, RSI usw., um die Signalqualität zu verbessern.

  4. Einstellen dynamischer Stopps, um automatisch aus den Trades auszusteigen und Einzelhandelsrisiken zu kontrollieren.

Schlussfolgerung

In der Theorie kann diese Strategie durch die Integration von Bollinger Bands Breakout-Handel und MACD-Indikator-Filterung qualitativ hochwertige Handelssignale erzeugen. Durch Parameteroptimierung und Risikokontrollmaßnahmen können gute Backtest-Ergebnisse erzielt werden. Jedoch kann keine Strategie Verluste vollständig vermeiden. Die tatsächliche Handelsleistung erfordert eine umsichtige Bewertung.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Mehr