Stratégie de plage de moyenne mobile exponentielle adaptative

Auteur:ChaoZhang est là., Date: le 26 février 2024 14:58:32
Les étiquettes:

img

Résumé

Cette stratégie utilise l'Exponential Hull Moving Average (EHMA) plus rapide et un canal adaptatif pour construire une stratégie de suivi de tendance. Étant donné que l'EHMA calcule plus rapidement, il peut identifier efficacement les changements de tendance des prix et éviter les transactions inutiles causées par de fausses ruptures.

Principe de stratégie

  1. Calculer la moyenne mobile pondérée exponentielle EHMA basée sur le paramètre Période.

  2. Construire un canal adaptatif au-dessus et en dessous de l'EHMA basé sur le paramètre RangeWidth. Seulement lorsque le prix dépasse la ligne supérieure du canal ou tombe en dessous de la ligne inférieure du canal, la tendance est considérée comme ayant changé et les signaux de trading sont déclenchés.

  3. Déterminez la relation de prix avec le canal. Long lorsque le prix franchit la ligne supérieure, court lorsque le prix franchit la ligne inférieure. Fermez la position longue lorsque le prix franchit la ligne supérieure, fermez la position courte lorsque le prix franchit la ligne inférieure.

Analyse des avantages

Cette stratégie présente les avantages suivants par rapport aux stratégies de moyenne mobile ordinaires:

  1. Utilisez l'algorithme EHMA pour calculer la moyenne mobile. L'EHMA réagit plus sensiblement aux changements de prix et peut identifier efficacement les changements de tendance pour éviter les transactions inutiles causées par de fausses ruptures.

  2. Le canal adaptatif peut filtrer efficacement les fluctuations de prix. Les signaux de trading ne sont déclenchés que lorsque la tendance des prix a fortement changé. Cela pourrait filtrer certains métiers inefficaces et améliorer la rentabilité.

  3. La largeur du canal peut être ajustée de manière flexible pour s'adapter aux différentes conditions du marché. Des canaux plus larges peuvent filtrer plus de fluctuations et réduire la fréquence des transactions. Des canaux plus étroits peuvent identifier les changements de tendance plus tôt et augmenter la fréquence des transactions.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Les prix peuvent aller au-delà du canal. Les paramètres doivent être ajustés correctement pour contrôler les risques.

  2. Si le canal est trop large, certaines opportunités commerciales peuvent être manquées.

  3. Les canaux trop étroits peuvent accroître les transactions inefficaces.

Directions d'optimisation

Cette stratégie peut être optimisée dans les aspects suivants:

  1. Optimiser le paramètre Période. Ajuster le cycle de calcul de la moyenne mobile pour s'adapter à différents produits et délais.

  2. Optimisez le paramètre de largeur de gamme, ajustez la portée du canal en fonction de la volatilité du marché et des préférences personnelles en matière de risque.

  3. Ajoutez une stratégie de stop-loss. Définissez des points de stop-loss raisonnables pendant la tenue de positions pour contrôler efficacement la perte maximale par transaction.

  4. Combinez avec d'autres indicateurs pour le filtrage des entrées.

  5. Diversifier les applications stratégiques et optimiser les paramètres.

Résumé

Cette stratégie combine l'indicateur EHMA et l'indicateur de canal adaptatif pour former une stratégie de suivi des tendances. Il peut identifier efficacement les tendances du marché et filtrer les fluctuations de prix pour éviter les transactions inutiles. Après une série d'optimisation des paramètres et de contrôle des risques, des profits stables peuvent être réalisés sur divers produits et délais.


/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

Plus de