Stratégie de trading adaptative de suivi des tendances à double moyenne mobile et de contrôle des risques ATR

SMA ATR TP SL HTF
Date de création: 2024-11-29 14:56:43 Dernière modification: 2024-11-29 14:56:43
Copier: 0 Nombre de clics: 522
1
Suivre
1617
Abonnés

Stratégie de trading adaptative de suivi des tendances à double moyenne mobile et de contrôle des risques ATR

Aperçu

Cette stratégie est un système de trading auto-adaptatif qui combine le suivi de tendance binaire classique et le contrôle dynamique de l’ATR. La stratégie offre deux modes de trading: le mode de base utilise un simple croisement binaire pour le suivi de la tendance, le mode avancé ajoute un filtrage de tendance pour les périodes plus élevées et un mécanisme de stop-loss dynamique basé sur l’ATR. La stratégie peut être basée sur un menu déroulant simple pour basculer entre les deux modes, pour la facilité d’utilisation des débutants et pour répondre aux besoins des traders expérimentés en matière de contrôle du risque.

Principe de stratégie

La stratégie 1 ((mode de base) utilise un système de double équilibre des 21e et 49e jours, générant des signaux multiples lorsque la moyenne rapide traverse la moyenne lente vers le haut. Les objectifs de profit peuvent choisir un pourcentage ou un nombre de points, tout en offrant des fonctionnalités de stop-loss mobiles optionnelles pour bloquer les profits. La stratégie 2 ((mode de pointe) ajoute un filtre de tendance au niveau de la ligne solaire sur la base du système de double équilibre, permettant l’entrée en jeu uniquement lorsque le prix est au-dessus de la moyenne du cadre de temps plus élevé.

Avantages stratégiques

  1. La stratégie est extrêmement adaptable et peut être modifiée en fonction du niveau d’expérience des traders et de l’environnement du marché
  2. L’analyse des cadres temporels multiples en mode avancé améliore la qualité du signal
  3. ATR peut s’adapter à différentes conditions de marché
  4. Certains mécanismes de profit équilibrent la protection des bénéfices et la continuation de la tendance
  5. La configuration des paramètres est flexible et peut être optimisée en fonction des caractéristiques du marché

Risque stratégique

  1. Les systèmes de double ligne peuvent générer de faux signaux fréquents dans les marchés en crise.
  2. Le filtrage de tendance peut entraîner un retard de signal et la perte d’opportunités de trading.
  3. L’arrêt ATR peut ne pas être suffisamment rapide en cas de fluctuation du taux
  4. Une baisse prématurée de certains bénéfices pourrait affecter les bénéfices tendanciels

Orientation de l’optimisation de la stratégie

  1. Les indicateurs de volume et de volatilité peuvent être augmentés pour filtrer les faux signaux
  2. Considérer l’introduction d’un mécanisme d’adaptation dynamique des paramètres pour ajuster automatiquement le cycle de la moyenne en fonction de l’état du marché
  3. Optimisation des cycles de calcul de l’ATR, équilibrant sensibilité et stabilité
  4. Ajout d’un module de reconnaissance de l’état du marché pour sélectionner automatiquement le mode de stratégie optimal
  5. L’introduction d’autres options de stop-loss, comme le suivi du stop-loss, le stop-loss dans le temps, etc.

Résumer

Il s’agit d’un système de stratégie de trading bien conçu et fonctionnel. La combinaison de suivi de tendance bi-homogène et de contrôle des courants ATR assure la fiabilité de la stratégie et offre une bonne gestion des risques. La conception en deux modes répond aux besoins des traders à différents niveaux, et la richesse des paramètres offre suffisamment d’espace d’optimisation.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © shaashish1

//@version=5
strategy("Dual Strategy Selector V2 - Cryptogyani", overlay=true, pyramiding=0, 
         default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100000)

//#region STRATEGY SELECTION
strategyOptions = input.string(title="Select Strategy", defval="Strategy 1", options=["Strategy 1", "Strategy 2"], group="Strategy Selection")
//#endregion STRATEGY SELECTION

// ####################### STRATEGY 1: Original Logic ########################
//#region STRATEGY 1 INPUTS
s1_fastMALen = input.int(defval=21, title="Fast SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_slowMALen = input.int(defval=49, title="Slow SMA Length (S1)", minval=1, group="Strategy 1 Settings", inline="S1 MA")
s1_takeProfitMode = input.string(defval="Percentage", title="Take Profit Mode (S1)", options=["Percentage", "Pips"], group="Strategy 1 Settings")
s1_takeProfitPerc = input.float(defval=7.0, title="Take Profit % (S1)", minval=0.05, step=0.05, group="Strategy 1 Settings") / 100
s1_takeProfitPips = input.float(defval=50, title="Take Profit Pips (S1)", minval=1, step=1, group="Strategy 1 Settings")
s1_trailingTakeProfitEnabled = input.bool(defval=false, title="Enable Trailing (S1)", group="Strategy 1 Settings")
//#endregion STRATEGY 1 INPUTS

// ####################### STRATEGY 2: Enhanced with Recommendations ########################
//#region STRATEGY 2 INPUTS
s2_fastMALen = input.int(defval=20, title="Fast SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_slowMALen = input.int(defval=50, title="Slow SMA Length (S2)", minval=1, group="Strategy 2 Settings", inline="S2 MA")
s2_atrLength = input.int(defval=14, title="ATR Length (S2)", group="Strategy 2 Settings", inline="ATR")
s2_atrMultiplier = input.float(defval=1.5, title="ATR Multiplier for Stop-Loss (S2)", group="Strategy 2 Settings", inline="ATR")
s2_partialTakeProfitPerc = input.float(defval=50.0, title="Partial Take Profit % (S2)", minval=10, maxval=100, step=10, group="Strategy 2 Settings")
s2_timeframeTrend = input.timeframe(defval="1D", title="Higher Timeframe for Trend Filter (S2)", group="Strategy 2 Settings")
//#endregion STRATEGY 2 INPUTS

// ####################### GLOBAL VARIABLES ########################
var float takeProfitPrice = na
var float stopLossPrice = na
var float trailingStopPrice = na
var float fastMA = na
var float slowMA = na
var float higherTimeframeTrendMA = na
var bool validOpenLongPosition = false

// Precalculate higher timeframe values (global scope for Strategy 2)
higherTimeframeTrendMA := request.security(syminfo.tickerid, s2_timeframeTrend, ta.sma(close, s2_slowMALen))

// ####################### LOGIC ########################
if (strategyOptions == "Strategy 1")
    // Strategy 1 Logic (Original Logic Preserved)
    fastMA := ta.sma(close, s1_fastMALen)
    slowMA := ta.sma(close, s1_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA)
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0
    
    // Take Profit Price
    takeProfitPrice := if (s1_takeProfitMode == "Percentage")
        close * (1 + s1_takeProfitPerc)
    else
        close + (s1_takeProfitPips * syminfo.mintick)

    // Trailing Stop Price (if enabled)
    if (strategy.position_size > 0 and s1_trailingTakeProfitEnabled)
        trailingStopPrice := high - (s1_takeProfitPips * syminfo.mintick)
    else
        trailingStopPrice := na

else if (strategyOptions == "Strategy 2")
    // Strategy 2 Logic with Recommendations
    fastMA := ta.sma(close, s2_fastMALen)
    slowMA := ta.sma(close, s2_slowMALen)
    openLongPosition = ta.crossover(fastMA, slowMA) and close > higherTimeframeTrendMA
    validOpenLongPosition := openLongPosition and strategy.opentrades.size(strategy.opentrades - 1) == 0

    // ATR-Based Stop-Loss
    atr = ta.atr(s2_atrLength)
    stopLossPrice := close - (atr * s2_atrMultiplier)

    // Partial Take Profit Logic
    takeProfitPrice := close * (1 + (s2_partialTakeProfitPerc / 100))
//#endregion STRATEGY LOGIC

// ####################### PLOTTING ########################
plot(series=fastMA, title="Fast SMA", color=color.yellow, linewidth=1)
plot(series=slowMA, title="Slow SMA", color=color.orange, linewidth=1)
plot(series=takeProfitPrice, title="Take Profit Price", color=color.teal, linewidth=1, style=plot.style_linebr)

// Trailing Stop and ATR Stop-Loss Plots (Global Scope)
plot(series=(strategyOptions == "Strategy 1" and s1_trailingTakeProfitEnabled) ? trailingStopPrice : na, title="Trailing Stop", color=color.red, linewidth=1, style=plot.style_linebr)
plot(series=(strategyOptions == "Strategy 2") ? stopLossPrice : na, title="ATR Stop-Loss", color=color.red, linewidth=1, style=plot.style_linebr)
//#endregion PLOTTING

// ####################### POSITION ORDERS ########################
//#region POSITION ORDERS
if (validOpenLongPosition)
    strategy.entry(id="Long Entry", direction=strategy.long)

if (strategyOptions == "Strategy 1")
    if (strategy.position_size > 0)
        if (s1_trailingTakeProfitEnabled)
            strategy.exit(id="Trailing Take Profit", from_entry="Long Entry", stop=trailingStopPrice)
        else
            strategy.exit(id="Take Profit", from_entry="Long Entry", limit=takeProfitPrice)

else if (strategyOptions == "Strategy 2")
    if (strategy.position_size > 0)
        strategy.exit(id="Partial Take Profit", from_entry="Long Entry", qty_percent=s2_partialTakeProfitPerc, limit=takeProfitPrice)
        strategy.exit(id="Stop Loss", from_entry="Long Entry", stop=stopLossPrice)
//#endregion POSITION ORDERS