Les bandelettes de Bollinger et la stratégie quantitative de négociation basée sur le VWAP

Auteur:ChaoZhang est là., Date: le 04 janvier 2024
Les étiquettes:

img

Résumé

Cette stratégie combine les bandes de Bollinger (BB) et les indicateurs de prix moyen pondéré par volume (VWAP) pour prendre des décisions d'entrée et de sortie.

La logique de la stratégie

La stratégie repose principalement sur les règles suivantes pour l'entrée et la sortie:

  1. Ligne EMA rapide au-dessus de la ligne EMA lente comme condition préalable pour juger de la tendance

  2. Acheter lorsque le prix de clôture est supérieur à VWAP indiquant un prix à la hausse

  3. Entrez long si le prix de clôture est tombé en dessous de la bande inférieure BB au cours des 10 dernières barres indiquant une anomalie des prix

  4. Vendre lorsque le prix de clôture dépasse la bande supérieure BB indiquant un renversement de prix

Plus précisément, il juge d'abord si l'EMA de 50 jours est supérieure à l'EMA de 200 jours pour déterminer la tendance globale. Puis combiné avec VWAP pour juger si le prix est dans une tendance haussière à court terme. Enfin, en utilisant les bandes de Bollinger pour détecter une baisse d'anomalie à court terme comme opportunité d'entrée.

La règle de sortie est simple, sortie lorsque le prix dépasse la bande supérieure BB indiquant l'inversion du prix.

Analyse des avantages

La stratégie combine plusieurs indicateurs pour augmenter la validité des signaux d'entrée. L'utilisation des EMA pour juger de la tendance globale évite les transactions contre tendance.

Analyse des risques

  1. Une évaluation erronée de la tendance de l'EMA entraînant une négociation contre tendance
  2. VWAP plus adapté aux données horaires ou intradiennes, moins efficace pour les données quotidiennes
  3. Réglage incorrect des paramètres BB, bandes trop larges ou trop étroites signal manquant

Pour atténuer les risques, les paramètres de l'EMA et du BB peuvent être ajustés. Testez différents indicateurs pour détecter la tendance. Utilisez VWAP dans un délai plus court. Optimisez le paramètre BB pour une meilleure bande passante.

Des possibilités d'amélioration

  1. Testez d'autres indicateurs pour la détection de tendance tels que le MACD
  2. Optimiser les paramètres EMA et BB
  3. Ajouter un mécanisme de stop loss
  4. Ajouter des filtres pour éviter les faux signaux
  5. Tests antérieurs sur différents produits et délais

Conclusion

La stratégie combine BB et VWAP pour détecter les anomalies de prix à court terme en tant que timing d'entrée. L'utilisation des EMA pour déterminer la tendance globale évite de négocier contre tendance. Elle peut rapidement détecter l'élan à court terme. Convient pour le trading intradien et à court terme. Améliore davantage la stabilité et la rentabilité en optimisant les paramètres et en incorporant plus de logique.


/*backtest
start: 2023-12-04 00:00:00
end: 2024-01-03 00:00:00
period: 1h
basePeriod: 15m
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 [EEMANI]", overlay=true,pyramiding=2, default_qty_value=3, default_qty_type=strategy.fixed,    initial_capital=10000, currency=currency.USD)
//This strategy combines VWAP and BB indicators
//BUY RULE
//1. EMA50 > EMA 200
//2. if current close > vwap session  value 
//3. check if  price dipped BB lower band for any of last 10 candles
//EXIT RULE
//1. price closes above BB upper band   
//STOP LOSS EXIT
//1. As configured --- default is set to 5%

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
    
// variables  BEGIN
shortEMA = input(50, title="fast EMA", minval=1)
longEMA = input(200, title="slow EMA", minval=1)

//BB

smaLength = input(20, title="BB SMA Length", minval=1)
bbsrc = input(close, title="BB Source")



//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=5, minval=1)

//variables  END




longEMAval= ema(close, longEMA)
shortEMAval= ema(close, shortEMA)


vwapVal=vwap(close)



// Drawings

//plot emas
plot(longEMAval, color = color.orange, linewidth = 1, transp=0)
plot(shortEMAval, color = color.green, linewidth = 1, 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)
//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 = 1, 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>=vwapVal and close>open  //      close>vwapVal   and   



//Entry
strategy.entry(id="VWAP_BB LE", comment="VB LE" , long=true,  when= longCondition and  is_price_dipped_bb(10,lowerBand) )  //and strategy.position_size<1 

//add to the existing position
//strategy.entry(id="VWAP_RSI LE", comment="VR LE Add" , long=true,  when= addOnDivergence==true and strategy.position_size>=1 and close<strategy.position_avg_price   and (close<lowerBand or  low<lowerBand) and rsiVal>rsi_buy_line)

barcolor(strategy.position_size>=1  ? color.blue: na)



strategy.close(id="VWAP_BB LE", comment="TP Exit VB LE",   when=crossover(close,upperBand) )

//stoploss
stopLossVal =   strategy.position_avg_price * (1-(stopLoss*0.01) )
strategy.close(id="VB LE", comment="SL Exit",   when= close < stopLossVal)



Plus de