Stratégie de rupture des bandes de Bollinger de la moyenne mobile de la Golden Cross


Date de création: 2023-11-21 12:01:25 Dernière modification: 2023-11-21 12:01:25
Copier: 0 Nombre de clics: 820
1
Suivre
1617
Abonnés

Stratégie de rupture des bandes de Bollinger de la moyenne mobile de la Golden Cross

Aperçu

Cette stratégie combine les indicateurs des moyennes mobiles, des bandes de Brin et des moyennes pondérées en volumes de transactions pour juger de l’entrée dans les conditions de formation de la fourche dorée et de traversée de la longueur de la moyenne sur la courte moyenne. La stratégie utilise également le canal de la bande de Brin, qui ne considère l’entrée que lorsque le prix touche la bande de Brin, afin d’éviter une entrée fréquente dans les fluctuations des prix.

Principe de stratégie

Cette stratégie consiste principalement à déterminer la direction de la tendance à l’aide d’indicateurs de la ligne moyenne, en utilisant les points de vente de la zone de fluctuation de la position de Boer. Plus précisément, la stratégie contient les règles clés suivantes:

  1. construire un système de jugement de fourche en utilisant l’EMA de 50 jours et l’EMA de 200 jours, considéré comme étant en tendance haussière à plusieurs têtes lorsqu’il traverse une moyenne mobile lente sur une moyenne mobile rapide;

  2. Le prix étant supérieur au VWAP, il est considéré comme étant en phase de hausse et favorable à la construction d’une position plus importante;

  3. Le fait que le cours ait touché ou dépassé la trajectoire de descente de Brin indique que le cours pourrait être proche du point de rebond et qu’il y a de meilleures chances;

  4. Après avoir entré dans des positions multiples, le prix a dépassé le seuil d’arrêt lorsque Brin est entré dans la voie.

La combinaison de ces règles permet à la stratégie de choisir le bon point d’achat et de mettre un stop loss pour assurer un gain.

Avantages stratégiques

  • L’utilisation d’un système d’évaluation de la fourchette d’or pour déterminer la direction de la tendance générale et éviter les gains et les pertes mineurs dans une situation de choc;

  • L’indicateur VWAP permet de déterminer la direction des fluctuations des prix et de choisir plus précisément le point d’achat.

  • Les indicateurs de la courbe de Brin permettent de déterminer le point d’achat, ce qui rend la stratégie plus résiliente, tout en fixant un stop-loss pour bloquer les gains.

  • Plusieurs indicateurs se vérifient les uns les autres pour rendre les décisions stratégiques plus précises et plus fiables.

Risques stratégiques et solutions

  • Le système de jugement de la fourchette d’or peut émettre un faux signal, la longueur du cycle de la ligne moyenne doit être raccourcie de manière appropriée et doit être vérifiée avec d’autres indicateurs;

  • Les paramètres de la bande de Boolean mal définis peuvent également rendre la stratégie inefficace, et les paramètres de la période de la bande de Boolean et de l’écart-type doivent être ajustés.

  • Le paramètre du point de rupture est trop lâche et ne permet pas de contrôler efficacement les pertes. Le périmètre de rupture doit être ajusté de manière appropriée pour assurer la maîtrise des risques.

Orientation de l’optimisation de la stratégie

  • Optimiser les combinaisons d’équilibre des fourches dorées, tester les différents paramètres d’équilibre et trouver le paramètre optimal;

  • tester les paramètres de la bande de Bryn à différentes périodes pour trouver la meilleure combinaison de paramètres d’amplitude et de dispersion;

  • Tester et optimiser la portée de l’arrêt de la perte afin de contrôler efficacement le risque et de ne pas le déclencher trop facilement.

Résumer

Cette stratégie utilise un système intégré d’équilibrage, des bandes de broyage et des indicateurs VWAP pour déterminer le moment d’entrée, en équilibrant les opportunités de découverte et les risques de contrôle. Par l’optimisation des paramètres ultérieurs et la modification des règles, il est prévu de saisir les opportunités persistantes dans l’industrie et le marché.

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