Stratégie de coût moyen pondéré par les coûts multiples EMA basée sur un stop loss dynamique et un objectif de profit


Date de création: 2024-01-19 15:16:53 Dernière modification: 2024-01-19 15:16:53
Copier: 2 Nombre de clics: 778
1
Suivre
1617
Abonnés

Stratégie de coût moyen pondéré par les coûts multiples EMA basée sur un stop loss dynamique et un objectif de profit

Aperçu

La stratégie utilise des moyennes mobiles dynamiques à indices multiples comme signaux d’entrée de marché, en combinaison avec des mécanismes de suivi des arrêts et des objectifs de profit pour gérer les risques et les bénéfices. La stratégie tire pleinement parti de la nature lisse de l’EMA pour identifier les tendances et contrôler les coûts par le biais de plusieurs DCA. De plus, l’intégration des paramètres dynamiques de stop loss et de but profit rend l’ensemble de la stratégie plus intelligent et automatisé.

Principe de stratégie

Calcul de l’indicateur

  • Les moyennes mobiles des indices EMA5, EMA10, EMA20, EMA50, EMA100 et EMA200
  • ATR moyenne de la vraie amplitude de fluctuation

Signaux d’entrée

Les cycles EMA peuvent être personnalisés, en choisissant typiquement les cycles 5, 10, 20, 50, 100 et 200. La stratégie utilise des prix dans la plage de 1% de l’EMA comme condition d’entrée.

Gestion des risques

L’intégration de plusieurs mécanismes de gestion des risques:

  1. Stop ATR: arrêt de liquidation lorsque l’ATR dépasse la limite définie
  2. Contrôle du nombre maximal d’entrées sur le marché: évitez les investissements excessifs
  3. Tracking stop dynamique: trailing stop basé sur les fluctuations en temps réel des prix

Le mécanisme de profit

Définir un niveau de profit cible et se retirer lorsque le prix dépasse le prix cible

Analyse des forces stratégiques

  1. Utilisez l’EMA pour identifier les tendances et filtrer les fluctuations à court terme
  2. Les coûts de DCA sont dispersés pour éviter les achats à bas prix
  3. Plusieurs portfolios d’EMA pour une entrée en bourse plus réussie
  4. Les pertes de contrôle en temps réel
  5. L’objectif est clair: gagner de l’argent sans gaspiller beaucoup.

Risques et améliorations

  1. La sélection des facteurs EMA nécessite une optimisation, l’efficacité de la combinaison de cycles varie considérablement selon les marchés
  2. Un nombre excessif de DCA pourrait entraîner une utilisation excessive des fonds
  3. Le paramètre d’amplitude d’arrêt nécessite une optimisation de la régression

Comment optimiser la stratégie

  1. Utilisation des systèmes EMA avancés pour identifier les tendances
  2. Optimisation multivariée pour un nombre optimal de DCA et une marge d’arrêt
  3. Ajout d’un modèle d’apprentissage automatique pour prédire les variations de prix
  4. Module intégré de gestion des fonds pour le contrôle des investissements globaux

Résumer

Cette stratégie intègre plusieurs mécanismes, tels que l’identification des tendances EMA, le contrôle des coûts DCA, le suivi dynamique des arrêts de perte et des retraits de bénéfices cibles. Il y a beaucoup de place pour l’optimisation des paramètres d’ajustement et de contrôle des risques.

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

//@version=4
strategy("EMA DCA Strategy with Trailing Stop and Profit Target", overlay=true )

// Define the investment amount for when the condition is met
investment_per_condition = 6

// Define the EMAs
ema5 = ema(close, 5)
ema10 = ema(close, 10)
ema20 = ema(close, 20)
ema50 = ema(close, 50)
ema100 = ema(close, 100)
ema200 = ema(close, 200)

// Define ATR sell threshold
atr_sell_threshold = input(title="ATR Sell Threshold", type=input.integer, defval=10, minval=1)

// Helper function to find if the price is within 1% of the EMA
isWithin1Percent(price, ema) =>
    ema_min = ema * 0.99
    ema_max = ema * 1.01
    price >= ema_min and price <= ema_max

// Control the number of buys
var int buy_count = 0
buy_limit = input(title="Buy Limit", type=input.integer, defval=3000)

// Calculate trailing stop and profit target levels
trail_percent = input(title="Trailing Stop Percentage", type=input.integer, defval=1, minval=0, maxval=10)
profit_target_percent = input(title="Profit Target Percentage", type=input.integer, defval=3, minval=1, maxval=10)

// Determine if the conditions are met and execute the strategy
checkConditionAndBuy(emaValue, emaName) =>
    var int local_buy_count = 0 // Create a local mutable variable
    if isWithin1Percent(close, emaValue) and local_buy_count < buy_limit
        strategy.entry("Buy at " + emaName, strategy.long, qty=investment_per_condition / close, alert_message ="Buy condition met for " + emaName)
        local_buy_count := local_buy_count + 1
        // alert("Buy Condition", "Buy condition met for ", freq_once_per_bar_close)
        
    local_buy_count // Return the updated local_buy_count

// Add ATR sell condition
atr_condition = atr(20) > atr_sell_threshold
if atr_condition
    strategy.close_all()
    buy_count := 0 // Reset the global buy_count when selling

// Strategy execution
buy_count := checkConditionAndBuy(ema5, "EMA5")
buy_count := checkConditionAndBuy(ema10, "EMA10")
buy_count := checkConditionAndBuy(ema20, "EMA20")
buy_count := checkConditionAndBuy(ema50, "EMA50")
buy_count := checkConditionAndBuy(ema100, "EMA100")
buy_count := checkConditionAndBuy(ema200, "EMA200")

// Calculate trailing stop level
trail_offset = close * trail_percent / 100
trail_level = close - trail_offset

// Set profit target level
profit_target_level = close * (1 + profit_target_percent / 100)

// Exit strategy: Trailing Stop and Profit Target
strategy.exit("TrailingStop", from_entry="Buy at EMA", trail_offset=trail_offset, trail_price=trail_level)
strategy.exit("ProfitTarget", from_entry="Buy at EMA",  when=close >= profit_target_level)

// Plot EMAs
plot(ema5, title="EMA 5", color=color.red)
plot(ema10, title="EMA 10", color=color.orange)
plot(ema20, title="EMA 20", color=color.yellow)
plot(ema50, title="EMA 50", color=color.green)
plot(ema100, title="EMA 100", color=color.blue)
plot(ema200, title="EMA 200", color=color.purple)