Strategie für mehrere Bollinger-Bänder für gleitende Durchschnittswerte

Schriftsteller:ChaoZhang, Datum: 2024-02-06 15:08:26
Tags:

img

Übersicht

Diese Strategie konstruiert Bollinger Bands mit verschiedenen Arten von gleitenden Durchschnitten als Eingabe, um mehr Handelsmöglichkeiten zu entdecken.

Strategie Logik

Der Kern dieser Strategie besteht darin, die durch Benutzerinput ausgewählten gleitenden Durchschnittsarten zu verwenden, darunter SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL usw. insgesamt 12, kombiniert mit Bollinger Bands, um Handelssignale zu bilden. Das mittlere Band der Bollinger Bands übernimmt den ausgewählten gleitenden Durchschnitt, während die oberen und unteren Bands eine positive/negative Standardabweichung vom mittleren Band entfernt sind.

Die wichtigsten Bestandteile des Kodex sind:

  1. Berechnungsfunktionen für 12 Arten von gleitenden Durchschnitten, einschließlich SMA, EMA, WMA usw.
  2. Die Funktion getMA gibt den entsprechenden gleitenden Durchschnitt anhand des Eingabeparameters mav zurück.
  3. Berechnung der mittleren, oberen und unteren Bands von Bollinger Bands. Das mittlere Band verwendet gleitenden Durchschnitt aus der Funktion getMA.
  4. Die Bollinger-Bänder.
  5. Generation von langen und kurzen Signalen. Gehen Sie lang, wenn der Preis unter dem unteren Band bricht, gehen Sie kurz, wenn der Preis über dem oberen Band bricht.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, mehrere Arten von gleitenden Durchschnitten bereitzustellen. Verschiedene Marktumgebungen eignen sich für verschiedene gleitende Durchschnitte in Bezug auf die Reaktionsempfindlichkeit. Die Annahme mehrerer gleitender Durchschnittsarten verbessert die Anpassungsfähigkeit der Strategie erheblich. Darüber hinaus ermöglicht diese Strategie eine Parameteroptimierung für die Längen der gleitenden Durchschnitte, um optimale Kombinationen zu finden und somit genauere Handelssignale zu erhalten.

Risikoanalyse

Das Hauptrisiko dieser Strategie liegt in chaotischen Signalen der gleitenden Durchschnitte selbst, mit Möglichkeiten mehrerer falscher Ausbrüche. Außerdem ist der Bollinger Bands Indikator sehr empfindlich auf wilde Kursschwankungen, was es für die mittlere Bands schwierig macht, den Preis effektiv zu verfolgen. Dies erfordert eine stabilere Verwendung von gleitenden Durchschnitten sowie eine angemessene Parameter-Ausrichtung.

Optimierungsrichtlinien

Die Strategie kann aus folgenden Gesichtspunkten optimiert werden:

  1. Versuche verschiedene Kombinationen von gleitenden Durchschnitten, um optimale Parameter zur Verbesserung der Signalstabilität zu finden.
  2. Hinzufügen von Stop-Loss-Mechanismen, um Verluste durch gelegentliche schlechte Signale zu begrenzen.
  3. Einbeziehung anderer Indikatoren zur Signalfilterung, um Überhandelungen zu vermeiden, z. B. MACD, KD usw.
  4. Optimieren Sie das Geldmanagement, passen Sie die Positionsgröße an.

Schlussfolgerung

Die Strategie ist insgesamt sehr innovativ und bereichert den Bollinger Bands Indikator mit anspruchsvolleren Anwendungen. Durch die Anpassung der kombinierten gleitenden Durchschnitte können genauere und stabilere Signale erhalten werden.


/*backtest
start: 2023-01-30 00:00:00
end: 2023-10-13 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands Strategy (MA type)", overlay=true)
src = input(close, title="Source")
length = input(20,step=10, minval=1)
mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev")

length1=input(26, "Long Moving Average Length", minval=1)
length2=input(9, "Trigger Length", minval=1)
T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1)
////////////
mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"])
Var_Func(src,length)=>
    valpha=2/(length+1)
    vud1=src>src[1] ? src-src[1] : 0
    vdd1=src<src[1] ? src[1]-src : 0
    vUD=sum(vud1,9)
    vDD=sum(vdd1,9)
    vCMO=nz((vUD-vDD)/(vUD+vDD))
    VAR=0.0
    VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1])
VAR=Var_Func(src,length)
DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) )
Wwma_Func(src,length)=>
    wwalpha = 1/ length
    WWMA = 0.0
    WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1])
WWMA=Wwma_Func(src,length)
Zlema_Func(src,length)=>
    zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2
    zxEMAData = (src + (src - src[zxLag]))
    ZLEMA = ema(zxEMAData, length)
ZLEMA=Zlema_Func(src,length)
Tsf_Func(src,length)=>
    lrc = linreg(src, length, 0)
    lrc1 = linreg(src,length,1)
    lrs = (lrc-lrc1)
    TSF = linreg(src, length, 0)+lrs
TSF=Tsf_Func(src,length)
HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length)))
T3e1=ema(src, length)
T3e2=ema(T3e1,length)
T3e3=ema(T3e2,length)
T3e4=ema(T3e3,length)
T3e5=ema(T3e4,length)
T3e6=ema(T3e5,length)
T3c1=-T3a1*T3a1*T3a1
T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1
T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1
T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1
T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3


getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma

    if mav == "DEMA"
        ma := DEMA
        ma

    if mav == "TMA"
        ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1)
        ma

    if mav == "VAR"
        ma := VAR
        ma

    if mav == "WWMA"
        ma := WWMA
        ma

    if mav == "ZLEMA"
        ma := ZLEMA
        ma

    if mav == "TSF"
        ma := TSF
        ma

    if mav == "HULL"
        ma := HMA
        ma

    if mav == "TILL"
        ma := T3
        ma
    ma
    
//////////
basis = getMA(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset",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))
/////////
buyEntry = crossover(src, lower)
sellEntry = crossunder(src, upper)
if (crossover(src, lower))
	strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
	strategy.cancel(id="BBandLE")
if (crossunder(src, upper))
	strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
	strategy.cancel(id="BBandSE")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)

Mehr