Stratégie des bandes de Bollinger pour les moyennes mobiles multiples

Auteur:ChaoZhang est là., Date: 2024-02-06 15:08:26 Le gouvernement a décidé de mettre fin à la procédure d'expulsion.
Les étiquettes:

img

Résumé

Cette stratégie construit des bandes de Bollinger avec différents types de moyennes mobiles comme entrée pour découvrir plus d'opportunités de trading.

La logique de la stratégie

Le noyau de cette stratégie réside dans l'utilisation des types de moyennes mobiles sélectionnés par l'utilisateur, y compris SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL, etc., 12 au total, combinés avec des bandes de Bollinger pour former des signaux de trading. La bande moyenne des bandes de Bollinger adopte la moyenne mobile sélectionnée, tandis que les bandes supérieure et inférieure sont un écart type positif/négatif loin de la bande moyenne.

Les principales composantes du code sont les suivantes:

  1. Fonctions de calcul pour 12 types de moyennes mobiles, notamment SMA, EMA, WMA, etc.
  2. La fonction getMA renvoie la moyenne mobile correspondante basée sur le paramètre d'entrée mav.
  3. Calcul des bandes moyennes, supérieures et inférieures des bandes de Bollinger.
  4. - Des bandes de Bollinger.
  5. Génération de signaux longs et courts. Allez long quand le prix dépasse la bande inférieure, allez court quand le prix dépasse la bande supérieure.

Analyse des avantages

Le plus grand avantage de cette stratégie est de fournir plusieurs types de moyennes mobiles. Différents environnements de marché conviennent à différentes moyennes mobiles en termes de sensibilité à la réaction. L'adoption de plusieurs types de moyennes mobiles améliore considérablement l'adaptabilité de la stratégie. En outre, cette stratégie permet l'optimisation des paramètres pour les longueurs des moyennes mobiles, afin de trouver des combinaisons optimales et d'obtenir ainsi des signaux de trading plus précis.

Analyse des risques

Le principal risque de cette stratégie réside dans les signaux chaotiques des moyennes mobiles elles-mêmes, avec la possibilité de multiples fausses ruptures. En outre, l'indicateur Bollinger Bands est assez sensible aux fluctuations des prix, ce qui rend difficile pour la bande moyenne de suivre efficacement le prix. Cela nécessite l'utilisation de types plus stables de moyennes mobiles, ainsi qu'un réglage approprié des paramètres.

Directions d'optimisation

La stratégie peut être optimisée par les aspects suivants:

  1. Testez différentes combinaisons de moyennes mobiles pour trouver les paramètres optimaux pour améliorer la stabilité du signal.
  2. Ajouter des mécanismes de stop loss pour limiter les pertes dues à des signaux négatifs occasionnels.
  3. Incorporer d'autres indicateurs pour le filtrage des signaux, en évitant le sur-échange, par exemple MACD, KD, etc.
  4. Optimiser la gestion de l'argent, ajuster la taille des positions.

Conclusion

La stratégie est assez innovante dans l'ensemble, enrichissant l'indicateur de Bollinger Bands avec des applications plus sophistiquées. En ajustant les moyennes mobiles combinées, des signaux plus précis et plus stables peuvent être obtenus. Elle ouvre également de nouvelles idées pour optimiser les stratégies de Bollinger Bands. Avec le réglage et l'optimisation des paramètres, cette stratégie peut devenir un outil de trading très pratique.


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

Plus de