Système intelligent de suivi des stop loss de la chaîne d'investissement fixe à croisement de moyenne mobile exponentielle

EMA DCA ATR SO SL
Date de création: 2025-04-16 15:30:15 Dernière modification: 2025-07-17 08:57:10
Copier: 7 Nombre de clics: 387
2
Suivre
319
Abonnés

Système intelligent de suivi des stop loss de la chaîne d’investissement fixe à croisement de moyenne mobile exponentielle Système intelligent de suivi des stop loss de la chaîne d’investissement fixe à croisement de moyenne mobile exponentielle

Aperçu

La stratégie utilise les signaux croisés des moyennes mobiles des indices (EMA) pour identifier les tendances à la hausse potentielles, en combinaison avec la loi du coût moyen en dollars (DCA) pour effectuer des prises de position intelligentes et protéger les bénéfices grâce à un mécanisme de stop-loss à double suivi. Le cœur de la stratégie consiste à utiliser les croisements des EMA rapides et des EMA lents pour déterminer l’heure d’entrée en jeu, à déployer automatiquement jusqu’à deux ordres de sécurité lorsque les prix baissent (Safety Orders), à prendre des positions de stockage en utilisant la gamme moyenne de volatilité réelle (ATR) ou le calcul du pourcentage fixe, et à utiliser un système de suivi à deux niveaux (Standard Stop Loss Tracking System) pour la protection des fonds.

Principe de stratégie

Le principe de fonctionnement de cette stratégie repose sur plusieurs composants clés:

  1. Le mécanisme de détection des tendances: Utilisez le croisement de l’EMA rapide ((cycle 9 par défaut) et de l’EMA lente ((cycle 21 par défaut) pour identifier une tendance à la hausse potentielle. Lorsque l’EMA rapide traverse vers le haut l’EMA lente, le système génère un signal d’achat.

  2. Commandes de base et commandes de sécuritéLa stratégie utilise une méthode de gestion de fonds stratifiée, commençant par un ordre de base (par défaut de 1000 \() et ajoutant deux ordres de sécurité supplémentaires lorsque le prix baisse (par défaut de 1250 \) pour SO1 et de 1750 $ pour SO2).

  3. Calcul de la distance dynamique: Le prix de déclenchement d’un ordre de sécurité peut être calculé de deux manières:

    • ATR intervalle: utilisez l’ATR multiplié par un certain nombre de multiples ((SO1 par défaut 1,2 fois, SO2 par défaut 2,5 fois) pour s’adapter aux fluctuations du marché
    • Pourcentage fixe: pourcentage de baisse de prix en utilisant la valeur par défaut ((SO1 par défaut 4%, SO2 par défaut 8%)
  4. Système de double suivi:

    • Stop loss standard de suivi: définie comme un certain pourcentage de la valeur maximale (par défaut 8%)
    • Blocage des bénéfices pour le suivi des pertes: activé lorsque les bénéfices atteignent un seuil spécifique (défault 2.5%), en utilisant un pourcentage de suivi plus serré (défault 1.5%)
  5. Conditions de sortieLa stratégie de plafonnement est la suivante:

    • N’importe quelle perte de suivi est déclenchée
    • EMA rapide vers le bas à travers EMA lente (retour de tendance)
  6. Filtre de période de refroidissement et de date: La stratégie contient une période de refroidissement après la commande de base (de 4 heures par défaut) et un filtre de date optionnel pour limiter le retest ou exécuter une période de temps spécifique.

Avantages stratégiques

L’analyse approfondie du code de la stratégie permet de résumer les principaux avantages:

  1. Gestion des fonds adaptés: La stratégie utilise la méthode de la moyenne des coûts en dollars combinée à des ordres de sécurité dynamiques pour ajuster automatiquement les positions en fonction des conditions du marché. Cette méthode est particulièrement efficace dans les marchés volatiles, permettant de réduire le prix d’entrée moyen et d’augmenter les bénéfices potentiels.

  2. Ajustement de position basé sur la volatilitéLa stratégie est capable d’ajuster automatiquement l’intervalle de prise de position en fonction des fluctuations du marché actuel, grâce à l’ATR qui calcule la position de l’ordre de sécurité, ce qui est plus flexible que la méthode des pourcentages fixes.

  3. Une double protection des bénéficesLe système de double tracking de stop-loss offre une gestion innovante des risques, le système standard de tracking de stop-loss protège la majeure partie des fonds, tandis que le mécanisme de verrouillage des bénéfices est activé après l’atteinte d’un objectif de profit spécifique, protégeant les bénéfices réalisés avec un pourcentage plus serré.

  4. Entièrement personnalisable: Tous les paramètres clés (longueur d’EMA, taille de l’ordre, pourcentage de stop loss suivi, intervalle d’ordre sécurisé) peuvent être ajustés en fonction des préférences de risque du trader et des conditions du marché.

  5. Système d’alerte intégréLa stratégie contient des conditions d’alerte formatées qui peuvent être intégrées à des plateformes d’automatisation tierces (comme 3Commas) pour des transactions entièrement automatisées.

  6. Des informations de démarrage transparentes: contient des tableaux de démarrage détaillés, affichant les indicateurs et l’état des transactions clés, facilitant la surveillance en temps réel et l’optimisation des stratégies.

Risque stratégique

Bien que cette stratégie présente de nombreux avantages, elle comporte les risques potentiels suivants:

  1. Risque de perte de fonds: Dans une forte tendance baissière, même une hiérarchisation peut entraîner de lourdes pertes. Le retrait peut être plus long que prévu, en particulier dans le cas d’une augmentation soudaine de la volatilité du marché.

Comment faire ?: Adaptez le pourcentage de stop-loss et l’intervalle des commandes de sécurité de suivi en fonction du type de transaction et du calendrier; envisagez d’ajouter un stop-loss global comme couche de protection supplémentaire.

  1. Paramètre Sensibilité: La performance de la stratégie dépend fortement des paramètres EMA, des multiplicateurs ATR et des paramètres de suivi des arrêts de perte. Une mauvaise configuration des paramètres peut entraîner une sortie trop tôt d’une bonne tendance ou trop tard d’une mauvaise tendance.

Comment faire ?: analyse et optimisation détaillées pour des variétés de transactions et des conditions de marché spécifiques; mise en œuvre d’un mécanisme d’ajustement des paramètres d’adaptation.

  1. Risques liés à une commande de sécurité non activée: Dans le cas d’une réaction rapide, l’ordre de sécurité peut ne jamais être activé, ce qui entraîne une occasion manquée de coût moyen.

*Comment faire ?*Considérez la possibilité d’imposer des mécanismes de déclenchement plus flexibles pour les ordres de sécurité, tels que l’exécution forcée basée sur le temps ou l’intervalle ajusté en fonction des conditions spécifiques du marché.

  1. Le commerce excessifDans les marchés horizontaux, les croisements EMA peuvent se produire fréquemment, entraînant une survente des transactions et une augmentation des frais de commission.

Comment faire ?: Ajout de filtres de négociation, tels que la confirmation de la volatilité ou de la force de la tendance; prolongation de la période de refroidissement pour réduire la fréquence des transactions.

  1. Dépendance aux indicateurs techniquesCette stratégie s’appuie entièrement sur les croisements EMA et les comportements des prix, sans tenir compte des facteurs fondamentaux et des conditions macro-marchées.

*Comment faire ?*Considérez l’intégration de filtres fondamentaux ou d’indicateurs de sentiment de risque; ajoutez des vérifications de pertinence entre les marchés comme signal de confirmation.

Orientation de l’optimisation de la stratégie

Sur la base d’une analyse approfondie du code stratégique, voici quelques pistes d’optimisation possibles:

  1. Adaptation des paramètres: Mise en place d’un mécanisme d’ajustement automatique de la longueur des EMA et des multiples d’ATR en fonction de la volatilité du marché ou du volume des transactions. Par exemple, l’utilisation d’un EMA plus long et d’un multiplicateur d’ATR plus grand dans un environnement à forte volatilité et d’un EMA plus court et d’un multiplicateur d’ATR plus petit dans un environnement à faible volatilité. Cela améliorera l’adaptabilité de la stratégie dans différentes conditions de marché.

  2. Signaux de confirmation multiple: Ajout d’indicateurs de confirmation supplémentaires, tels que l’indice de résistance relative (RSI), le volume de transaction ou les bandes de Brin, pour réduire les faux signaux. Un filtre peut être mis en œuvre, qui nécessite plusieurs indicateurs techniques pour confirmer simultanément le signal d’entrée, ce qui améliore la qualité du signal.

  3. Répartition dynamique des fonds: Ajuster la taille des ordres en fonction de la situation du marché et de la volatilité historique. Par exemple, augmenter la taille des ordres de base dans des phases de marché moins volatiles ou plus susceptibles d’augmenter dans l’histoire, et diminuer dans un environnement à haut risque.

  4. Une stratégie de sortie intelligente: Mise en place d’un mécanisme de profit partiel permettant une sortie progressive à différents niveaux de profit, plutôt qu’un placement à zéro unique. Cela peut être réalisé en définissant plusieurs objectifs de profit et un pourcentage de sortie correspondant, optimisant le ratio de retour sur risque.

  5. Intégration des indicateurs émotionnels: Ajout d’analyses de l’humeur du marché, telles que l’indice de la peur et de la cupidité ou l’analyse du volume des transactions, comme filtre supplémentaire pour les entrées et les sorties. Cela aidera la stratégie à éviter les transactions inutiles pendant les périodes d’humeur extrême.

  6. Gestion de l’exposition au risque: Implémenter la fonction de calcul dynamique de l’exposition maximale au risque (la somme de tous les ordres de sécurité possibles) et définir des limites de risque maximales acceptables. Cela garantira que la stratégie n’expose pas trop de fonds à une seule transaction à tout moment.

Résumer

Le système de suivi des pertes de l’indice mobile moyen croisé est une stratégie de négociation quantitative bien conçue qui combine la détection de tendances, la hiérarchisation de la prise de risque et la gestion avancée des pertes. Son avantage central réside dans sa capacité à s’adapter aux fluctuations du marché, sa gestion intelligente des fonds et son système de protection des bénéfices à deux niveaux. La stratégie est particulièrement adaptée aux environnements de marché modérément volatils, dans lesquels les tendances sont suffisamment persistantes et directionnelles.

La stratégie peut être encore améliorée en termes de performance et de solidité par l’optimisation des paramètres et l’amélioration des recommandations appropriées. En particulier, l’ajustement des paramètres adaptatifs et les signaux de confirmation multiple peuvent améliorer considérablement la qualité d’entrée, tandis que les stratégies d’allocation dynamique des fonds et de sortie intelligente peuvent optimiser les caractéristiques de retour sur risque.

En fin de compte, la stratégie représente une approche de trading quantifiée et équilibrée, axée sur la préservation des fonds et la cohérence, plutôt que sur la recherche de la maximisation des bénéfices à chaque transaction. Elle fournit aux traders un cadre robuste qui peut être personnalisé en fonction de leurs préférences personnelles en matière de risque et de conditions de marché, potentiellement pour des résultats de trading durables à long terme.

Code source de la stratégie
/*backtest
start: 2025-04-15 00:00:00
end: 2025-07-13 19:30:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":200000}]
*/

//@version=5
strategy(
     title="DCA + Dual Trailing Strategy", 
     overlay=true 
     )

// --- Trend ---
fastMALen = input.int(9, title="Fast EMA Length")
slowMALen = input.int(21, title="Slow EMA Length")

// --- Trailing Stops ---
trailStopPerc   = input.float(8.0, title="Standard Trailing Stop (%)", minval=0.1) / 100
lockInThreshold = input.float(2.5,  title="Profit Lock-In Trigger (%)", minval=0.1) / 100
lockInTrailPct  = input.float(1.5,  title="Lock-In Trail (%) after Trigger", minval=0.1) / 100

// --- Safety Orders (SO) ---
useATRSpacing     = input.bool(true, title="Use ATR-Based Spacing?")
atrLength         = input.int(14,   title="ATR Length", minval=1)
atrSo1Multiplier  = input.float(1.2, title="ATR SO1 Multiplier", minval=0.1)
atrSo2Multiplier  = input.float(2.5, title="ATR SO2 Multiplier", minval=0.1)

// --- Fallback SO Spacing (if not using ATR) ---
fallbackSo1Perc = input.float(4.0,  title="Fallback SO1 Drop (%) ", minval=0.1) / 100
fallbackSo2Perc = input.float(8.0, title="Fallback SO2 Drop (%) ", minval=0.1) / 100

// --- Entry Cooldown ---
cooldownBars = input.int(4, "Cooldown Bars After Base Entry", minval=0)

// --- Order Sizes in USD ---
baseUsd = input.float(10000.0, title="Base Order Size (USD)", minval=1.0)
so1Usd  = input.float(12500.0, title="Safety Order 1 Size (USD)", minval=1.0)
so2Usd  = input.float(17500.0, title="Safety Order 2 Size (USD)", minval=1.0)

// 2) CALCULATIONS

// --- Trend & Reversal Detection ---
fastMA    = ta.ema(close, fastMALen)
slowMA    = ta.ema(close, slowMALen)
trendUp   = ta.crossover(fastMA, slowMA)
trendDown = ta.crossunder(fastMA, slowMA)

// --- ATR Value ---
atrValue = ta.atr(atrLength)

// 3) BASE ENTRY LOGIC

// Base Buy Signal: EMA crossover
baseBuySignal = trendUp

var int   lastBuyBar     = na // Tracks the bar index of the last base entry
inCooldown = not na(lastBuyBar) and (bar_index - lastBuyBar < cooldownBars)

var float baseEntryPrice = na // Stores the price of the initial base entry for SO calculations

// --- Execute Base Entry ---
if baseBuySignal and strategy.position_size == 0 and not inCooldown
    baseQty = baseUsd / close // Calculate quantity based on USD
    strategy.order("Base Order", strategy.long, qty=baseQty, comment="Base Entry")
    baseEntryPrice := close
    lastBuyBar     := bar_index

// 4) SAFETY ORDERS LOGIC

// --- Calculate SO Trigger Prices ---
float so1TriggerPrice = na
float so2TriggerPrice = na

if strategy.position_size > 0 // Only calculate if a base order has been placed
    so1TriggerPrice := useATRSpacing ?
         (baseEntryPrice - atrValue * atrSo1Multiplier) :
         (baseEntryPrice * (1 - fallbackSo1Perc))

    so2TriggerPrice := useATRSpacing ?
         (baseEntryPrice - atrValue * atrSo2Multiplier) :
         (baseEntryPrice * (1 - fallbackSo2Perc))


// --- Conditions for SO Execution ---
// Added 'inDateRange' check
// Ensure base order exists, price trigger hit, and the specific SO hasn't filled yet
bool so1Condition = strategy.position_size > 0 and close <= so1TriggerPrice and strategy.opentrades == 1
bool so2Condition = strategy.position_size > 0 and close <= so2TriggerPrice and strategy.opentrades == 2


// --- Execute SO1 ---
if so1Condition
    so1Qty = so1Usd / close // Calculate quantity based on USD
    strategy.order("Safety Order 1", strategy.long, qty=so1Qty, comment="SO1")

// --- Execute SO2 ---
if so2Condition
    so2Qty = so2Usd / close // Calculate quantity based on USD
    strategy.order("Safety Order 2", strategy.long, qty=so2Qty, comment="SO2")

// 5) AVERAGE ENTRY PRICE

// Use the built-in variable for the average price of the open position
avgEntryPrice = strategy.position_avg_price

// 6) DUAL TRAILING STOP LOGIC

// Variables to track trailing stop levels and states
var float highestSinceEntry = na
var float trailStopPrice    = na
var bool  stopHitNormal     = false

var bool  lockInTriggered = false
var float lockInPeak      = na
var float lockInStopPrice = na
var bool  stopHitLockIn   = false

// --- Update Trailing Logic when in a Position ---
if strategy.position_size > 0
    // --- Standard Trail ---
    highestSinceEntry := na(highestSinceEntry) ? close : math.max(highestSinceEntry, close)
    trailStopPrice    := highestSinceEntry * (1 - trailStopPerc)
    stopHitNormal     := close < trailStopPrice

    // --- Lock-In Trail ---
    if not lockInTriggered and close >= avgEntryPrice * (1 + lockInThreshold)
        lockInTriggered := true
        lockInPeak      := close

    if lockInTriggered
        lockInPeak      := math.max(lockInPeak, close)
        lockInStopPrice := lockInPeak * (1 - lockInTrailPct)
        stopHitLockIn   := close < lockInStopPrice
    else
        stopHitLockIn   := false
        lockInStopPrice := na

// --- Reset Variables when Flat ---
else

    highestSinceEntry := na
    trailStopPrice    := na
    stopHitNormal     := false

    lockInTriggered   := false
    lockInPeak        := na
    lockInStopPrice   := na
    stopHitLockIn     := false


    // lastBuyBar is intentionally NOT reset here, cooldown depends on it

// 7) EXIT CONDITIONS

// Added 'inDateRange' check
// Exit if either trailing stop is hit OR if the trend reverses downward
exitCondition = (stopHitNormal or stopHitLockIn or trendDown) and strategy.position_size > 0

if exitCondition
    strategy.close_all(comment="Exit: SL / LockIn / TrendDown")


// 9) PLOTS & DEBUG TABLE

// --- Plot MAs ---
plot(fastMA, color=color.new(color.green, 0), title="Fast EMA", linewidth=2)
plot(slowMA, color=color.new(color.red, 0),   title="Slow EMA", linewidth=2)

// --- Plot Trailing Stops ---
plot(strategy.position_size > 0 ? trailStopPrice : na, color=color.new(color.orange, 0), title="Standard Trailing Stop", style=plot.style_linebr, linewidth=2)
plot(lockInTriggered ? lockInStopPrice : na, color=color.new(color.fuchsia, 0), title="Lock-In Trailing Stop", style=plot.style_linebr, linewidth=2)