Stratégie de trading de tendance avancée basée sur les bandes de Bollinger et les modèles de chandeliers

BB ATR RR PSR MA SD WBR
Date de création: 2024-11-27 14:18:33 Dernière modification: 2024-11-27 14:18:33
Copier: 1 Nombre de clics: 413
1
Suivre
1617
Abonnés

Stratégie de trading de tendance avancée basée sur les bandes de Bollinger et les modèles de chandeliers

Aperçu

Il s’agit d’une stratégie de suivi des tendances basée sur l’analyse de la forme des bandes de Bollinger et des courbes. La stratégie consiste principalement à observer les caractéristiques de la forme des courbes lorsque les prix touchent les bandes de Bollinger, en combinaison avec la relation entre le taux des entités et les courbes ascendantes et descendantes, afin de juger du revirement possible du marché.

Principe de stratégie

La logique centrale de la stratégie est basée sur les éléments clés suivants: d’abord, déterminer l’étendue des fluctuations des prix en calculant des Bollings de 20 cycles; deuxièmement, analyser le rapport entre les guides supérieurs et inférieurs du tableau de bord lorsque les prix touchent la bande de Bolling, considéré comme un potentiel signal de retournement lorsque le rapport dépasse la barre définie; troisièmement, calculer les niveaux de support et de résistance clés pour définir les points de rupture; enfin, calculer le montant de la position de chaque transaction en fonction d’un ratio fixe du total des comptes (%) pour réaliser une gestion dynamique du risque. La stratégie offre également plusieurs options d’entrée de marché, y compris le prix de clôture, le prix d’ouverture, le plus haut et le plus bas prix de la journée, etc.

Avantages stratégiques

  1. Contrôle précis des risques: un modèle de gestion des risques à taux fixe est utilisé pour s’assurer que la marge de risque de chaque transaction est contrôlable
  2. Flexibilité d’entrée: offre une large gamme de prix d’entrée adaptés à différents styles de négociation
  3. Combinaison d’indicateurs techniques: la combinaison des bandes de Bolling avec l’analyse de la forme des plots permet d’améliorer la fiabilité du signal
  4. Rationalisation des arrêts de perte: les arrêts de perte sont conformes aux lois de fonctionnement du marché via les réglages des points de résistance des supports clés
  5. Gestion de la transaction parfaite: incluant un mécanisme d’expiration des commandes, évitant les erreurs causées par les signaux d’expiration

Risque stratégique

  1. Risque de fluctuations rapides du marché: le ratio de référence peut donner de faux signaux dans des marchés très volatils
  2. Risques de gestion des fonds: le modèle de risque à taux fixe peut entraîner des positions trop petites en cas de pertes continues
  3. Risque de réglage de stop loss: le calcul des points de résistance de support peut ne pas être suffisamment précis dans certaines conditions de marché
  4. Dépendance du cycle de temps: la stratégie est principalement basée sur le niveau de la ligne solaire et peut manquer des opportunités dans des délais plus courts

Orientation de l’optimisation de la stratégie

  1. Introduction d’indicateurs de trafic: amélioration de la fiabilité du signal en ajoutant une analyse de trafic lors de la confirmation du signal
  2. Optimisation des mécanismes de stop loss: envisager l’introduction de stop loss dynamique, avec une distance de stop loss ajustée automatiquement en fonction des fluctuations du marché
  3. Augmentation du filtrage des conditions de marché: ajout d’indicateurs de force de tendance et adaptation des paramètres stratégiques en fonction des conditions de marché
  4. Amélioration de la gestion des positions: envisager l’introduction d’un mécanisme de gestion des positions dynamique, en adaptant l’ouverture au risque en fonction de la volatilité du marché
  5. Augmentation du filtrage temporel: un filtre temporel peut être ajouté pour éviter de négocier pendant les périodes de forte volatilité du marché

Résumer

La stratégie a été conçue en combinant les outils d’analyse technique classiques et les méthodes modernes de gestion des risques pour construire un système de négociation relativement parfait. Les principaux avantages de la stratégie résident dans ses contrôles rigoureux des risques et ses mécanismes d’entrée flexibles, mais elle nécessite également de prêter attention aux changements de l’environnement du marché et à la vérification de la fiabilité des signaux dans les applications pratiques.

Code source de la stratégie
/*backtest
start: 2024-01-01 00:00:00
end: 2024-11-26 00:00:00
period: 12h
basePeriod: 12h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Trade Entry Detector, based on Wick to Body Ratio when price tests Bollinger Bands", overlay=true, default_qty_type=strategy.fixed)

// Input for primary analysis time frame
timeFrame = "D"  // Daily time frame

// Bollinger Band settings
length = input.int(20, title="Bollinger Band Length", minval=1)
mult = input.float(2.0, title="Standard Deviation Multiplier", minval=0.1)
source = input(close, title="Source")

// Entry ratio settings
wickToBodyRatio = input.float(1.0, title="Minimum Wick-to-Body Ratio", minval=0)

// Order Fill Timing Option
fillOption = input.string("Daily Close", title="Order Fill Timing", options=["Daily Close", "Daily Open", "HOD", "LOD"])

// Account and risk settings
accountBalance = 100000  // Account balance in dollars
riskPercentage = 1.0     // Risk percentage per trade
riskAmount = (riskPercentage / 100) * accountBalance // Fixed 1% risk amount

// Request daily data for calculations
dailyHigh = request.security(syminfo.tickerid, timeFrame, high)
dailyLow = request.security(syminfo.tickerid, timeFrame, low)
dailyClose = request.security(syminfo.tickerid, timeFrame, close)
dailyOpen = request.security(syminfo.tickerid, timeFrame, open)

// Calculate Bollinger Bands on the daily time frame
dailyBasis = request.security(syminfo.tickerid, timeFrame, ta.sma(source, length))
dailyDev = mult * request.security(syminfo.tickerid, timeFrame, ta.stdev(source, length))
dailyUpperBand = dailyBasis + dailyDev
dailyLowerBand = dailyBasis - dailyDev

// Calculate the body and wick sizes on the daily time frame
dailyBodySize = math.abs(dailyOpen - dailyClose)
dailyUpperWickSize = dailyHigh - math.max(dailyOpen, dailyClose)
dailyLowerWickSize = math.min(dailyOpen, dailyClose) - dailyLow

// Conditions for a candle with an upper wick or lower wick that touches the Bollinger Bands
upperWickCondition = (dailyUpperWickSize / dailyBodySize >= wickToBodyRatio) and (dailyHigh > dailyUpperBand)
lowerWickCondition = (dailyLowerWickSize / dailyBodySize >= wickToBodyRatio) and (dailyLow < dailyLowerBand)

// Define the swing high and swing low for stop loss placement
var float swingLow = na
var float swingHigh = na

if (ta.pivothigh(dailyHigh, 5, 5))
    swingHigh := dailyHigh[5]

if (ta.pivotlow(dailyLow, 5, 5))
    swingLow := dailyLow[5]

// Determine entry price based on chosen fill option
var float longEntryPrice = na
var float shortEntryPrice = na

if lowerWickCondition
    longEntryPrice := fillOption == "Daily Close" ? dailyClose :
                      fillOption == "Daily Open" ? dailyOpen :
                      fillOption == "HOD" ? dailyHigh : dailyLow

if upperWickCondition
    shortEntryPrice := fillOption == "Daily Close" ? dailyClose :
                       fillOption == "Daily Open" ? dailyOpen :
                       fillOption == "HOD" ? dailyHigh : dailyLow

// Execute the long and short entries with expiration
var int longOrderExpiry = na
var int shortOrderExpiry = na

if not na(longEntryPrice)
    longOrderExpiry := bar_index + 2  // Order expires after 2 days

if not na(shortEntryPrice)
    shortOrderExpiry := bar_index + 2  // Order expires after 2 days

// Check expiration and execute orders
if (longEntryPrice and bar_index <= longOrderExpiry and high >= longEntryPrice)
    longStopDistance = close - nz(swingLow, close)
    longPositionSize = longStopDistance > 0 ? riskAmount / longStopDistance : na
    if (not na(longPositionSize))
        strategy.entry("Long", strategy.long, qty=longPositionSize)
    longEntryPrice := na  // Reset after entry

if (shortEntryPrice and bar_index <= shortOrderExpiry and low <= shortEntryPrice)
    shortStopDistance = nz(swingHigh, close) - close
    shortPositionSize = shortStopDistance > 0 ? riskAmount / shortStopDistance : na
    if (not na(shortPositionSize))
        strategy.entry("Short", strategy.short, qty=shortPositionSize)
    shortEntryPrice := na  // Reset after entry

// Exit logic: hit the opposing Bollinger Band
if (strategy.position_size > 0) // Long position
    strategy.exit("Exit Long", "Long", limit=dailyUpperBand)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Exit Short", "Short", limit=dailyLowerBand)

if (strategy.position_size > 0) // Long position
    strategy.exit("Stop Loss Long", "Long", stop=swingLow)
else if (strategy.position_size < 0) // Short position
    strategy.exit("Stop Loss Short", "Short", stop=swingHigh)

// Plot daily Bollinger Bands and levels on the chosen time frame
plot(dailyUpperBand, color=color.blue, linewidth=1, title="Daily Upper Bollinger Band")
plot(dailyLowerBand, color=color.blue, linewidth=1, title="Daily Lower Bollinger Band")
plot(dailyBasis, color=color.gray, linewidth=1, title="Daily Middle Bollinger Band")