Stratégie de trading quantitative de l'indice Elder's Power basée sur l'écart type et la moyenne mobile

EFI ATR EMA SMA SD
Date de création: 2024-11-28 17:08:24 Dernière modification: 2024-11-28 17:08:24
Copier: 1 Nombre de clics: 498
1
Suivre
1617
Abonnés

Stratégie de trading quantitative de l’indice Elder’s Power basée sur l’écart type et la moyenne mobile

Aperçu

Cette stratégie est un système de trading quantitatif basé sur l’indice de force d’Elder (EFI) qui combine les écarts standards et les moyennes mobiles pour le jugement des signaux et utilise l’ATR pour ajuster dynamiquement la position de stop-loss. La stratégie réalise un système de trading complet en calculant les indicateurs EFI rapides et lents et en les standardisant pour le jugement des signaux croisés.

Principe de stratégie

La stratégie est basée sur les éléments clés suivants:

  1. Calcul de l’indice de force rapide et lente en utilisant deux indices EFI de deux cycles différents (de 13 et 50)
  2. Traitement de l’EFI à deux cycles pour une homogénéisation de la différence standard, rendant le signal plus statistiquement significatif
  3. Le déclenchement de la multiplication des signaux lorsque l’EFI rapide et l’EFI lent atteignent simultanément la différence de norme ci-dessus
  4. Le signal de vide est déclenché lorsque l’EFI rapide et l’EFI lent atteignent simultanément le seuil inférieur
  5. Utilisez l’ATR pour définir dynamiquement la position de stop loss et ajustez la position de stop loss avec les variations de prix
  6. Utilisation d’un mécanisme de suivi et d’arrêt basé sur l’ATR pour maintenir la croissance des bénéfices tout en les protégeant

Avantages stratégiques

  1. Un système de signaux combinant dynamique et volatilité améliore la fiabilité des transactions
  2. Traitement standardisé de l’uniformisation de la différence pour rendre le signal statistiquement significatif et réduire les faux signaux
  3. Le mécanisme d’arrêt dynamique des pertes permet de contrôler efficacement les risques et d’éviter les retraits massifs.
  4. Les mécanismes de suivi des arrêts de vente protègent les bénéfices déjà réalisés et permettent à ceux-ci de continuer à croître.
  5. Une logique stratégique claire et des paramètres adaptables pour une optimisation sur différents marchés

Risque stratégique

  1. Des signaux erronés peuvent être générés lors de fortes fluctuations du marché et nécessitent un mécanisme de filtrage supplémentaire.
  2. Une sélection trop sensible des paramètres peut conduire à des transactions excessives et augmenter les coûts de transaction.
  3. Les retards à un tournant de tendance peuvent affecter la performance de la stratégie
  4. Une mauvaise position de stop-loss peut entraîner des sorties prématurées ou des pertes excessives.
  5. Il faut prendre en compte l’impact des coûts de transaction sur le rendement de la stratégie

Orientation de l’optimisation de la stratégie

  1. Ajout d’un mécanisme de jugement de l’environnement du marché, utilisant différents paramètres dans différents états du marché
  2. L’introduction de filtres de fréquence d’entrée améliore la fiabilité du signal
  3. Optimisation des paramètres de stop-loss pour les rendre plus adaptés aux fluctuations du marché
  4. Augmentation des filtres de tendance pour éviter les échanges fréquents sur les marchés en crise
  5. Pensez à ajouter un filtrage horaire pour éviter de négocier à des heures défavorables

Résumer

Cette stratégie, combinant les indicateurs EFI, les écarts standards et l’ATR, permet de construire un système de négociation complet. L’avantage de la stratégie réside dans la fiabilité du système de signaux, la maîtrise des risques est raisonnable, mais elle doit encore être optimisée pour les différents environnements de marché. La stabilité et la rentabilité de la stratégie peuvent être encore améliorées en ajoutant des mécanismes tels que le jugement de l’environnement de marché et le filtrage du volume de transactions.

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

//@version=5
strategy("Elder's Force Index Strategy with ATR-Based SL and TP", overlay=true)

// Input parameters for fast and long EFI
efi_fast_length = input.int(13, "Fast EFI Length", minval=1)
efi_long_length = input.int(50, "Long EFI Length", minval=1)
stdev_length = input.int(50, "Standard Deviation Length", minval=2, maxval=300)
numdev = input.float(2, "Number of Deviations", minval=1, maxval=20, step=0.1)
atr_length = input.int(14, "ATR Length", minval=1)
atr_multiplier_sl = input.float(1.5, "ATR Multiplier for Stop Loss", step=0.1)
trailing_tp_multiplier = input.float(0.5, "Multiplier for Trailing Take Profit", step=0.1)

// Elder's Force Index Calculation for Fast and Long EFI
efi_fast = ta.ema((close - close[1]) * volume, efi_fast_length)
efi_long = ta.ema((close - close[1]) * volume, efi_long_length)

// Calculate Standard Deviation for Fast EFI
efi_fast_average = ta.sma(efi_fast, stdev_length)
efi_fast_stdev = ta.stdev(efi_fast, stdev_length)
efi_fast_diff = efi_fast - efi_fast_average
efi_fast_result = efi_fast_diff / efi_fast_stdev

// Calculate Standard Deviation for Long EFI
efi_long_average = ta.sma(efi_long, stdev_length)
efi_long_stdev = ta.stdev(efi_long, stdev_length)
efi_long_diff = efi_long - efi_long_average
efi_long_result = efi_long_diff / efi_long_stdev

// Define upper and lower standard deviation levels
upper_sd = numdev
lower_sd = -numdev

// Define entry conditions based on crossing upper and lower standard deviations
long_condition = efi_fast_result > upper_sd and efi_long_result > upper_sd
short_condition = efi_fast_result < lower_sd and efi_long_result < lower_sd

// Check if a position is already open
is_position_open = strategy.position_size != 0

// Calculate ATR for stop loss and take profit
atr = ta.atr(atr_length)

// Initialize stop loss and take profit variables
var float stop_loss = na
var float take_profit = na

// Execute trades based on conditions, ensuring only one trade at a time
if (long_condition and not is_position_open)
    strategy.entry("Long", strategy.long)
    stop_loss := close - atr * atr_multiplier_sl  // Set initial stop loss based on ATR
    take_profit := close + atr * trailing_tp_multiplier  // Set initial take profit based on ATR

if (short_condition and not is_position_open)
    strategy.entry("Short", strategy.short)
    stop_loss := close + atr * atr_multiplier_sl  // Set initial stop loss based on ATR
    take_profit := close - atr * trailing_tp_multiplier  // Set initial take profit based on ATR

// Update exit conditions
if (is_position_open)
    // Update stop loss for trailing
    if (strategy.position_size > 0)  // For long positions
        stop_loss := math.max(stop_loss, close - atr * atr_multiplier_sl)
        
        // Adjust take profit based on price movement
        take_profit := math.max(take_profit, close + atr * trailing_tp_multiplier)

    else if (strategy.position_size < 0)  // For short positions
        stop_loss := math.min(stop_loss, close + atr * atr_multiplier_sl)
        
        // Adjust take profit based on price movement
        take_profit := math.min(take_profit, close - atr * trailing_tp_multiplier)

    // Set exit conditions
    strategy.exit("Long Exit", from_entry="Long", stop=stop_loss, limit=take_profit)
    strategy.exit("Short Exit", from_entry="Short", stop=stop_loss, limit=take_profit)