Stratégie quantitative basée sur l'inversion de la bande de Bollinger

Auteur:ChaoZhang est là., Date: 2023-11-22 17:44:40 Je vous en prie.
Les étiquettes:

img

Résumé

La stratégie s'appelle Bollinger Band Reversal Based Quantitative Strategy. Elle utilise les rails supérieurs et inférieurs des bandes de Bollinger pour déterminer les entrées et les sorties. Lorsque le prix est près du rail inférieur des bandes et montre des signes de rupture à la baisse, cela indique que le prix peut être en train d'inverser, alors allez long. Lorsque le prix monte au rail supérieur, cela indique que le prix peut inverser à la baisse, alors allez court.

La logique de la stratégie

La stratégie utilise l'indicateur RSI pour déterminer les entrées longues. Plus précisément, elle vérifie si le prix de clôture de la barre la plus récente est inférieur au prix le plus bas des 6 barres précédentes, pendant ce temps, la largeur de la bande de Bollinger (BBW) est supérieure à un seuil et le ratio de bande de Bollinger (BBR) est dans une plage. Si ces critères sont remplis, cela indique que le prix peut être inversé, alors allez long.

La sortie est simple. Lorsque le RSI dépasse 70, indiquant que le prix est surchauffé, fermez la position longue.

Analyse des avantages

Le plus grand avantage de cette stratégie est l'utilisation des rails supérieurs et inférieurs des bandes de Bollinger pour déterminer les entrées. Lorsque BB inverse la direction, allez long ou court pour saisir les opportunités d'inversion à court terme.

De plus, la stratégie est sensible aux paramètres. En réglant BBW et BBR, elle peut être optimisée pour différents produits et obtenir de meilleurs résultats.

Analyse des risques

Le principal risque réside dans le fait que BB ne prédit pas parfaitement les renversements de prix.

En outre, les fluctuations à court terme peuvent déclencher des entrées et des sorties fréquentes, augmentant les coûts des commissions et des dérapages.

Directions d'optimisation

La stratégie peut être améliorée dans les domaines suivants:

  1. Optimiser les paramètres: tester et ajuster plus finement les BBW, BBR et autres paramètres pour différents produits.

  2. Ajouter des mécanismes de stop loss, tels que le stop loss de suivi et le stop loss de temps, pour limiter les pertes maximales.

  3. Incorporer d'autres indicateurs, tels que KDJ et MACD, pour rendre les entrées plus fiables.

  4. Améliorer la logique de sortie. La sortie actuelle est simple. Peut être optimisée avec la prise de profit ou les sorties basées sur la volatilité.

Conclusion

Cette stratégie utilise les caractéristiques des bandes de Bollinger pour déterminer les points d'inversion potentiels pour les entrées et les sorties. Par rapport à des indicateurs uniques comme le RSI, elle a un chronométrage plus précis. Avec l'ajustement des paramètres, l'arrêt des pertes et la prise de bénéfices, elle peut être plus fiable. Mais la prédiction de BB n'est pas parfaite, il y a donc encore un certain hasard dans la performance.


/*backtest
start: 2022-11-15 00:00:00
end: 2023-11-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

//study(title = "Bolinger strategy", overlay=true)
strategy("Bolinger strategy",currency="SEK",default_qty_value=10000,default_qty_type=strategy.cash,max_bars_back=50)
len = 5
src = close
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


bbw3level = input(15, title="bbw3")
bbr3level = input(0.45, title="bbr3level")
bbrlower = input(0.4480, title="bbrlower")
bbrhigher = input(0.4560, title="bbrhigher")
sincelowestmin = input(7, title="sincelowestmin")
sincelowestmax = input(57, title="sincelowestmax")


length = input(20, minval=1)
mult = 20
src3 = close[3]
basis3 = sma(src3, length)
dev3 = mult * stdev(src3, length)
upper3 = basis3 + dev3
lower3 = basis3 - dev3
bbr3 = (src3 - lower3)/(upper3 - lower3)
bbw3 = (upper3-lower3)/basis3*100


basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
bbr = (src - lower)/(upper - lower)
bbw = (upper-lower)/basis*100

criteriamet = 0
crossUnderB0 = crossunder(bbr,0)

since_x_under = barssince(crossUnderB0)


sincelowest = barssince(close[6] > close[3] and close[5] > close[3] and close[4] > close[3] and close[2] > close[3] and close[1] > close[3] and close > close[3] and bbw3 > bbw3level and bbr3 < bbr3level) //  and bbr3 < 0 

if sincelowest > sincelowestmin and sincelowest < sincelowestmax and bbr > bbrlower and bbr < bbrhigher
	criteriamet := 1
else
	criteriamet := 0	
//plot (criteriamet)

//exit 
exitmet = 0
if rsi > 70
	exitmet := 1
else
	exitmet := 0

if criteriamet == 1
	strategy.entry("long", strategy.long)
if exitmet == 1
	strategy.close("long")



Plus de