Strategien mit mehreren gleitenden Durchschnitten und Bollinger-Bändern


Erstellungsdatum: 2024-02-06 15:08:26 zuletzt geändert: 2024-02-06 15:08:26
Kopie: 4 Klicks: 632
1
konzentrieren Sie sich auf
1617
Anhänger

Strategien mit mehreren gleitenden Durchschnitten und Bollinger-Bändern

Überblick

Die Strategie erzeugt Brinks durch Eingabe verschiedener Arten von Moving Averages, um mehr Handelsmöglichkeiten zu erschließen. Es bietet 12 Arten von Moving Averages, die flexibel kombiniert werden können, um die besten Parameter zu erhalten.

Strategieprinzip

Der Kern der Strategie besteht darin, die von den Benutzern eingegebenen Moving Average-Typen, darunter SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL und TILL, zu nutzen, um ein Handelssignal zu erzeugen. Die mittlere Bahn des Brin-Bands verwendet einen gewählten Moving Average, wobei die obere und untere Bahn jeweils eine positive Standardabweichung haben.

Der Code besteht aus folgenden Teilen:

  1. Definition von Berechnungsfunktionen für 12 Arten von Moving Averages, darunter SMA, EMA, WMA, etc.
  2. Die getMA-Funktion gibt den entsprechenden Moving Average nach den mav-Eingabeparametern zurück.
  3. Berechnen Sie die mittleren, oberen und unteren Bahnen des Brin-Bandes. Die mittleren Bahnen werden mit der Funktion getMA berechnet.
  4. Das ist ein Brin-Band.
  5. Wachstumssignale und leere Signale. Der Preis bricht die Oberfläche, wenn er auf die Oberfläche kommt, und die Oberfläche, wenn er auf die Unterfläche kommt.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass sie mehrere Arten von Moving Averages bietet. In verschiedenen Marktumgebungen reagieren Moving Averages unterschiedlich schnell und langsam. Die Verwendung mehrerer Arten von Moving Averages kann die Anpassungsfähigkeit der Strategie erheblich verbessern.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass der Moving Average selbst zu Signalverwirrungen führt, die zu mehreren falschen Durchbrüchen führen können. Außerdem ist der Brin-Band-Indikator für starke Preisänderungen empfindlich, und die Mittelbahnlinie kann die Preise nicht effektiv verfolgen. Dies erfordert einen stabileren Moving Average-Typ und eine entsprechende Anpassung der Parameter.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Verschiedene Kombinationen von Moving Averages werden getestet, um optimale Parameter zu finden und die Signalstabilität zu verbessern.
  2. Erhöhung der Stop-Loss-Strategie, um die Verluste durch einzelne Fehlsignale zu kontrollieren.
  3. In Kombination mit anderen Indikatoren filtern Sie die Signale und vermeiden Sie häufige Transaktionen.
  4. Optimierung der Kapitalverwaltung und Anpassung der Positionen.

Zusammenfassen

Die Strategie ist insgesamt sehr innovativ und bietet eine reichhaltigere Segmentierung der Brin-Band-Indikatoren. Durch die Anpassung der Portfolio-Moving Averages können Sie ein genaueres und stabileres Signal erhalten. Sie bietet auch neue Ideen für die Optimierung der Brin-Band-Strategie. Durch die Anpassung und Optimierung der Parameter kann die Strategie zu einem sehr praktischen Handelsinstrument werden.

Strategiequellcode
/*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)