Stratégie de négociation de rupture de la fourchette de volatilité

Auteur:ChaoZhang est là., Date: 2021-09-21 20:38:29 Je vous en prie.
Les étiquettes:

Résumé

Cette stratégie génère des signaux de trading basés sur la fourchette de volatilité historique du prix. Elle calcule la différence entre les prix les plus élevés et les plus bas sur une certaine période, et forme une fourchette de volatilité en utilisant des moyennes mobiles. Les signaux de trading sont déclenchés lorsque le prix franchit les bandes supérieures ou inférieures de la fourchette. Elle appartient aux stratégies de rupture de tendance.

La logique de la stratégie

L'indicateur de base est la volatilité historique du prix.

  1. Calculer la différence entre les prix les plus élevés et les prix les plus bas sur les N barres passées, appelées HL

  2. Calculer la moyenne des prix les plus élevés et les plus bas sur N barres, avg ((H, L)

  3. La volatilité est calculée en fonction de l'indice de volatilité de l'indice de volatilité.

où N est le paramètre Longueur de volatilité.

Après avoir obtenu la volatilité, les bandes sont calculées comme suit:

Bandes supérieures = Fermeture en cours + Fermeture en cours * Volatilité

Bandes inférieures = Fermeture en cours - Fermeture en cours * Volatilité

Les bandes sont ensuite lissées par WMA avec une période définie comme Longueur moyenne.

Lorsque le prix dépasse la bande supérieure, allez long. Lorsque le prix dépasse la bande inférieure, allez court.

Les signaux de sortie sont définis par Type de sortie:

  1. Si le type de sortie est Volatilité MA, sortez lorsque le prix reculera en dessous de WMA.

  2. Si le type de sortie est Range Crossover, sortez lorsque le prix reculera en dessous des bandes.

Les avantages

  • La volatilité attrape bien les tendances
  • La WMA rend les bandes plus stables et fiables
  • Les signaux de rupture de tendance se retournent en temps opportun
  • Les sorties basées sur les WMA/bandes réduisent rapidement les pertes
  • Beaucoup de marge de manœuvre pour l'ajustement des paramètres pour différents marchés

Les risques

  • Les écarts peuvent entraîner un renversement des prix
  • Risque de pertes importantes lors d'inversions de tendance
  • La WMA est parfois en retard dans la détection des virages de tendance
  • Optimisation des paramètres pas facile, nécessite beaucoup d'essais et d'erreurs
  • Des prélèvements plus importants, une bonne gestion des risques

Les risques peuvent être réduits par:

  • Optimisation des paramètres pour des bandes plus fiables
  • Ajout d'autres indicateurs afin d'éviter les problèmes
  • Dimensions réduites et meilleure gestion des risques
  • En considérant les réentrées

Directions d'optimisation

La stratégie peut être améliorée par:

  1. Réglage des paramètres

Testez différentes valeurs de longueur pour trouver des combinaisons optimales.

  1. Ajout d'autres indicateurs

Par exemple, lorsque le prix dépasse la bande supérieure, vérifiez si le MACD est également en croisement doré.

  1. Il vaut mieux arrêter de perdre.

Optimisation pour les arrêts de trailers au lieu de simples arrêts de rupture de portée.

  1. Rentrée

Définir des règles de rentrée pour repérer les tendances après les arrêts.

  1. Dimensionnement de la position

Ajustez dynamiquement les tailles en fonction de la volatilité du marché.

Résumé

Cette stratégie fonctionne bien pour les marchés tendance en général en utilisant des bandes basées sur la volatilité pour mesurer la force de la tendance et WMA pour former des plages de trading fiables pour les signaux de rupture.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 5m
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/
// © wbburgin

//@version=5
strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true,
 pyramiding=20,max_bars_back=2000,initial_capital=10000)

wma(float priceType,int length,float weight) =>
    norm = 0.0
    sum = 0.0
    for i = 0 to length - 1
        norm := norm + weight
        sum := sum + priceType[i] * weight
    sum / norm

// This definition of volatility uses the high-low range divided by the average of that range.
volatility(source,length) =>
    h = ta.highest(source,length)
    l = ta.lowest(source,length)
    vx = 2 * (h - l) / (h + l)
    vx

vm1 = input.int(100,"Average Length")
volLen = input.int(100,"Volatility Length")
vsrc = input.source(close,"Volatility Source")
cross_type = input.source(close,"Exit Source")
exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type")

volatility = volatility(vsrc,volLen)

highband1 = close + (close * volatility)
lowband1 = close - (close * volatility)
hb1 = wma(highband1,vm1,volatility)
lb1 = wma(lowband1,vm1,volatility)
hlavg = math.avg(hb1,lb1)

upcross = ta.crossover(high,hb1)    //Crossing over the high band of historical volatility signifies a bullish breakout
dncross = ta.crossunder(low,lb1)    //Crossing under the low band of historical volatility signifies a bearish breakout

vlong = upcross
vshort = dncross
vlong_exit = switch
    exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1)
vshort_exit = switch
    exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg)
    exit_type == "Range Crossover" => ta.crossover(cross_type,lb1)

if vlong
    strategy.entry("Long",strategy.long)
if vlong_exit
    strategy.close("Long")
if vshort
    strategy.entry("Short",strategy.short)
if vshort_exit
    strategy.close("Short")

plot(hlavg,color=color.white,title="Weighted Volatility Moving Average")
t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top")
b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom")

alertcondition(vlong,"Volatility Long Entry Signal")
alertcondition(vlong_exit,"Volatility Long Exit Signal")
alertcondition(vshort,"Volatility Short Entry Signal")
alertcondition(vshort_exit,"Volatility Short Exit Signal")

fill(t,b,color=color.new(color.aqua,90))

Plus de