Bollinger-Band-Momentum-Breakout-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-02-05 10:53:46
Tags:

img

Übersicht

Diese Strategie kombiniert Bollinger-Band-Indikator und Volumen-Indikatoren, um starke Momentum-Breakout-Möglichkeiten über dem oberen Bollinger-Band zu identifizieren, wenn das Handelsvolumen hoch ist und Long-Positionen betreten werden.

Strategie Logik

  1. Verwenden Sie den Bollinger-Band-Indikator, um festzustellen, ob der Preis über das obere Band bricht.
  2. Verwenden Sie Handelsvolumenindikatoren, um festzustellen, ob das aktuelle Volumen signifikant über dem Durchschnitt der vergangenen Periode liegt.
  3. Eintritt man in eine Long-Position, wenn das Handelsvolumen hoch ist und der Preis über dem oberen Bollinger-Band ausbricht.
  4. Verwenden Sie gleitende Durchschnittsindikatoren, um kurz- und mittelfristige Trends zu ermitteln, um Verluste rechtzeitig zu reduzieren.

Diese Strategie berücksichtigt hauptsächlich drei Faktoren: Preisniveau, Dynamik und Trend. Wenn der Preis das obere Bollinger-Band in die Buy-Zone bricht, zeigt ein Anstieg des Handelsvolumens eine starke Dynamik und einen Kapitalzufluss an. Dies ist der richtige Zeitpunkt, um eine Long-Position zu betreten. Dann verwendet sie gleitende Durchschnitte, um den Markttrend zu bestimmen, um tote Positionen zu vermeiden. Durch die Kombination von Preisbewegung, Dynamik und Risikokontrolle zielt sie darauf ab, Gewinn aus starken Trends zu erzielen.

Vorteile

  1. Durch die Kombination von Volumenfiltern kauft es nur bei wirklich starker Dynamik, wodurch das Risiko reduziert wird.

  2. In der Lage, Verluste durch die Bestimmung des gleitenden Durchschnittstrends zeitlich zu reduzieren, wodurch der Verlust von Bestand verringert wird.

  3. Durchführte quantitative Strategie, die mehrere Indikatoren für die Entscheidungsfindung kombiniert.

  4. Klare Code-Strukturen, leicht zu lesen und zu pflegen.

Risiken

  1. Bollinger-Bänder könnten bei extremen Kursschwankungen, fehlenden Signalen oder falschen Signalen ausfallen.

  2. Keine Gewinne, wenn das Gesamthandelsvolumen gering ist.

  3. Die Trendbestimmung von gleitenden Durchschnitten könnte ebenfalls fehlschlagen, da sie nicht in der Lage ist, einen effektiven Stop-Loss vollständig zu gewährleisten.

  4. Eine falsche Einstellung der Parameter beeinträchtigt auch die Rentabilität der Strategie. Zum Beispiel kann ein zu kurzes Handelszeitfenster die Trendwende verpassen.

Optimierungsrichtlinien

  1. Hinzufügen von mehr technischen Indikatoren für eine bessere Trend- und Unterstützungs-/Widerstandsanalyse, die den Stop-Loss verbessert, z. B. Kerzenmuster, Kanäle, wichtige Unterstützungsniveaus.

  2. Hinzufügen von maschinellen Lernmodellen, um echte Ausbruchmöglichkeiten zu beurteilen und falsche Signale zu reduzieren. z. B. LSTM-Deep-Learning-Modelle.

  3. Optimierung von Kapitalmanagementstrategien wie dynamische Positionsgröße, Trailing Stop Loss zur Verringerung der Auswirkungen einzelner Handelsverluste.

  4. Testen Sie mehr Produkte und Zeitrahmen, passen Sie Parameter wie Bollinger Bands, Volumenfenster an, um die Robustheit der Strategie zu verbessern.

Schlussfolgerung

Diese Strategie integriert Bollinger Band und Handelsvolumen-Indikatoren, um starke Momentum-Kaufmöglichkeiten zu identifizieren, wobei gleitende Durchschnitte einen effektiven Stop-Loss gewährleisten. Im Vergleich zu Einzelindikator-Strategien verfügt sie über höhere Genauigkeit und Risikokontrolle. Mit modularem Design, Trendfiltern und Stop-Loss-Mechanismen bildet sie eine leicht zu optimierende Momentum-Breakout-Handelsstrategie.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KAIST291

//@version=4
initial_capital=1000
strategy("prototype", overlay=true)
length1=input(1)
length3=input(3)
length7=input(7)
length9=input(9)
length14=input(14)
length20=input(20)
length60=input(60)
length120=input(120)
ma1= sma(close,length1)
ma3= sma(close,length3)
ma7= sma(close,length7)
ma9= sma(close,length9)
ma14=sma(close,length14)
ma20=sma(close,length20)
ma60=sma(close,length60)
ma120=sma(close,length120)
rsi=rsi(close,14)
// BUYING VOLUME AND SELLING VOLUME //
BV = iff( (high==low), 0, volume*(close-low)/(high-low))
SV = iff( (high==low), 0, volume*(high-close)/(high-low))
vol = iff(volume > 0, volume, 1)
dailyLength = input(title = "Daily MA length", type = input.integer, defval = 50, minval = 1, maxval = 100)
weeklyLength = input(title = "Weekly MA length", type = input.integer, defval = 10, minval = 1, maxval = 100)
//-----------------------------------------------------------
Davgvol = sma(volume, dailyLength)
Wavgvol = sma(volume, weeklyLength)
//-----------------------------------------------------------
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
mult2= input(1.5, minval=0.001, maxval=50, title="exp")
mult3= input(1.0, minval=0.001, maxval=50, title="exp1")
mult4= input(2.5, minval=0.001, maxval=50, title="exp2")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
dev2= mult2 * stdev(src, length)
Supper= basis + dev2
Slower= basis - dev2
dev3= mult3 * stdev(src, length)
upper1= basis + dev3
lower1= basis - dev3
dev4= mult4 * stdev(src, length)
upper2=basis + dev4
lower2=basis - dev4
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))
//----------------------------------------------------
exit=(close-strategy.position_avg_price / strategy.position_avg_price*100)
bull=( BV>SV and BV>Davgvol)
bull2=(BV>SV and BV>Davgvol)
bux =(close>Supper and close>Slower and volume<Davgvol)
bear=(SV>BV and SV>Davgvol)
con=(BV>Wavgvol and rsi>80)
imInATrade = strategy.position_size != 0
highestPriceAfterEntry = valuewhen(imInATrade, high, 0)
// STRATEGY LONG //
if (bull and close>upper1 and close>Supper and high>upper and rsi<80)
    strategy.entry("Long",strategy.long)

if (strategy.position_avg_price*1.02<close)
    strategy.close("Long")
else if (low<ma9 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (ma20>close and strategy.position_avg_price<close )
    strategy.close("Long")
else if (rsi>80 and strategy.position_avg_price<close)
    strategy.close("Long")
else if (strategy.openprofit < strategy.position_avg_price*0.9-close)
    strategy.close("Long")
else if (high<upper and strategy.position_avg_price<close)
    strategy.close("Long")
//////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////
strategy.entry("Short",strategy.short,when=low<ma20 and low<lower1 and close<Slower and crossunder(ma60,ma120))

if (close<strategy.position_avg_price*0.98)
    strategy.close("Short")

else if (rsi<20)
    strategy.close("Short")



Mehr