Stratégie de rupture d'élan avec arrêt de volatilité

Auteur:ChaoZhang est là., Date: 2023-11-13 17:20:51 Je suis désolé
Les étiquettes:

img

Résumé

Il s'agit d'une stratégie de suivi de tendance basée sur la rupture et l'arrêt de la volatilité. La stratégie identifie la direction de la tendance par rupture du prix de la ligne de stop-loss dynamique. Elle entre dans le commerce lorsque le prix pénètre la ligne de stop-loss et utilise la ligne de stop-loss pour suivre les tendances et verrouiller les bénéfices.

La logique de la stratégie

La stratégie utilise un indicateur d'arrêt de volatilité pour déterminer la direction de la tendance et suivre l'arrêt de la perte.

  1. Calculer l'ATR (intervalle réel moyen) du prix
  2. Obtenez la ligne stop loss en multipliant ATR par un coefficient stop loss
  3. Lorsque le prix monte, enregistrer le prix le plus élevé, la ligne de stop-loss est le prix le plus élevé moins ATR * coefficient
  4. Lorsque le prix descend, enregistrer le prix le plus bas, la ligne stop loss est le prix le plus bas plus ATR * coefficient

La ligne stop-loss fluctue avec le prix, formant un canal dynamique.

Lorsque le prix pénètre la ligne de stop loss, il signale un renversement de tendance.

  • Lorsque le prix dépasse la ligne de stop-loss, passez long
  • Lorsque le prix tombe en dessous de la ligne de stop loss, passez à court

Après l'ouverture de la position, la stratégie suit le stop loss avec la ligne:

  • Pour long, stop loss est le prix le plus élevé moins ATR * coefficient
  • En bref, le stop loss est le prix le plus bas plus le coefficient ATR *

Lorsque le prix atteint à nouveau la ligne de stop loss, la position sera fermée.

De cette façon, la stratégie peut suivre les tendances en temps opportun tout en contrôlant le risque avec des arrêts.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. Peut détecter les changements de tendance en temps opportun et suivre la tendance
  2. Utilise un stop loss dynamique pour ajuster la position stop en fonction de la volatilité du marché
  3. Mise à jour du stop-loss avec tendance à verrouiller les bénéfices maximaux
  4. Conduit la tendance à réaliser des bénéfices importants
  5. Contrôle efficacement les risques et évite d' énormes pertes

Analyse des risques

Il y a aussi quelques risques à prendre en considération:

  1. Le stop loss peut être déclenché fréquemment sur les marchés à variation.
  2. Besoin de définir le coefficient de stop-loss approprié, trop petit peut être trop sensible
  3. Les frais de négociation peuvent consommer les bénéfices avec des transactions fréquentes
  4. Peut manquer quelques bénéfices au début de la tendance
  5. Risque lorsque le stop loss est trop éloigné du prix

Les solutions:

  1. Optimiser le coefficient de perte d'arrêt par backtest pour trouver le meilleur paramètre
  2. Utiliser des délais plus longs pour réduire la fréquence des transactions
  3. Ajoutez un filtre pour éviter le sur-échange
  4. Permettez une certaine souplesse dans la distance d'arrêt, mais pas trop grande

Directions d'optimisation

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

  1. Optimiser le coefficient de perte d'arrêt pour trouver la meilleure combinaison de paramètres
  2. Ajoutez des filtres pour éviter les fouets dans le marché de la gamme
  3. Combiner plusieurs délais pour la vérification du signal
  4. Optimiser le dimensionnement de la position, augmenter progressivement la taille
  5. Considérez un ajustement dynamique du calendrier
  6. Combinez avec les fondamentaux des actions pour détecter les principales tendances

Résumé

Dans l'ensemble, cette stratégie de rupture d'élan avec arrêt de volatilité est un système de suivi de tendance très pratique. Elle peut capturer les opportunités d'inversion de tendance et suivre la tendance tout en contrôlant efficacement le risque avec des arrêts dynamiques. Avec un réglage approprié des paramètres, elle peut obtenir un bon rendement pendant les marchés tendance. Mais certains problèmes doivent être résolus comme les arrêts trop sensibles, la fréquence de trading élevée, etc. Des optimisations supplémentaires peuvent en faire une stratégie de trading quantitative efficace et robuste.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
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/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


Plus de