Stratégie de trading à volatilité dynamique basée sur les bandes de Bollinger et les modèles de chandeliers

BB SMA ATR RSI ROC MTF
Date de création: 2024-11-29 16:29:01 Dernière modification: 2024-11-29 16:29:01
Copier: 0 Nombre de clics: 497
1
Suivre
1617
Abonnés

Stratégie de trading à volatilité dynamique basée sur les bandes de Bollinger et les modèles de chandeliers

Aperçu

La stratégie est un système de négociation basé sur l’analyse de la morphologie des bandes de Brin et des rayons pour capturer les opportunités de retournement de marché en analysant les fluctuations des prix et les caractéristiques des rayons au niveau de la ligne solaire. Le cœur de la stratégie est la combinaison des canaux de volatilité des bandes de Brin et des relations de taux entre les lignes d’ombre et les entités sur le graphique, à la recherche de signaux de retournement potentiels lorsque les prix touchent les limites des bandes de Brin. Le système prend en charge l’analyse à cycles multiples et est capable de négocier sur des périodes de temps plus courtes tout en conservant l’analyse au niveau de la ligne solaire.

Principe de stratégie

La stratégie utilise une bande de bourlingue de 20 cycles comme indicateur technique principal, avec un facteur de différence standard de 2,0. Le système émet un signal de transaction en calculant le rapport entre le haut et le bas de la courbe et l’entité, lorsque ce rapport dépasse le seuil de réglage (par défaut 1,0) et que le prix touche la frontière de la bande de bourlingue. Le timing d’entrée offre la possibilité de choisir avec souplesse le cours de récolte du jour, le prix d’ouverture du lendemain, le sommet ou le bas de la journée.

Avantages stratégiques

  1. L’analyse multidimensionnelle, combinée à l’analyse des indicateurs techniques et des tendances des prix, améliore la fiabilité du signal.
  2. Mécanisme d’entrée flexible: offre une large gamme d’options d’entrée adaptées aux différents styles de négociation.
  3. Une bonne gestion des risques: contrôler les risques grâce à une portée dynamique des positions et à un arrêt automatique des pertes.
  4. Compatibilité multi-périodes: les transactions peuvent être exécutées sur des périodes plus courtes tout en conservant l’analyse de la ligne du jour.
  5. Autonomie élevée: l’automatisation est réalisée de la reconnaissance des signaux à la gestion des positions.

Risque stratégique

  1. Risque de fluctuation du marché: il peut y avoir de faux signaux dans un marché très volatile.
  2. Risque de retard: l’utilisation de données de ligne solaire peut entraîner une réaction insuffisante dans les marchés rapides.
  3. Sensitivité des paramètres: le choix des paramètres de la bande de Brin et des valeurs de seuil du ratio de ligne d’ombre peut avoir un impact significatif sur la performance de la stratégie.
  4. Risques liés à la liquidité: dans les marchés moins liquides, il peut être difficile de négocier au prix attendu.

Orientation de l’optimisation de la stratégie

  1. Introduction de l’analyse de la quantité d’échange: la combinaison de données de la quantité d’échange pour vérifier l’efficacité du renversement des prix.
  2. Augmenter le filtrage des conditions de marché: ajouter des indicateurs de force de tendance pour filtrer les conditions défavorables du marché.
  3. Les paramètres d’optimisation s’adaptent à eux-mêmes: les paramètres de la bande de Bryn et le seuil du ratio de ligne d’ombre sont ajustés en fonction de la dynamique des fluctuations du marché.
  4. Améliorer les contrôles des risques: augmenter les contrôles de rétractation et les mécanismes de surveillance de la courbe des intérêts.
  5. Confirmation du signal renforcé: introduction d’autres indicateurs techniques comme outils de confirmation auxiliaires.

Résumer

Il s’agit d’un système de trading complet qui combine l’analyse des bandes de Brin et des diagrammes pour capturer les opportunités de retournement du marché grâce à une analyse multidimensionnelle. L’avantage de la stratégie réside dans son cadre d’analyse complet et son système de gestion des risques parfait, mais il faut également tenir compte de l’impact de l’environnement du marché et du choix des paramètres sur la performance de la stratégie.

Code source de la stratégie
/*backtest
start: 2023-11-29 00:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
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")