Cette stratégie est basée sur la zone de fluctuation historique des prix pour déterminer les signaux de négociation. Elle calcule la différence entre le prix le plus élevé et le prix le plus bas d’une certaine période et forme une zone de fluctuation à l’aide d’une moyenne mobile.
L’indicateur central de la stratégie est le taux de fluctuation historique des prix.
Calculer la différence entre le prix le plus élevé et le prix le plus bas du dernier bar à N racine, et l’écrire en HL
Calculer la moyenne des plus hauts et des plus bas prix du dernier N-root Bar (avg ((H, L))
Le taux de fluctuation = HL / avg (H, L)
où N est le paramètre de “Volatility Length”。
Après avoir obtenu le taux de volatilité, on calcule le haut et le bas:
En amont = fermeture actuelle + fermeture actuelle * taux de volatilité
La trajectoire descendante = la clôture actuelle - la clôture actuelle * la volatilité
La trajectoire ascendante et descendante est ensuite lissée à travers la ligne uniforme WMA, avec le paramètre “Average Length” [2].
Faire plus quand le prix est en hausse; faire moins quand le prix est en baisse.
Les signaux de plafonnement sont donnés en fonction du paramètre “Exit Type”:
Lorsque le type de sortie est un MA de volatilité, le prix revient à la position de repli de la moyenne WMA;
Exit Type est un Range Crossover et le prix revient à la parité.
Les mesures suivantes peuvent réduire le risque:
Cette stratégie peut être optimisée dans les domaines suivants:
Il est possible de trouver la meilleure combinaison de paramètres en testant différents paramètres de Longueur.
Par exemple, si le MACD est aussi le fourche d’or au moment où le prix est sur la voie de la rupture, l’entrée en bourse est plus longue.
Il est possible d’optimiser le tracking stop avec de l’élasticité, plutôt qu’un simple break-out intermédiaire.
Après l’arrêt de la perte, si la tendance se poursuit, il est possible de définir des conditions de réentrée et de suivre à nouveau la tendance.
Les positions peuvent être ajustées dynamiquement en fonction de la volatilité du marché.
Cette stratégie est généralement plus adaptée à la tendance, en déterminant la direction et la force de la tendance par les courbes et les courbes basses sur la volatilité, et en utilisant la moyenne WMA pour former une zone de négociation plus fiable, ce qui crée des points de vente et d’achat. Cependant, il y a quelques problèmes, tels que le retard de la tendance, l’amélioration de la méthode de stop-loss, etc.
/*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))