Cette stratégie est appelée stratégie de stop-loss parallèle basée sur l’indicateur ATR. Cette stratégie utilise l’indicateur ATR pour ajuster la vitesse de contraction de la courbe de stop-loss parallèle, lui permettant de s’adapter aux changements de volatilité du marché.
Le facteur d’accélération du stop traditionnel est inchangé et ne peut pas faire face à une augmentation de la volatilité. Cette stratégie accélère la vitesse de contraction de la parallèle avec l’augmentation de la valeur de l’ATR, de sorte que lorsque la volatilité augmente, la courbe de stop peut se rapprocher plus rapidement du prix et contrôler efficacement le risque.
Plus précisément, la stratégie détermine la direction de la tendance des prix, calcule un facteur d’accélération adaptatif en fonction de la valeur ATR et trace la courbe de stop-loss de la parabolique. Lorsque le prix franchit la ligne de stop-loss, le stop-loss est placé.
L’avantage de cette stratégie est qu’elle permet aux arrêts de la ligne de parachute traditionnelle de s’adapter dynamiquement en fonction de la volatilité du marché. Cependant, les paramètres ATR doivent être optimisés et les arrêts de la ligne de parachute sont trop sensibles et peuvent être franchis.
Dans l’ensemble, l’adaptation au stop loss est importante pour protéger les profits et contrôler les risques. Les traders doivent choisir des indicateurs de stop loss appropriés en fonction des conditions du marché et tester et optimiser les paramètres pour tirer le meilleur parti de la stratégie de stop loss.
/*backtest
start: 2023-08-13 00:00:00
end: 2023-09-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="ATR Parabolic SAR Strategy [QuantNomad]", shorttitle="ATR PSAR Strategy [QN]", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)
atr_length = input(14)
start = input(0.02)
increment = input(0.02)
maximum = input(0.2)
entry_bars = input(1, title = "Entry on Nth trend bar")
atr = atr(atr_length)
atr := na(atr) ? tr : atr
psar = 0.0 // PSAR
af = 0.0 // Acceleration Factor
trend_dir = 0 // Current direction of PSAR
ep = 0.0 // Extreme point
trend_bars = 0
sar_long_to_short = trend_dir[1] == 1 and close <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1] // PSAR switches from short to long
trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long
// Calculate trend direction
trend_dir := barstate.isfirst[1] and close[1] > open[1] ? 1 :
barstate.isfirst[1] and close[1] <= open[1] ? -1 :
sar_long_to_short ? -1 :
sar_short_to_long ? 1 : nz(trend_dir[1])
trend_bars := sar_long_to_short ? -1 :
sar_short_to_long ? 1 :
trend_dir == 1 ? nz(trend_bars[1]) + 1 :
trend_dir == -1 ? nz(trend_bars[1]) - 1 :
nz(trend_bars[1])
// Calculate Acceleration Factor
af := trend_change ? start :
(trend_dir == 1 and high > ep[1]) or
(trend_dir == -1 and low < ep[1]) ?
min(maximum, af[1] + increment) :
af[1]
// Calculate extreme point
ep := trend_change and trend_dir == 1 ? high :
trend_change and trend_dir == -1 ? low :
trend_dir == 1 ? max(ep[1], high) :
min(ep[1], low)
// Calculate PSAR
psar := barstate.isfirst[1] and close[1] > open[1] ? low[1] :
barstate.isfirst[1] and close[1] <= open[1] ? high[1] :
trend_change ? ep[1] :
trend_dir == 1 ? psar[1] + af * atr :
psar[1] - af * atr
plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red, linewidth = 2)
// Strategy
strategy.entry("Long", true, when = trend_bars == entry_bars)
strategy.entry("Short", false, when = trend_bars == -entry_bars)