Évasion des bandes de Bollinger avec stratégie de filtrage de volatilité

Auteur:ChaoZhang est là., Date: 2024-03-08 15h28 et 20h05
Les étiquettes:

img

Vue d'ensemble de la stratégie

La stratégie de rupture des bandes de Bollinger avec filtre de volatilité est une stratégie de trading basée sur l'indicateur des bandes de Bollinger. Elle utilise les bandes de Bollinger pour déterminer la position et la volatilité du prix par rapport à la moyenne mobile, décidant ainsi des points d'entrée et de sortie.

Principes de stratégie

Le cœur de la stratégie est le calcul de l'indicateur des bandes de Bollinger. Les bandes de Bollinger se composent de trois lignes: la ligne du milieu est une moyenne mobile simple, tandis que les bandes supérieure et inférieure sont fixées à un certain écart type au-dessus et au-dessous de la ligne du milieu, respectivement.

Les conditions d'entrée de la stratégie sont basées sur la position du prix de clôture par rapport aux bandes de Bollinger. Si la direction du commerce est définie sur long (tradeDirection>=0) et que le prix de clôture dépasse la bande inférieure d'un certain pourcentage (lower_breakout_pct), une position longue est ouverte; si la direction du commerce est définie sur short (tradeDirection<=0) et que le prix de clôture dépasse la bande supérieure d'un certain pourcentage (upper_breakout_pct), une position courte est ouverte. Les paramètres de pourcentage de rupture permettent au prix de dépasser légèrement les bandes de Bollinger avant d'entrer dans une position pour confirmer la tendance.

En revanche, si le taux de variation de deux chandeliers consécutifs dépasse le seuil de volatilité prédéfini (Volatilité), la volatilité actuelle du marché est considérée comme élevée et la stratégie n'ouvrira pas de nouvelles positions.

En termes de positions de sortie, si le prix de clôture d'une position longue atteint près de la bande supérieure (zone supérieure)long_win_pct), ou le prix de clôture d'une position courte atteint près de la bande inférieure (basse + zoneEn outre, si la perte non réalisée d'une position dépasse le pourcentage de retrait maximum prédéfini (max_drawdown_percent), la stratégie fermera également la position pour arrêter les pertes.

Les avantages de la stratégie

  1. Les bandes de Bollinger sont un indicateur technique mature et largement utilisé qui intègre des informations sur les moyennes mobiles et la volatilité des prix.

  2. La stratégie comprend à la fois une logique d'entrée longue et courte, permettant une capture flexible des opportunités sur les marchés haussiers et baissiers.

  3. Le filtre de volatilité évite d'ouvrir des positions sur des marchés extrêmement volatils, ce qui réduit dans une certaine mesure les risques associés aux transactions fréquentes et à l'effet de levier.

  4. La stratégie utilise des mécanismes de prise de profit et de stop-loss pour gérer activement les positions et les fermer lorsque les prix reviennent à des niveaux clés.

Risques stratégiques

  1. Les bandes de Bollinger sont essentiellement un indicateur en retard et ont un certain retard dans la réaction au marché.

  2. Les paramètres définis par la stratégie peuvent ne pas être universellement applicables à différentes conditions de marché. Par exemple, il peut être nécessaire de différencier la définition du seuil du filtre de volatilité dans les marchés tendance et oscillation. Les paramètres fixes peuvent empêcher la stratégie d'ouvrir des positions ou d'ouvrir trop fréquemment dans certaines conditions de marché.

  3. Bien qu'il existe des mesures d'arrêt des pertes, lorsque les lacunes du marché se produisent, la stratégie peut ne pas être en mesure d'être exécutée au prix prédéfini, ce qui entraîne des pertes plus importantes.

  4. La stratégie ne prévoit pas d'arrêt des pertes ou d'arrêt du solde après l'ouverture de positions, ce qui peut entraîner des retards de profit.

Directions d'optimisation

  1. Considérez l'introduction d'indicateurs plus techniques ou de jugements sur l'état du marché, tels que les ATR, les indicateurs de tendance, les indicateurs de volatilité, etc., comme conditions de filtrage de la stratégie pour améliorer la qualité et le calendrier des entrées.

  2. Pour le filtre de volatilité, essayez d'adopter des seuils dynamiques adaptés à différents instruments ou délais afin d'améliorer l'efficacité du filtrage.

  3. En ce qui concerne le stop-loss et le take-profit, introduisez des mécanismes de trailing stop ou de break-even stop pour permettre à la stratégie de maintenir les positions lorsque la tendance se poursuit, plutôt que de fermer les positions prématurément.

  4. Optimiser davantage la gestion des positions en ajustant dynamiquement la taille d'entrée en fonction de la force de la tendance, de la volatilité, du niveau de risque et d'autres indicateurs pour contrôler les retraits.

Résumé

La stratégie Bollinger Bands Breakout with Volatility Filter exploite la caractérisation de la position des prix et de la volatilité par les Bollinger Bands pour construire une stratégie de négociation bidirectionnelle. L'aspect unique de cette stratégie est le filtre de volatilité qui évite de négocier sur des marchés extrêmement volatils, tout en établissant des conditions de prise de profit et de stop-loss relativement simples. Dans l'ensemble, la stratégie comprend une logique d'entrée et de sortie assez complète et un contrôle des risques, mais il y a place à une optimisation supplémentaire en termes d'adaptation aux changements du marché, d'applicabilité des paramètres et d'efficacité du stop-loss. Si plus d'indicateurs techniques, de paramètres dynamiques et d'optimisations de gestion de position peuvent être introduits, la robustesse et la rentabilité de la stratégie peuvent être améliorées.


/*backtest
start: 2024-02-29 00:00:00
end: 2024-03-07 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("[Oppen Chow] Super BBS 1.0", default_qty_type = strategy.percent_of_equity, default_qty_value =100, initial_capital=500, commission_type=strategy.commission.percent, commission_value=0.08, pyramiding=2 )

// Input parameters
length = 20
mult = 2
max_drawdown_percent = input(5.5, "Maximum Acceptable Drawdown") / 100
upper_breakout_pct = input(50, "Short Entry Breakout Percentage") / 100
lower_breakout_pct = input(25, "Long Entry Breakout Percentage") / 100
tradeDirection = input(1, title="Trade Direction")
Volatility = input(0.5, title="Volatility") / 100
long_win_pct = input(-0.15, title = "Long Settlement Rate Near Boll Upper Limit")
short_win_pct = input(0.4, title = "Short Settlement Rate Near Boll Lower Limit")

// Bollinger Bands calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev
area = upper - lower

// Calculate the rate of change for two consecutive candlesticks
var float change1 = na
var float change2 = na
change1 := change2
change2 := ((close - open) / open) 

// Check for two or more consecutive candlesticks with a change rate greater than 0.5%
var bool highVolatility = false
highVolatility := change2 > Volatility

// Trading logic
var float highestPriceSinceOpen = na
var float lowestPriceSinceOpen = na
var int profitableDrawbackCount = 1


// Entry logic - In the absence of high volatility
if not highVolatility and strategy.position_size == 0
    if (tradeDirection >= 0) and (close < lower - area * lower_breakout_pct)
        strategy.entry("Long", strategy.long)
        highestPriceSinceOpen := close
        profitableDrawbackCount := 0
    if (tradeDirection <= 0) and (close > upper + area * upper_breakout_pct)
        strategy.entry("Short", strategy.short)
        lowestPriceSinceOpen := close
        profitableDrawbackCount := 0


if strategy.position_size > 0 and close > upper - area * long_win_pct
    strategy.close("Long", comment = "Take Profit")
if strategy.position_size < 0 and close < lower + area * short_win_pct
    strategy.close("Short", comment = "Take Profit")

// Stop loss logic - Based on drawdown percentage
if strategy.position_size > 0
    if (strategy.position_avg_price - close)/strategy.position_avg_price >= max_drawdown_percent
        strategy.close("Long", comment = "Drawdown Stop Loss")
else if strategy.position_size < 0
    if (close - strategy.position_avg_price)/strategy.position_avg_price >= max_drawdown_percent
        strategy.close("Short", comment = "Drawdown Stop Loss")


Plus de