Stratégie longue avancée avec cassure de ligne de tendance dynamique

SMA TP SL ATR VOL
Date de création: 2024-12-11 14:54:06 Dernière modification: 2024-12-11 14:54:06
Copier: 0 Nombre de clics: 440
1
Suivre
1617
Abonnés

Stratégie longue avancée avec cassure de ligne de tendance dynamique

Aperçu

Il s’agit d’une stratégie de négociation de rupture à plusieurs niveaux basée sur une ligne de tendance dynamique et une confirmation de volume de transaction. La stratégie identifie les hauts de fluctuation critiques en suivant les mouvements de prix en temps réel et utilise la dynamique de ces points pour construire une ligne de tendance.

Principe de stratégie

La logique centrale de la stratégie repose sur trois piliers principaux: la construction d’une ligne de tendance dynamique, la confirmation du volume de transaction et un système de gestion des risques. Premièrement, la stratégie utilise la fonction ta.pivothigh pour identifier dynamiquement les hauts de fluctuation des prix et construire une ligne de tendance ascendante en calculant la pente et l’intersection sur la base des deux hauts de fluctuation les plus récents. Deuxièmement, la stratégie exige que le signal d’entrée soit accompagné d’un volume de transaction supérieur à 1,5 fois la moyenne des 20 cycles pour assurer l’efficacité de la rupture.

Avantages stratégiques

  1. Adaptabilité dynamique: les lignes de tendance sont automatiquement mises à jour à mesure que de nouveaux sommets oscillants apparaissent, ce qui permet à la stratégie de s’adapter à différents environnements de marché.
  2. Mécanisme de confirmation multiple: Combiné à la confirmation de la rupture de prix et de la transaction, il réduit considérablement les faux signaux.
  3. Une bonne gestion des risques: une combinaison de stop loss fixe et de stop loss suivi permet de maîtriser les risques tout en respectant les grandes tendances.
  4. La logique du code est claire: la conception modulaire facilite la compréhension et la maintenance des stratégies.
  5. Haute efficacité de calcul: utilisation des indicateurs techniques de base, faible charge de calcul.

Risque stratégique

  1. Risque de fluctuation du marché: risque de déclenchement de stop-loss fréquents sur des marchés très volatils.
  2. La dépendance à la tendance: la stratégie peut avoir de mauvaises performances en marché horizontal.
  3. Risque de glissement: dans les marchés peu liquides, le prix de transaction réel peut être très éloigné du prix du signal.
  4. Sensitivité des paramètres: les paramètres des lignes de tendance et les paramètres des seuils de volume de transaction ont un impact significatif sur la performance de la stratégie.

Orientation de l’optimisation de la stratégie

  1. Filtrage du marché: introduire des indicateurs de volatilité (comme l’ATR) pour ajuster les paramètres ou filtrer les signaux de négociation.
  2. Optimisation des paramètres dynamiques: ajustement dynamique du stop-loss ratio en fonction de l’état du marché.
  3. Confirmation à plusieurs périodes: augmentation de la confirmation de tendances à des périodes plus longues pour une meilleure précision.
  4. Gestion intelligente des positions: la taille des positions est ajustée en fonction de la dynamique de la volatilité du marché et de l’intensité du signal.
  5. Augmentation de l’indicateur de l’humeur du marché: intégration d’indicateurs tels que le RSI ou le MACD pour renforcer la fiabilité du signal.

Résumer

Il s’agit d’une stratégie de suivi de tendance conçue de manière rationnelle et logique. La combinaison de la confirmation de la ligne de tendance dynamique et du volume de transaction, ainsi que d’un système de gestion des risques parfait, la stratégie a une meilleure adaptabilité et fiabilité. Bien qu’il existe une certaine dépendance du marché, la stratégie a encore beaucoup de place dans la direction d’optimisation recommandée.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Long Only Strategy with Dynamic Trend Lines, Fixed TP/SL, and Trailing SL+", overlay=true, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=10, 
         pyramiding=0, // Prevent multiple entries
         calc_on_order_fills=true, 
         calc_on_every_tick=true)

// === Parameters ===
swingThreshold = input.int(5, title="Swing Detection Threshold")
tpPercent = input.float(2.0, title="Take Profit (%)")
slPercent = input.float(1.0, title="Stop Loss (%)")
trailPercent = input.float(1.0, title="Trailing Stop (%)")
volumeThresholdMultiplier = input.float(1.5, title="Volume Spike Threshold (x MA)")

// === Volume Indicator ===
avgVolume = ta.sma(volume, 20)
volumeSpike = volume > (avgVolume * volumeThresholdMultiplier)

// === Detect Swing High ===
isSwingHigh = ta.pivothigh(high, swingThreshold, swingThreshold)

// Variables to store swing highs
var float swingHigh1 = na
var float swingHigh2 = na
var int swingHighBar1 = na
var int swingHighBar2 = na

// Update swing highs
if (isSwingHigh)
    swingHigh2 := swingHigh1
    swingHighBar2 := swingHighBar1
    swingHigh1 := high[swingThreshold]
    swingHighBar1 := bar_index - swingThreshold

// === Calculate Upper Trend Line ===
var float upperSlope = na
var float upperIntercept = na

// Calculate slope and intercept for upper trend line if there are two swing highs
if (not na(swingHigh1) and not na(swingHigh2))
    deltaX = swingHighBar1 - swingHighBar2
    if (deltaX != 0)
        upperSlope := (swingHigh1 - swingHigh2) / deltaX
        upperIntercept := swingHigh1 - (upperSlope * swingHighBar1)
    else
        upperSlope := 0
        upperIntercept := swingHigh1

// Calculate trend line price for the current bar
var float upperTrendPrice = na
if (not na(upperSlope) and not na(upperIntercept))
    upperTrendPrice := upperSlope * bar_index + upperIntercept

// Calculate trend line price for the previous bar
var float upperTrendPrice_prev = na
if (not na(upperSlope) and not na(upperIntercept))
    upperTrendPrice_prev := upperSlope * (bar_index - 1) + upperIntercept

// === Buy Condition Based on Trend Line Breakout ===

// Buy Signal: Price breaks above Upper Trend Line with volume spike
breakoutBuyCondition = (not na(upperTrendPrice)) and 
                       (close > upperTrendPrice) and 
                       (not na(upperTrendPrice_prev)) and 
                       (close[1] <= upperTrendPrice_prev) and 
                       volumeSpike

// === Manage Single Position ===

// Calculate Take Profit and Stop Loss levels based on percentage
longTakeProfit = close * (1 + tpPercent / 100)
longStopLoss = close * (1 - slPercent / 100)

// Calculate Trailing Stop as trail_offset (in price)
trail_offset = close * (trailPercent / 100)

// Execute Trade with Single Position Management
if (breakoutBuyCondition)
    // Close existing short position if any
    if (strategy.position_size < 0)
        strategy.close("Sell")
    // Open long position
    strategy.entry("Buy", strategy.long)
    // Set Take Profit, Stop Loss, and Trailing Stop Loss for long position
    strategy.exit("Take Profit Buy", from_entry="Buy", limit=longTakeProfit, stop=longStopLoss, trail_offset=trail_offset)

// Plot Buy Signal
plotshape(breakoutBuyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")