Stratégie de trading multi-filtre de liquidité de tendance adaptative

EMA SMA MACD ATR HLC3
Date de création: 2025-01-06 11:58:25 Dernière modification: 2025-01-06 11:58:25
Copier: 0 Nombre de clics: 617
1
Suivre
1617
Abonnés

Stratégie de trading multi-filtre de liquidité de tendance adaptative

Aperçu

Cette stratégie est un système de suivi de tendance adaptatif basé sur le filtrage de plusieurs indicateurs techniques. Il combine plusieurs indicateurs techniques tels que la moyenne mobile exponentielle (EMA), la moyenne mobile simple (SMA) et la divergence de convergence de la moyenne mobile (MACD), et ajuste dynamiquement les paramètres pour s’adapter à différents environnements de marché afin d’obtenir une capture de tendance efficace et un contrôle des risques. Cette stratégie adopte un mécanisme de filtrage en couches et améliore considérablement la fiabilité des signaux de trading grâce à la coopération coordonnée de plusieurs indicateurs techniques.

Principe de stratégie

La logique principale de la stratégie repose sur un mécanisme de filtrage à trois niveaux :

  1. Couche de reconnaissance de tendance adaptative : utilisez une combinaison d’EMA rapides et lentes pour calculer la ligne de base de la tendance et ajustez dynamiquement les lignes de piste supérieures et inférieures en fonction de la volatilité du marché.
  2. Filtre SMA : utilisez la moyenne mobile simple pour garantir que la direction du mouvement des prix est cohérente avec la tendance générale.
  3. Couche de confirmation MACD : utilisez la fonction de confirmation de tendance de l’indicateur MACD pour vérifier davantage la validité du signal de trading.

La génération de signaux de trading nécessite la réalisation de toutes les conditions de filtrage : changement de tendance, confirmation de la direction SMA et support de la ligne de signal MACD. La stratégie comprend également un système de gestion de position dynamique basé sur la valeur nette du compte, qui ajuste automatiquement la taille de la position grâce à des facteurs de levier.

Avantages stratégiques

  1. Forte adaptabilité : en ajustant dynamiquement les paramètres, la stratégie peut s’adapter à différents environnements de marché.
  2. Contrôle parfait des risques : de multiples mécanismes de filtrage réduisent considérablement la probabilité de faux signaux.
  3. Haute personnalisation : les utilisateurs peuvent ajuster divers paramètres en fonction de leur style de trading personnel.
  4. Haut degré d’automatisation : prend en charge les messages d’alerte au format JSON, ce qui facilite la connexion aux systèmes de trading automatique.
  5. Bon effet de visualisation : fournit un retour visuel riche, y compris des bandes de tendance, des marqueurs de signal, etc.

Risque stratégique

  1. Dépendance à la tendance : de faux signaux peuvent fréquemment être générés sur un marché volatil.
  2. Risque d’hystérésis : plusieurs mécanismes de filtrage peuvent entraîner un retard d’entrée.
  3. Sensibilité des paramètres : différentes combinaisons de paramètres peuvent entraîner de grandes différences dans les performances de la stratégie.
  4. Risque d’effet de levier : un effet de levier excessif peut amplifier les pertes.

Orientation de l’optimisation de la stratégie

  1. Adaptation à la volatilité : ajout d’un mécanisme de stop loss dynamique basé sur l’ATR.
  2. Identification de l’environnement de marché : ajoutez un système de classification de l’état du marché et utilisez différentes combinaisons de paramètres dans différents environnements de marché.
  3. Notation de la qualité du signal : établissez un système de notation de la force du signal et ajustez dynamiquement les positions en fonction de la force du signal.
  4. Optimisation de la gestion des fonds : introduire des algorithmes de gestion de fonds plus complexes pour obtenir un contrôle de position plus sophistiqué.

Résumer

Cette stratégie permet d’obtenir un effet de suivi des tendances plus fiable grâce à un mécanisme de filtrage multicouche et à un ajustement dynamique des paramètres. Bien qu’il existe certains risques de décalage et de dépendance aux paramètres, des performances stables peuvent toujours être obtenues dans les transactions réelles grâce à une optimisation raisonnable des paramètres et à des mesures de contrôle des risques. Il est recommandé aux traders d’effectuer une vérification complète des backtests avant l’utilisation en temps réel et d’ajuster les paramètres en fonction de leur tolérance au risque personnelle.

Code source de la stratégie
/*backtest
start: 2024-12-29 00:00:00
end: 2025-01-05 00:00:00
period: 45m
basePeriod: 45m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Adaptive Trend Flow Strategy with Filters for SPX", overlay=true, max_labels_count=500, 
     initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.01, slippage=2,
     margin_long=20, margin_short=20, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User-defined inputs for trend logic
atr           = input.int(14, "Main Length", minval=2, group = "Find more strategies like this on pineindicators.com")
length        = input.int(2, "Main Length", minval=2)
smooth_len    = input.int(2, "Smoothing Length", minval=2)
sensitivity   = input.float(2.0, "Sensitivity", step=0.1)

// User-defined inputs for SMA filter
use_sma_filter = input.bool(true, "Enable SMA Filter?")
sma_length = input.int(4, "SMA Length", minval=1)

// User-defined inputs for MACD filter
use_macd_filter = input.bool(true, "Enable MACD Filter?")
macd_fast_length = input.int(2, "MACD Fast Length", minval=1)
macd_slow_length = input.int(7, "MACD Slow Length", minval=1)
macd_signal_length = input.int(2, "MACD Signal Length", minval=1)
// User-defined inputs for leverage
leverage_factor = input.float(4.5, "Leverage Factor", minval=1.0, step=0.1)
id           = input("besttrader123", title= "Your TradingView username", group = "Automate this strategy with plugpine.com")
key           = input("nc739ja84gf", title= "Unique identifier (UID)")
ticker        = input("SPX", title= "Ticker/symbol of your broker")
bullcolor     = #0097a7
bearcolor     = #ff195f
showbars      = input.bool(true, "Color Bars?")
showbg        = input.bool(true, "Background Color?")
showsignals   = input.bool(true, "Show Signals?")


// Trend calculation functions
calculate_trend_levels() =>
    typical = hlc3
    fast_ema = ta.ema(typical, length)
    slow_ema = ta.ema(typical, length * 2)
    basis = (fast_ema + slow_ema) / 2
    vol = ta.stdev(typical, length)
    smooth_vol = ta.ema(vol, smooth_len)
    upper = basis + (smooth_vol * sensitivity)
    lower = basis - (smooth_vol * sensitivity)
    [basis, upper, lower]

get_trend_state(upper, lower, basis) =>
    var float prev_level = na
    var int trend = 0
    if na(prev_level)
        trend := close > basis ? 1 : -1
        prev_level := trend == 1 ? lower : upper
    if trend == 1
        if close < lower
            trend := -1
            prev_level := upper
        else
            prev_level := lower
    else
        if close > upper
            trend := 1
            prev_level := lower
        else
            prev_level := upper
    [trend, prev_level]

[basis, upper, lower] = calculate_trend_levels()
[trend, level] = get_trend_state(upper, lower, basis)

// SMA filter
sma_value = ta.sma(close, sma_length)
sma_condition = use_sma_filter ? close > sma_value : true

// MACD filter
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
macd_condition = use_macd_filter ? macd_line > signal_line : true

// Signal detection with filters
long_signal = trend == 1 and trend[1] == -1 and sma_condition and macd_condition
short_signal = trend == -1 and trend[1] == 1

// Plotting visuals
p2 = plot(basis, color=trend == 1 ? bullcolor : bearcolor, linewidth=2)
p1 = plot(level, color=close > level ? bullcolor : bearcolor, linewidth=2, style=plot.style_linebr)
// if showsignals and ta.crossover(close, level)
//     label.new(bar_index, level, "▲", color=bullcolor, textcolor=chart.bg_color, style=label.style_label_upper_right)
// if showsignals and ta.crossunder(close, level)
//     label.new(bar_index, level, "▼", color=bearcolor, textcolor=chart.fg_color, style=label.style_label_lower_right)

qty = strategy.equity / close * leverage_factor

// Automated alerts
if long_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "long", "volume": ' + str.tostring(qty) + '}', alert.freq_once_per_bar)
if short_signal
    alert('{"AccountID": "' + id + '","Key": "' + key + '", "symbol": "' + ticker + '", "action": "closelong"}', alert.freq_once_per_bar)

// Strategy entries and exits
if long_signal
    strategy.entry("Long", strategy.long, qty=qty)
if short_signal
    strategy.close("Long")

// Optional SMA and MACD plot
plot(use_sma_filter ? sma_value : na, color=color.new(color.blue, 80), title="SMA")
plot(use_macd_filter ? macd_line : na, color=color.new(color.orange, 80), title="MACD Line")
plot(use_macd_filter ? signal_line : na, color=color.new(color.red, 80), title="Signal Line")