Stratégie de stop-loss des bandes de Bollinger

Auteur:ChaoZhang est là., Date: 2023-11-23 15h49 et 12h
Les étiquettes:

img

Résumé

La stratégie des bandes de Bollinger est une stratégie classique qui utilise les bandes de Bollinger pour le suivi des tendances et les signaux de surachat / survente.

La stratégie évalue les conditions de surachat/survente à travers des croisements dorés/mortes des bandes de Bollinger supérieures/inférieures pour établir des positions. La zone entre les bandes reflète la fourchette de volatilité actuelle du marché. Les bandes se composent de bandes intermédiaires, supérieures et inférieures, où la bande intermédiaire est la moyenne mobile simple de N jours et les bandes supérieures/inférieures sont des bandes intermédiaires +/- K écarts types.

Principaux

Les bandes de Bollinger reflètent la volatilité du marché et la gamme d'oscillations. Toucher la bande inférieure signifie un statu quo de survente - les lacunes ont une probabilité plus élevée d'être comblées. Ainsi, les positions longues doivent être considérées sur la base du principe de la réversion moyenne. De même, toucher la bande supérieure représente des conditions potentielles de surachat et des renversements de prix probables, de sorte que des positions courtes peuvent être établies pour tirer profit des mouvements à la baisse.

Cette stratégie combine les signaux de surachat/survente des bandes de Bollinger pour les entrées de suivi de tendance.

Lorsque le prix dépasse la marge inférieure, le marché sort de la zone de survente dans une plage raisonnable. Des positions longues peuvent être ouvertes. Lorsque le prix dépasse la marge supérieure, le marché devient suracheté. Des positions courtes peuvent alors être ouvertes.

Une fois les ordres exécutés, des niveaux de stop loss pourcentage fixes sont définis pour gérer les risques.

Les avantages

  1. Identifier les niveaux de surachat/survente à l'aide des bandes de Bollinger pour les réglages d'achat à bas prix et de vente à haut prix en fonction des croisements de bandes.

  2. Capturez les tendances grâce à la propriété de volatilité des bandes de Bollinger.

  3. Le mécanisme de stop loss limite efficacement la perte maximale par transaction.

  4. La combinaison du suivi des tendances et du stop loss conduit à des gains réguliers.

Risques et optimisation

  1. Les paramètres réglés ont une incidence sur la qualité du signal. La longueur de bande moyenne N et le multiplicateur de l'écart type K doivent être réglés de manière rationnelle pour différents marchés, sinon la précision en souffrira.

  2. Un stop loss trop grand ou trop petit nuit à la stabilité du rendement. Un pourcentage trop grand risque des pertes plus lourdes par transaction, tandis qu'un pourcentage trop petit risque un stop loss prématuré. Un pourcentage raisonnable doit être défini en fonction de différents produits.

  3. Des filtres supplémentaires avec d'autres indicateurs peuvent améliorer la précision du signal.

  4. Différents réglages de périodes de détention peuvent être testés, par exemple en combinant des bandes horaires ou de périodes plus courtes pour des améliorations de la fréquence de négociation et de l'efficacité de l'utilisation du capital.

Conclusion

Cette stratégie tire parti des bandes de Bollinger pour les signaux de surachat / survente et intègre un stop loss pour contrôler les risques.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000)
source = input(close, "Source")
length = input.int(20, minval=1)
mult = input.float(2.0, minval=0.001, maxval=50, step=0.001)
stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1)

basis = ta.sma(source, length)
dev = mult * ta.stdev(source, length)
upper = basis + dev
lower = basis - dev

var float lastTradePrice = na
var float stopLossLow = na
var float stopLossHigh = na
var bool currentIsLong = na

var bool nextExpectedIsLong = true

var bool existedLong = false
var bool existedShort = false

buyEntry = ta.crossover(source, lower)
sellEntry = ta.crossunder(source, upper)

if (buyEntry and nextExpectedIsLong == true)
	strategy.entry("BBandLE", strategy.long, comment="BBandLE")
	nextExpectedIsLong := false
	if(nz(strategy.position_size[1], 0) < 0) // new position detected
	    lastTradePrice := close
	    stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
	    stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandLE")

if (sellEntry and nextExpectedIsLong == false)
	strategy.entry("BBandSE", strategy.short, comment="BBandSE")
	nextExpectedIsLong := true
	if(nz(strategy.position_size[1], 0) > 0) // new position detected
        lastTradePrice := close
        stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
        stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
else
    strategy.cancel("BBandSE")

strategy.close("BBandLE", close < stopLossLow)
strategy.close("BBandSE", close > stopLossHigh)

// if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh)
//     strategy.entry("BBandLE", strategy.long, comment="BBandLE")
// 	lastTradePrice := close
// 	stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
// 	stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))
// if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow)
//     strategy.exit("BBandSE", strategy.short, comment="BBandSE")
//     lastTradePrice := close
//     stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100))
//     stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100))

plot(source, "close", color.blue)
plot(lower, "lower", color.red)
plot(upper, "upper", color.red)
plot(stopLossLow, "StopLossLow", color.black)
plot(stopLossHigh, "StopLossHigh", color.black)
plot(lastTradePrice, "lastTradePrice", color.green)
plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green)
plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)




Plus de