Stratégie de cassure haussière basée sur les bandes de Bollinger et le VWAP


Date de création: 2024-02-06 14:36:26 Dernière modification: 2024-02-06 14:36:26
Copier: 1 Nombre de clics: 885
1
Suivre
1617
Abonnés

Stratégie de cassure haussière basée sur les bandes de Bollinger et le VWAP

Aperçu

Cette stratégie utilise l’indicateur de la ceinture de Burin pour suivre le VWAP, en utilisant une stratégie à plusieurs têtes si le VWAP franchit le milieu de la ceinture de Burin vers le haut et est jugé comme une rupture à plusieurs têtes; et en utilisant une stratégie à plusieurs têtes si le VWAP franchit la ceinture de Burin vers le bas et est jugé comme une rupture à vide.

Principe de stratégie

  1. Calculer le VWAP.
  2. Calculer la bande de Brin du VWAP, comprenant la voie supérieure, la voie médiane et la voie inférieure.
  3. Détermine si le VWAP a franchi la trajectoire centrale de la ceinture de Brin vers le haut et, si c’est le cas et que le prix est supérieur au point de pivot de son principal support, adopte une stratégie de pénétration à plusieurs têtes.
  4. Le stop loss est fixé à 5%.
  5. Si le VWAP dépasse le train de Bryn en descente, l’aéronef est considéré comme confirmé et la position est levée; si le stop est déclenché, elle est aussi levée.

Analyse des avantages

  1. Le VWAP est doté d’une puissante capacité de suivi des tendances, combinée à l’activation d’une courroie Brin permettant de déterminer avec précision les tendances.
  2. L’ajout d’un Pivot Point comme condition complémentaire permet de filtrer de nombreuses fausses percées et d’éviter des pertes inutiles.
  3. La stratégie de partiel départ permet de bloquer une partie des bénéfices et de contrôler les risques.
  4. Les résultats de l’enquête ont montré que la stratégie a bien fonctionné dans le marché haussier, avec une plus grande stabilité.

Analyse des risques

  1. En cas de secousse, il peut y avoir des fausses percées qui entraînent des pertes.
  2. Le Pivot Point ne peut pas éviter complètement les fausses percées, il faut combiner plus de signaux de filtrage des indicateurs.
  3. Le départ partiel a augmenté la fréquence des opérations, mais aussi les coûts de transaction.
  4. Les résultats ne sont pas les meilleurs en période de marché baissier, et il faut bien maîtriser les risques.

Direction d’optimisation

  1. Il peut être combiné avec d’autres indicateurs tels que MACD, KDJ et autres pour aider à filtrer les signaux entrants et sortants.
  2. La combinaison optimale de paramètres peut être trouvée en optimisant la longueur et l’écart-type des bandes de Bryn.
  3. Des algorithmes d’apprentissage automatique peuvent être introduits pour optimiser dynamiquement les paramètres de la bande de Boolean.
  4. Il est possible de tester différents niveaux de stop-loss pour trouver le point de stop-loss optimal.
  5. Il est possible d’ajouter un mécanisme d’adaptation au départ et d’ajuster les bénéfices cibles en fonction de la volatilité du marché.

Résumer

Cette stratégie est un système de rupture stable dans son ensemble. Son mode de fonctionnement est standardisé, les paramètres d’optimisation sont larges et adaptés aux transactions quantitatives. Il faut également veiller à contrôler les risques et à prévenir les pertes causées par des situations anormales.

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