Stratégie d'arrêt de traînée de l'élan Bitcoin

Auteur:ChaoZhang est là., Date: 2024-03-08 16:20:16 Les résultats sont publiés dans les journaux.
Les étiquettes:

img

Vue d'ensemble de la stratégie

La stratégie Bitcoin Momentum Trailing Stop est une stratégie basée uniquement sur la dynamique de long terme conçue pour capturer les tendances haussières de Bitcoin tout en atténuant le risque de baisse grâce à des stop-loss ajustés dynamiquement. La stratégie utilise une technique simple mais intelligente de stop-stop à momentum, qui resserre le stop-loss pendant une volatilité fortement baissière pour protéger les bénéfices ouverts et assouplit le stop-loss pendant une dynamique haussière soutenue pour laisser courir les bénéfices. La stratégie reste investie tant que le prix de Bitcoin est au-dessus de la moyenne mobile exponentielle (EMA) de 20 semaines et quitte lorsque le prix se ferme en dessous.

Principe de stratégie

  1. Le prix actuel du Bitcoin doit être négocié au-dessus de l'EMA à plus long terme (20 semaines).
  2. Le Bitcoin ne doit pas être dans un état de prudence, défini comme le sommet d'oscillation récent moins le bas de la barre actuelle étant supérieur à 1,5 fois l'ATR, ou la clôture quotidienne étant inférieure à l'EMA quotidien de 20.
  3. Le stop-loss est défini au niveau le plus élevé d'oscillation récent moins 1 ATR, ou moins 20% de l'ATR (c'est-à-dire 0,2 ATR) si l'état de prudence est atteint.
  4. La sortie sur la barre suivante s'ouvre lorsque le prix se ferme en dessous du stop-loss.

La stratégie utilise le graphique hebdomadaire et l'EMA de 20 semaines comme filtre de tendance, n'entrant que lorsque le prix est au-dessus de l'EMA de 20 semaines. Un ATR à 5 périodes est utilisé pour ajuster dynamiquement la distance du trailing stop, qui se resserre dans l'état de prudence.

Les avantages de la stratégie

  1. Simplicité et efficacité: La logique de la stratégie est simple, claire, facile à comprendre et à mettre en œuvre, tout en capturant efficacement les principales tendances haussières de Bitcoin.

  2. L'évaluation de la rentabilité de l'opération est effectuée en tenant compte de l'évolution de l'activité de l'entreprise.

  3. Filtrage des tendances: en filtrant avec une moyenne mobile de niveau supérieur (EMA de 20 semaines), la stratégie n'entre que lors de tendances haussières claires, améliorant considérablement le taux de réussite et le rapport risque-rendement de la stratégie.

  4. La taille de la position: la valeur par défaut est de négocier avec une position complète, maximisant l'utilisation du capital et améliorant l'efficacité du capital.

  5. Large application: la logique de la stratégie peut être facilement portée à d'autres actifs et marchés, avec une bonne généralisabilité.

Risques stratégiques

  1. Applicabilité des paramètres: Les paramètres de stratégie sont définis en fonction des caractéristiques du marché Bitcoin, et leur applicabilité à d'autres marchés doit être validée et peut nécessiter une optimisation des paramètres pour différents actifs.

  2. Identification des tendances: la stratégie repose principalement sur des indicateurs techniques tels que les EMA et les ATR de niveau supérieur pour juger des tendances, qui ne sont pas aussi complètes que l'analyse fondamentale pour comprendre les conditions du marché et sont sujettes à des erreurs aux moments de tournant du marché.

  3. Risque de stop-loss: Bien que les stop-loss dynamiques puissent contrôler le risque dans une certaine mesure, des retraitements importants peuvent encore se produire dans des conditions de marché extrêmes (telles que des baisses brusques ou des fluctuations profondes rapides).

  4. Potentiel de profit: la stratégie fonctionne bien dans les tendances à la hausse unidirectionnelles, mais est plus susceptible de tomber dans le dilemme des arrêts fréquents sur les marchés en marge, limitant potentiellement le potentiel de profit global.

  5. Performance en direct: Bien que la stratégie fonctionne bien dans le backtesting, le trading en direct est affecté par des facteurs tels que le glissement et les commissions, et les résultats réels peuvent différer des rendements théoriques, ce qui nécessite une évaluation minutieuse.

Directions d'optimisation

  1. Détermination des tendances: envisager l'introduction de moyennes mobiles de plus haut niveau, d'indicateurs de volatilité ou même de données fondamentales afin d'améliorer l'exactitude et la fiabilité de l'identification des tendances.

  2. Paramètres dynamiques: les positions stop-loss et les paramètres ATR peuvent être encore optimisés en introduisant des mécanismes d'ajustement dynamiques liés au prix ou à la volatilité pour s'adapter aux différents états du marché.

  3. Taille des positions: ajuster dynamiquement la taille des positions en fonction d'indicateurs tels que la force de la tendance et la volatilité, augmenter la taille des positions lorsque la tendance est forte et réduire la taille des positions en cas de forte volatilité afin d'améliorer le rapport risque/rendement.

  4. Mécanisme long/short: Introduction d'un mécanisme de vente à découvert sur les marchés baissiers afin d'élargir l'applicabilité et la rentabilité potentielle de la stratégie.

  5. Combinaison de stratégies: combiner cette stratégie avec d'autres stratégies (telles que la réversion moyenne) pour compléter les points forts de l'autre et améliorer la stabilité et la rentabilité de la stratégie.

Résumé de la stratégie

La stratégie de trail-stop de l'élan Bitcoin est une stratégie d'élan simple et efficace qui capture les fortes tendances haussières de Bitcoin en utilisant des moyennes mobiles de plus haut niveau et des indicateurs ATR tout en contrôlant le risque à la baisse grâce à des stop-loss dynamiquement ajustés. Cette stratégie peut servir de modèle de base, et les investisseurs peuvent l'affiner davantage en fonction de leurs propres besoins et de leur expérience dans des domaines tels que la détermination des tendances, l'optimisation des paramètres, la gestion des positions et les mécanismes long/short, ou la combiner avec d'autres stratégies pour atteindre un ratio risque-rendement plus élevé.


/*backtest
start: 2023-03-08 00:00:00
end: 2024-03-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ZenAndTheArtOfTrading
// ------------------------------------------------------------------------------------------------------
// System Concept: Capture as much Bitcoin upside volatility as possible while side-stepping downside volatility.
//  Entry Rule #1: Bitcoin must be trading above higher-timeframe EMA (Weekly 20 EMA)
//  Entry Rule #2: Bitcoin must not be in 'caution' condition
//      -> Caution: True if BTC's recent swing high minus its current low is > 1.5x ATR OR close < Daily EMA
//  Trailing Stop: Stop is trailed 1 ATR from recent swing high, OR 20% of ATR if in caution condition
// ------------------------------------------------------------------------------------------------------
// @version=5
strategy("Bitcoin Momentum Strategy", 
     overlay=true)

// Get user input
var const string    G_STRATEGY  = "Strategy Entry Settings"
var const string    G_EXIT      = "Strategy Exit Settings"
var const string    G_FILTER    = "Strategy Filters"
i_HigherTimeframe   = input.timeframe("W", "Higher Timeframe", group=G_STRATEGY, tooltip="Higher timeframe MA reference")
i_EmaLength         = input.int(20, "EMA Length", group=G_STRATEGY, tooltip="Moving average period length")
i_AtrLength         = input.int(5, "ATR Length", group=G_STRATEGY, tooltip="ATR period length")
i_TrailStopSource   = input.source(low, "Trail Stop Source", group=G_EXIT, tooltip="Lowest price source for trailing stop")
i_TrailStopLookback = input.int(7, "Trail Stop Lookback", group=G_EXIT, tooltip="How many bars to look back for trailing price source")
i_TrailStopMulti    = input.float(0.2, "Trailing Stop Ratchet Multiplier", group=G_EXIT, tooltip="When momentum is yellow (caution), shrink ATR distance for TS by this much")
i_StartTime         = input(timestamp("01 Jan 2000 13:30 +0000"), "Start Filter", group=G_FILTER, tooltip="Start date & time to begin searching for setups")
i_EndTime           = input(timestamp("1 Jan 2099 19:30 +0000"), "End Filter", group=G_FILTER, tooltip="End date & time to stop searching for setups")

// Define custom security function which does not repaint
RequestSecurity_NonRP(_market, _res, _exp) => request.security(_market, _res, _exp[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

// Define date filter check
DateFilter(int start, int end) => time >= start and time <= end

// Get indicator values
float   atrValue    = ta.atr(i_AtrLength)
float   emaValue    = ta.ema(close, i_EmaLength)
float   htfEmaValue = RequestSecurity_NonRP(syminfo.tickerid, i_HigherTimeframe, emaValue)
float   marketPrice = close

// Check for bullishness / bearish volatility caution
bool    isBullish   = marketPrice > htfEmaValue
bool    isCaution   = isBullish and (ta.highest(high, 7) - low > (atrValue * 1.5) or marketPrice < emaValue) 

// Set momentum color
color bgCol = color.red
if isBullish[1]
    bgCol := color.green
if isCaution[1]
    bgCol := color.orange

// Handle strategy entry, and reset trailing stop
var float trailStop = na
if isBullish and strategy.position_size == 0 and not isCaution
    strategy.entry(id="Buy", direction=strategy.long)
    trailStop := na

// Update trailing stop
float temp_trailStop = ta.highest(i_TrailStopSource, i_TrailStopLookback) - (isCaution[1] ? atrValue * i_TrailStopMulti : atrValue)
if strategy.position_size > 0
    if temp_trailStop > trailStop or na(trailStop)
        trailStop := temp_trailStop

// Handle strategy exit
if (close < trailStop or close < htfEmaValue) and barstate.isconfirmed
    strategy.close("Buy", comment="Sell")

// Draw trailing stop, HTF EMA and color-coded momentum indicator
plotshape(true, color=bgCol, style=shape.square, location=location.bottom, size=size.auto, title="Momentum Strength")
plot(htfEmaValue, color=close > htfEmaValue ? color.green : color.red, linewidth=2, title="HTF EMA")
plot(emaValue, color=close > emaValue ? color.green : color.red, linewidth=1, title="CTF EMA")
plot(strategy.position_size[1] > 0 ? trailStop : na, style=plot.style_linebr, color=color.red, title="Stop Loss")

Plus de