Stratégies de bandes de Bollinger à moyennes mobiles multiples


Date de création: 2024-02-06 15:08:26 Dernière modification: 2024-02-06 15:08:26
Copier: 4 Nombre de clics: 632
1
Suivre
1617
Abonnés

Stratégies de bandes de Bollinger à moyennes mobiles multiples

Aperçu

Cette stratégie construit des bandes de Brent en entrant différents types de moyennes mobiles, afin d’explorer plus d’opportunités de négociation. Elle offre 12 types de moyennes mobiles qui peuvent être combinés de manière flexible pour obtenir les meilleurs paramètres.

Principe de stratégie

Le cœur de la stratégie est d’utiliser les types de moyennes mobiles entrées par les utilisateurs, y compris les 12 types de SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL, etc., combinés avec les indicateurs de la ceinture de blur pour former un signal de transaction. La moyenne moyenne de la ceinture de blur utilise une moyenne mobile sélective, la haute et la basse étant respectivement une différence standard positive.

Le code est principalement composé des sections suivantes:

  1. Définition d’une fonction de calcul pour 12 types de moyennes mobiles, y compris SMA, EMA, WMA, etc.
  2. La fonction getMA renvoie une moyenne mobile correspondante en fonction des paramètres d’entrée mav.
  3. Calculer la moyenne, la haute et la basse de la bande de Brin. La moyenne est obtenue en utilisant la fonction getMA.
  4. Le dessin de la ceinture de Brin
  5. Les signaux de croissance et les signaux de creux. Le prix est creux lorsqu’il franchit la trajectoire ascendante et est creux lorsqu’il franchit la trajectoire descendante.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu’elle offre plusieurs types de moyennes mobiles. Les moyennes mobiles réagissent différemment dans différents environnements de marché, et l’utilisation de plusieurs types de moyennes mobiles peut considérablement améliorer l’adaptabilité de la stratégie. De plus, la stratégie peut optimiser les paramètres de longueur des moyennes mobiles pour trouver les meilleures combinaisons, ce qui permet d’obtenir des signaux de transactions plus précises.

Analyse des risques

Le principal risque de cette stratégie réside dans la confusion du signal des moyennes mobiles elles-mêmes, avec des fausses ruptures multiples. De plus, les indicateurs des bandes de Brin sont sensibles aux fluctuations drastiques des prix, et la courbe centrale ne peut pas suivre efficacement les prix. Cela nécessite l’utilisation d’un type de moyenne mobile plus stable et l’ajustement approprié des paramètres.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Tester différentes combinaisons de moyennes mobiles pour trouver les meilleurs paramètres et améliorer la stabilité du signal.
  2. Augmentation des stratégies de stop-loss pour assurer la maîtrise des pertes causées par des signaux individuels erronés.
  3. En combinaison avec d’autres indicateurs, les signaux de filtrage sont évités.
  4. Optimisation de la gestion des fonds et ajustement des positions.

Résumer

Cette stratégie est très innovante dans son ensemble et offre une application plus riche en subdivisions pour l’indicateur des bandes de Brindes. En ajustant les moyennes mobiles de portefeuille, des signaux plus précis et plus stables peuvent être obtenus.

Code source de la stratégie
/*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)