Stratégie de rupture de la bande de Bollinger basée sur le VWAP

Auteur:ChaoZhang est là., Date: 2024-02-06 14h36: 26
Les étiquettes:

img

Résumé

Cette stratégie utilise des bandes de Bollinger pour suivre le VWAP. Elle adopte une position longue lorsque le VWAP se déplace au-dessus de la bande du milieu et ferme la position lorsque le VWAP se déplace en dessous de la bande inférieure.

La logique de la stratégie

  1. Calculer le VWAP.
  2. Le montant de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée.
  3. Prendre une position longue lorsque le VWAP dépasse la bande moyenne et que le prix est au-dessus du point pivot.
  4. Réglez le stop-loss à 5%.
  5. Si le VWAP tombe en dessous de la bande inférieure, fermez la position longue.

Analyse des avantages

  1. Avec BB, il identifie avec précision le début de la tendance.
  2. L'ajout du point pivot filtre les fausses écarts, évitant ainsi des pertes inutiles.
  3. Des blocages partiels dans certains bénéfices et des contrôles de risque.
  4. Les tests antérieurs montrent une bonne performance sur le marché haussier avec une bonne stabilité.

Analyse des risques

  1. Prédisposé à des pertes dues à de fausses évasions sur un marché à fourchette.
  2. Les Pivot Points ne peuvent pas éviter complètement les faux signaux.
  3. La fréquence accrue des échanges entraîne des coûts de transaction plus élevés.
  4. Il ne fonctionne pas bien sur un marché baissier.

Directions d'optimisation

  1. Ajoutez des indicateurs comme MACD, KDJ pour filtrer les signaux.
  2. Optimisez les paramètres de BB par des backtests.
  3. Utilisez l'apprentissage automatique pour optimiser dynamiquement les paramètres BB.
  4. Testez différents niveaux de stop loss pour trouver l'optimum.
  5. Ajoutez des bénéfices adaptatifs basés sur la volatilité du marché.

Conclusion

Un système de rupture stable adapté au trading algorithmique. Il faut faire attention au contrôle des risques. Avec des recherches et une optimisation supplémentaires, il pourrait devenir une excellente stratégie de rupture.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 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/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , 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=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )

Plus de