Bollinger-Band-Breakout-Strategie auf Basis von VWAP

Schriftsteller:ChaoZhang, Datum: 2024-02-06 14:36:26
Tags:

img

Übersicht

Diese Strategie verwendet Bollinger-Bänder, um VWAP zu verfolgen. Sie nimmt eine Long-Position an, wenn VWAP über das mittlere Band bricht, und schließt die Position, wenn VWAP unter das untere Band bricht.

Strategie Logik

  1. Berechnen Sie VWAP.
  2. Berechnung der Bollinger-Bänder des VWAP, einschließlich der oberen, mittleren und unteren Bande.
  3. Eine Long-Position zu ergreifen, wenn der VWAP über das mittlere Band bricht und der Preis über dem Pivot-Punkt liegt.
  4. Stop-Loss auf 5% setzen.
  5. Wenn der VWAP unter dem unteren Band bricht, schließt man die Long-Position.

Analyse der Vorteile

  1. VWAP hat eine starke Trendverfolgungsfähigkeit.
  2. Das Hinzufügen des Drehpunktes filtert falsche Ausbrüche aus und vermeidet unnötige Verluste.
  3. Teilweise Ausgangssperren bei einigen Gewinnen und Risikokontrollen.
  4. Backtests zeigen eine gute Performance im Bullenmarkt mit guter Stabilität.

Risikoanalyse

  1. Anfällig für Verluste durch falsche Ausbrüche auf dem Bereichsmarkt.
  2. Pivot Points können keine falschen Signale vermeiden.
  3. Eine erhöhte Handelsfrequenz führt zu höheren Transaktionskosten.
  4. Es geht nicht gut auf einem Bärenmarkt, eine gute Risikokontrolle ist erforderlich.

Optimierungsrichtlinien

  1. Fügen Sie Indikatoren wie MACD, KDJ hinzu, um Signale zu filtern.
  2. Optimieren Sie die BB-Parameter durch Backtests.
  3. Verwenden Sie maschinelles Lernen, um BB-Parameter dynamisch zu optimieren.
  4. Testen Sie verschiedene Stop-Loss-Level, um das optimale zu finden.
  5. Zusätzliche adaptive Gewinnspanne basierend auf der Marktvolatilität.

Schlussfolgerung

Ein stabiles Breakout-System, das für den Algorithmushandel geeignet ist. Aufmerksamkeit ist auf die Risikokontrolle angewiesen. Mit weiterer Forschung und Optimierung könnte es eine ausgezeichnete Breakout-Strategie werden.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 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/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )

Mehr