Stratégie de gestion de la volatilité à double sens


Date de création: 2023-11-21 12:04:19 Dernière modification: 2023-11-21 12:04:19
Copier: 0 Nombre de clics: 608
1
Suivre
1621
Abonnés

Stratégie de gestion de la volatilité à double sens

Aperçu

Cette stratégie est une stratégie de trading bidirectionnelle qui suit la volatilité. Elle utilise l’indicateur ATR de la volatilité réelle moyenne pour définir un stop loss et pour déterminer la direction de la tendance en fonction de la direction dans laquelle le prix a franchi le stop loss.

Principe de stratégie

La stratégie utilise le taux de volatilité ATR de 3 jours. La valeur ATR est multipliée par un coefficient comme point d’arrêt. Elle est jugée comme une tendance à la hausse lorsque le prix est supérieur au point d’arrêt et est fermée lorsque le prix descend au-dessus du point d’arrêt.

Analyse des avantages

  • L’ATR est utilisé pour suivre la dynamique de la volatilité du marché et réduire la probabilité de rupture du seuil de stop loss.
  • Les échanges bidirectionnels permettent de tirer profit des fluctuations bidirectionnelles du marché
  • Le point d’ouverture inverse est choisi au début d’un changement de tendance pour augmenter la probabilité de profit.

Analyse des risques

  • Les marchés peuvent être très volatiles, l’ATR ne peut pas refléter pleinement la volatilité réelle, ce qui entraîne une rupture du stop loss
  • Le risque de GAP est associé à des positions multiples
  • Des transactions à petits bénéfices peuvent être fréquentes

En fonction du risque, il est possible d’augmenter le coefficient ATR, d’augmenter la zone de couverture, de contrôler la fréquence des transactions, de définir un stop minimum, etc.

Direction d’optimisation

  • Signal de changement de tendance associé à d’autres indicateurs
  • Optimisation des paramètres ATR
  • Ajout de contrôle de volume

Résumer

Cette stratégie est globalement une stratégie de stop-loss à suivi bidirectionnel stable. Le risque de retrait est maîtrisé par la mise en place dynamique d’un stop-loss via l’indicateur ATR. Parallèlement, les transactions bidirectionnelles augmentent les opportunités de profit.

Code source de la stratégie
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("BCH Swinger v1", overlay=true, commission_value = 0.25, default_qty_type=strategy.percent_of_equity, default_qty_value = 100)

/////////////////////////////////////////////////////////////
//START - SET DATE RANGE

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2017, title = "From Year")
ToMonth   = input(defval = 10, title = "To Month", minval = 1)
ToDay     = input(defval = 01, title = "To Day", minval = 1)
ToYear    = input(defval = 2020, title = "To Year")

startDate = time > timestamp(FromYear, FromMonth, FromDay, 1, 1)
endDate = time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
withinTimeRange = true

/////////////////////////////////////////////////////////////
//END - SET DATE RANGE



/////////////////////////////////////////////////////////////
//START - INDICATORS

length = input(3)
mult = input(1, minval = 0.01)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
is_uptrend_prev = nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend = close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ = is_trend_changed ? close : max1
min_ = is_trend_changed ? close : min1
vstop = is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? yellow : red, style=circles, linewidth=2)

/////////////////////////////////////////////////////////////
//END - INDICATORS



/////////////////////////////////////////////////////////////
//START - TRADING RULES
direction = input(defval=1, title = "Strategy Direction",  minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

condition1 = close > vstop and withinTimeRange
condition2 = close < vstop and withinTimeRange

strategy.entry("BUY", strategy.long, when = condition1)
strategy.entry("SELL", strategy.short, when = condition2)

/////////////////////////////////////////////////////////////
//END - TRADING RULES