Stratégie multi-DCA de l'EMA avec arrêt des pertes et objectif de profit

Auteur:ChaoZhang est là., Date: 19 janvier 2024
Les étiquettes:

img

Résumé

Cette stratégie utilise des EMA multiples dynamiques comme signaux d'entrée combinés avec des mécanismes de stop loss et de profit pour la gestion des risques. Elle tire parti de la nature lisse des EMA pour identifier les tendances et contrôler les coûts via des entrées multi-DCA. En outre, l'intégration de fonctionnalités d'arrêt de perte et de prise de profit adaptatives améliore le processus d'automatisation.

La logique de la stratégie

Indicateurs

  • Le montant de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée de la valeur ajoutée
  • Autonomie moyenne (ATR)

Signaux d'entrée

L'entrée longue est déclenchée lorsque le prix traverse ou se déplace à l'intérieur d'une plage de périodes EMA sélectionnées.

Gestion des risques

  1. ATR Stop Loss: Fermer toutes les positions lorsque l'ATR dépasse le seuil
  2. Limite de fréquence d'entrée: nombre maximum de contrôles d'entrées
  3. L'exposition au risque de défaillance de l'établissement est calculée sur la base de l'exposition au risque de défaillance.

Prise de profit

Fixer des niveaux de prix cibles de profit pour les sorties

Les avantages

  1. Identifier les tendances à l'aide des EMA avec filtrage du bruit
  2. La moyenne des coûts par entrées multi-DCA
  3. Signaux d'entrée améliorés à l'aide de combinaisons EMA
  4. Mécanisme d'arrêt de perte adaptatif
  5. Prendre le contrôle des bénéfices pour la protection des bénéfices

Risques et améliorations

  1. Les EMA doivent être optimisées pour les différents marchés
  2. Les entrées excédentaires en DCA peuvent occuper trop de capital
  3. Le pourcentage de perte par arrêt nécessite un backtesting

Stratégies d'amélioration

  1. Utiliser des systèmes EMA avancés pour une meilleure identification des tendances
  2. Optimisation multivariable de la fréquence DCA et du pourcentage de perte de freinage
  3. Incorporer des modèles d'apprentissage automatique pour les prévisions de variation des prix
  4. Intégrer le module de dimensionnement des positions pour gérer l'utilisation globale du capital

Conclusion

La stratégie englobe la détection de tendance EMA, la moyenne des coûts multi-DCA, le stop loss de trailing, la prise de profit cible et plus encore.


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


Plus de