Golden Cross mit Bollinger-Band-Impulsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-21 12:01:25
Tags:

img

Übersicht

Diese Strategie kombiniert gleitende Durchschnitte, Bollinger-Bänder und Volumengewichtete Durchschnittspreis (VWAP) Indikatoren. Es tritt in Long-Positionen, wenn sich das goldene Kreuz bildet und der schnelle gleitende Durchschnitt über dem langsamen bricht. Die Strategie nutzt auch den Bollinger-Band-Kanal und berücksichtigt nur den Eintritt, wenn der Preis das untere Band berührt, wodurch häufige Ein- und Ausstiege unter Marktschwankungen vermieden werden.

Strategie Logik

Die Kernlogik beruht auf gleitenden Durchschnitten, um die Trendrichtung zu bestimmen, und Bollinger Bands, um den Schwankungsbereich für Kaufsignale zu lokalisieren.

  1. Es wird ein Aufwärtstrend ermittelt, wenn die schnelle EMA über die langsame EMA überschreitet.

  2. Wenn der Preis über dem VWAP liegt, zeigt dies, dass der Preis in einer Aufwärtstrendphase ist, die Long-Positionen begünstigt.

  3. Wenn der Preis gerade das untere Bollinger-Band berührt oder durchbricht, deutet dies darauf hin, dass der Preis in der Nähe eines Rebound-Punkts sein kann und somit eine gute Gelegenheit bietet.

  4. Ausgang von Long-Positionen mit Gewinn, wenn der Preis den oberen Bollinger-Band übersteigt.

Durch die Kombination dieser Regeln ist die Strategie in der Lage, geeignete Long-Entrys in Bullenmärkten zu finden und Stop-Loss/Profit-Taking festzulegen, um Renditen zu sichern.

Vorteile

  • Das System des goldenen Kreuzes bestimmt die Haupttrendrichtung und vermeidet kleine Gewinne und Verluste bei Konsolidierungen.

  • VWAP misst die Kurswellenrichtung für genauere Kaufsignale.

  • Die Bollinger-Bänder erhöhen die Widerstandsfähigkeit, indem sie Käufe lokalisieren und gleichzeitig Stop-Loss/Profit-Take-Locks bei Gewinnen festlegen.

  • Mehrfache Bestätigungsindikatoren erhöhen die Zuverlässigkeit.

Risiken und Lösungen

  • Das goldene Kreuz kann falsche Signale geben, die MA-Perioden optimieren und weitere Bestätigungen hinzufügen.

  • Falsche Bollinger-Parameter könnten die Strategie unwirksam machen.

  • Eine zu große Stop-Loss-Schwelle kann die Verluste nicht effektiv begrenzen.

Optimierungsrichtlinien

  • Optimieren Sie MA-Kombinationen, indem Sie verschiedene Parameter testen, um die besten zu finden.

  • Test Bollinger-Perioden und Parameter-Sätze für bessere Bandbreite und Volatilität.

  • Testen und einstellen Sie Stoppverlustbereiche, um die Risikokontrolle auszugleichen und eine vorzeitige Auslösung zu vermeiden.

Schlussfolgerung

Diese Strategie schafft ein Gleichgewicht zwischen der Entdeckung von Chancen und der Kontrolle von Risiken durch die Integration von MA-, Bollinger- und VWAP-Analysen für Einträge.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee

//@version=4
strategy(title="VWAP and BB strategy [$$]", overlay=true,pyramiding=2, default_qty_value=1, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 6, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
DST = 1 //day light saving for usa
//--- Europe
London = iff(DST==0,"0000-0900","0100-1000")
//--- America
NewYork = iff(DST==0,"0400-1300","0500-1400")
//--- Pacific
Sydney = iff(DST==0,"1300-2200","1400-2300")
//--- Asia
Tokyo = iff(DST==0,"1500-2400","1600-0100")

//-- Time In Range
timeinrange(res, sess) => time(res, sess) != 0

london = timeinrange(timeframe.period, London)
newyork = timeinrange(timeframe.period, NewYork)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate 


is_price_dipped_bb(pds,source1) =>
    t_bbDipped=false
    for i=1 to pds
        t_bbDipped:=  (t_bbDipped   or  close[i]<source1) ? true : false
        if t_bbDipped==true
            break
        else
            continue
            
    t_bbDipped


is_bb_per_dipped(pds,bbrSrc) =>
    t_bbDipped=false
    for i=1 to pds
        t_bbDipped:=  (t_bbDipped   or  bbrSrc[i]<=0) ? true : false
        if t_bbDipped==true
            break
        else
            continue
            
    t_bbDipped
    

// variables  BEGIN
shortEMA = input(50, title="fast EMA", minval=1)
longEMA = input(200, title="slow EMA", minval=1)

//BB

smaLength = input(7, title="BB SMA Length", minval=1)
bbsrc = input(close, title="BB Source")

strategyCalcOption = input(title="strategy to use", type=input.string, options=["BB", "BB_percentageB"],      defval="BB")



//addOnDivergence = input(true,title="Add to existing on Divergence")
//exitOption = input(title="exit on RSI or BB", type=input.string, options=["RSI", "BB"],      defval="BB")

//bbSource = input(title="BB  source", type=input.string, options=["close", "vwap"],      defval="close")
     
//vwap_res = input(title="VWAP Resolution", type=input.resolution, defval="session")
stopLoss = input(title="Stop Loss%", defval=1, minval=1)

//variables  END

longEMAval= ema(close, longEMA)
shortEMAval= ema(close, shortEMA)
ema200val = ema(close, 200)


vwapVal=vwap(close)



// Drawings

//plot emas
plot(shortEMAval, color = color.green, linewidth = 1, transp=0)
plot(longEMAval, color = color.orange, linewidth = 1, transp=0)
plot(ema200val, color = color.purple, linewidth = 2, style=plot.style_line ,transp=0)



//bollinger calculation 
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
basis = sma(bbsrc, smaLength)
dev = mult * stdev(bbsrc, smaLength)
upperBand = basis + dev
lowerBand = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

bbr = (bbsrc - lowerBand)/(upperBand - lowerBand) 
//bollinger calculation 

//plot bb
//plot(basis, "Basis", color=#872323, 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=#198787, transp=95)


plot(vwapVal, color = color.purple, linewidth = 2, transp=0)


// Colour background

//barcolor(shortEMAval>longEMAval and close<=lowerBand ? color.yellow: na)
  

//longCondition=  shortEMAval > longEMAval and  close>open and  close>vwapVal
longCondition=  ( shortEMAval > longEMAval  and close>open and close>vwapVal and close<upperBand ) //and time_cond //     and  close>=vwapVal 



//Entry
strategy.entry(id="long", comment="VB LE" , long=true,  when= longCondition and ( strategyCalcOption=="BB"? is_price_dipped_bb(10,lowerBand) : is_bb_per_dipped(10,bbr)  )   and strategy.position_size<1 )   //is_price_dipped_bb(10,lowerBand))  //and strategy.position_size<1       is_bb_per_dipped(15,bbr) 


//add to the existing position
strategy.entry(id="long", comment="Add" , long=true,  when=strategy.position_size>=1 and close<strategy.position_avg_price and close>vwapVal) //and time_cond)

barcolor(strategy.position_size>=1  ? color.blue: na)



strategy.close(id="long", comment="TP Exit",   when=crossover(close,upperBand) )

//stoploss
stopLossVal =   strategy.position_avg_price * (1-(stopLoss*0.01) )
//strategy.close(id="long", comment="SL Exit",   when= close < stopLossVal)

//strategy.risk.max_intraday_loss(stopLoss, strategy.percent_of_equity)

Mehr