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

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

Auteur:ChaoZhang est là., Date: 2024-11-27 14:18:33 Je suis désolé
Les étiquettes:BBATRRRRSE- Je vous en prie.SDLe WBR

img

Résumé

Cette stratégie est basée sur les bandes de Bollinger et l'analyse des modèles de bougies. La stratégie identifie principalement les points d'inversion potentiels du marché en observant les modèles de bougies lorsque le prix touche les bandes de Bollinger, combiné avec la relation de ratio entre les mèches et le corps.

Principes de stratégie

La logique de base de la stratégie est basée sur plusieurs éléments clés: Premièrement, elle calcule les bandes de Bollinger sur 20 périodes pour déterminer la fourchette de volatilité des prix; Deuxièmement, lorsque le prix touche les bandes de Bollinger, elle analyse le rapport entre les mèches supérieures/inférieures et le corps du chandelier, le considérant comme un signal de renversement potentiel lorsque le rapport dépasse le seuil fixé; Troisièmement, elle calcule les niveaux de support et de résistance clés pour le placement de stop-loss; Enfin, elle calcule la taille de la position pour chaque transaction en fonction d'un pourcentage fixe (1%) du solde du compte, en mettant en œuvre une gestion dynamique des risques. La stratégie offre également diverses options de chronométrage, notamment le prix de clôture, le prix d'ouverture, le prix d'entrée quotidien, le haut et le bas.

Les avantages de la stratégie

  1. Contrôle précis des risques: utilise un modèle de gestion des risques à pourcentage fixe, garantissant une exposition au risque contrôlée par transaction
  2. Point d'entrée flexible: offre plusieurs options de prix d'entrée pour s'adapter à différents styles de négociation
  3. Combinaison d'indicateurs techniques: Combine les bandes de Bollinger avec l'analyse des modèles de chandeliers pour améliorer la fiabilité des signaux
  4. Placement rationnel de stop-loss: définit des stop-loss basés sur les niveaux de support et de résistance clés, en fonction de la dynamique du marché
  5. Gestion complète des transactions: comprend un mécanisme d'expiration des ordres pour éviter les faux signaux

Risques stratégiques

  1. Risque de fluctuations rapides du marché: les ratios Wick peuvent générer de faux signaux sur les marchés volatils
  2. Risque de gestion de trésorerie: le modèle de risque à pourcentage fixe pourrait entraîner une sous-dimension des positions après des pertes consécutives
  3. Risque de placement de stop-loss: les calculs de support et de résistance peuvent ne pas être précis dans certaines conditions de marché
  4. Dépendance du calendrier: une stratégie basée principalement sur le calendrier quotidien peut manquer des opportunités dans des délais plus courts

Directions d'optimisation de la stratégie

  1. Incorporer des indicateurs de volume: ajouter une analyse de volume pour la confirmation du signal afin d'améliorer la fiabilité
  2. Optimiser le mécanisme de stop-loss: envisager la mise en œuvre d'un stop-loss dynamique qui s'ajuste en fonction de la volatilité du marché
  3. Ajouter des filtres d'environnement de marché: inclure des indicateurs de la force de la tendance pour ajuster les paramètres de stratégie dans différentes conditions de marché
  4. Améliorer la gestion des positions: envisager la mise en œuvre d'un dimensionnement dynamique des positions basé sur la volatilité du marché
  5. Ajouter des filtres de temps: inclure des filtres de temps pour éviter de négocier lors de sessions de marché très volatiles

Résumé

Cette stratégie combine des outils d'analyse technique classiques avec des méthodes modernes de gestion des risques pour construire un système de négociation relativement complet. Les principaux avantages résident dans son contrôle strict des risques et ses mécanismes d'entrée flexibles, tandis que l'attention doit être portée aux changements de l'environnement du marché et à la vérification de la fiabilité du signal dans les applications pratiques.


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


Relationnée

Plus de