Les ressources ont été chargées... Je charge...

Stratégie de négociation dynamique de volatilité basée sur des bandes de Bollinger et des modèles de chandeliers

Auteur:ChaoZhang est là., Date: 2024-11-29 16:29:01 Je suis désolé
Les étiquettes:BBSMAATRIndice de résistanceROCMTF

img

Résumé

Cette stratégie est un système de trading basé sur les bandes de Bollinger et l'analyse des modèles de bougies, conçu pour capturer les inversions de marché en analysant la volatilité des prix et les caractéristiques des bougies sur la période quotidienne.

Principes de stratégie

La stratégie utilise des bandes de Bollinger à 20 périodes comme indicateur technique principal avec un multiplicateur d'écart type de 2,0. En calculant le rapport entre les ombres et les corps des bougies, le système génère des signaux de trading lorsque ce rapport dépasse un seuil défini (défault 1.0) et que le prix touche les limites des bandes de Bollinger.

Les avantages de la stratégie

  1. Analyse multidimensionnelle: Combine les indicateurs techniques et l'analyse des tendances des prix pour améliorer la fiabilité du signal.
  2. Mécanisme d'entrée flexible: offre de multiples options de temps d'entrée adaptées aux différents styles de négociation.
  3. Gestion complète des risques: contrôle des risques par la dimensionnement dynamique des positions et le stop-loss automatisé.
  4. Compatibilité sur plusieurs délais: permet de négocier sur des délais plus courts tout en maintenant une analyse quotidienne.
  5. Automatise tout, de l'identification des signaux à la gestion de la position.

Risques stratégiques

  1. Risque de volatilité du marché: peut générer de faux signaux sur des marchés très volatils.
  2. Risque de retard: l'utilisation quotidienne des données pourrait entraîner des réponses retardées sur les marchés en évolution rapide.
  3. Sensitivité des paramètres: les performances de la stratégie dépendent de manière significative des paramètres de la bande de Bollinger et des choix de seuil du ratio d'ombre.
  4. Risque de liquidité: peut faire face à des difficultés d'exécution sur des marchés moins liquides.

Directions d'optimisation de la stratégie

  1. Incorporer l'analyse du volume: intégrer les données de volume pour valider les renversements de prix.
  2. Ajouter des filtres d'environnement de marché: inclure des indicateurs de force de tendance pour filtrer les conditions défavorables du marché.
  3. Optimiser l'adaptation des paramètres: ajuster dynamiquement les paramètres de la bande de Bollinger et les seuils du ratio d'ombre en fonction de la volatilité du marché.
  4. Améliorer le contrôle des risques: ajouter des mécanismes de contrôle des prélèvements et de surveillance de la courbe des actions.
  5. Renforcer la confirmation du signal: introduire des indicateurs techniques supplémentaires comme outils de confirmation.

Résumé

Il s'agit d'un système de négociation complet combinant les bandes de Bollinger et l'analyse des bougies pour saisir les opportunités d'inversion du marché. Les atouts de la stratégie résident dans son cadre analytique complet et son système de gestion des risques robuste, tout en accordant une attention particulière aux conditions du marché et aux impacts de la sélection des paramètres.


/*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")


Relationnée

Plus de