Stratégie dynamique d'arrêt des pertes par ATR

Auteur:ChaoZhang est là., Date: 2023-12-11 14h24 et 18h
Les étiquettes:

img

Résumé

Cette stratégie est basée sur le mécanisme de stop loss dynamique conçu avec l'indicateur ATR pour ajuster le stop loss en temps réel tout en assurant un stop loss efficace pour maximiser les bénéfices.

La logique de la stratégie

La stratégie utilise la période ATR rapide 5 et la période ATR lente 10 pour construire un stop-loss dynamique de suivi à deux couches. Lorsque le prix se déplace dans une direction favorable, la couche rapide activera d'abord le stop de suivi pour resserrer le stop-loss; lorsqu'il y a un rebond à court terme, le stop-loss à couche lente peut éviter un stop-out prématuré. Pendant ce temps, le croisement entre les couches rapide et lente sert de signal de trading.

Plus précisément, la distance d'arrêt de perte de la couche rapide est de 0,5 fois l'ATR à 5 périodes et la distance d'arrêt de perte de la couche lente est de 3 fois l'ATR à 10 périodes. Un signal d'achat est généré lorsque la couche rapide dépasse la couche lente et un signal de vente est généré lorsque la couche rapide dépasse la couche lente. La ligne d'arrêt de perte est également mise à jour en temps réel et tracée en dessous de la courbe de prix.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle peut ajuster dynamiquement la position de stop loss pour maximiser les profits tout en assurant un stop loss efficace.

La couche rapide répond rapidement et la couche lente peut filtrer le bruit à court terme pour éviter une perte d'arrêt prématurée.

Analyse des risques

Le principal risque de cette stratégie réside dans la question de savoir si le réglage de la distance d'arrêt de perte est raisonnable. Si le multiplicateur ATR est trop élevé, la plage d'arrêt de perte ne suivra pas le mouvement du prix. Si le multiplicateur ATR est trop petit, il est susceptible d'être arrêté par des bruits à court terme. Par conséquent, les paramètres doivent être ajustés en fonction des caractéristiques des différentes variétés.

En outre, dans un marché à plage, la valeur ATR est plus faible et la ligne de stop loss est plus proche, ce qui peut facilement conduire à un stop loss fréquent.

Directions d'optimisation

Il est possible d'essayer différentes combinaisons de paramètres du cycle ATR afin de trouver l'équilibre optimal. Il peut également envisager de les combiner avec d'autres indicateurs, tels que les indicateurs de tendance pour juger de l'étape du marché, afin d'ajuster dynamiquement la taille du multiplicateur ATR.

Il est également possible d'étudier des alternatives à l'indicateur ATR, le remplacement d'ATR par DKVOL, HRANGE ou ATR Percentage, etc. peut permettre d'obtenir un meilleur effet stop loss.

Résumé

Cette stratégie conçoit un mécanisme de suivi dynamique à deux couches basé sur l'indicateur ATR pour maximiser les profits tout en évitant un stop loss excessif. Elle convient aux utilisateurs qui ont des exigences plus élevées pour le stop loss. Cette stratégie peut ajuster flexiblement les paramètres en fonction des caractéristiques du marché et de la variété pour obtenir un effet de stop loss optimal.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("ATR Trailing Stop Strategy by ceyhun", overlay=true)

/////////notes////////////////////////////////////////
// This is based on the ATR trailing stop indicator //
// width addition of two levels of stops and        //
// different interpretation.                        //
// This is a fast-reacting system and is better     //
// suited for higher volatility markets             //
//////////////////////////////////////////////////////

SC = input(close, "Source", input.source)

// Fast Trail //
AP1 = input(5, "Fast ATR period", input.integer)  // ATR Period
AF1 = input(0.5, "Fast ATR multiplier", input.float)  // ATR Factor
SL1 = AF1 * atr(AP1)  // Stop Loss
Trail1 = 0.0
Trail1 := iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1)))

// Slow Trail //
AP2 = input(10, "Slow ATR period", input.integer)  // ATR Period
AF2 = input(3, "Slow ATR multiplier", input.float)  // ATR Factor
SL2 = AF2 * atr(AP2)  // Stop Loss
Trail2 = 0.0
Trail2 := iff(SC > nz(Trail2[1], 0) and SC[1] > nz(Trail2[1], 0), max(nz(Trail2[1], 0), SC - SL2), iff(SC < nz(Trail2[1], 0) and SC[1] < nz(Trail2[1], 0), min(nz(Trail2[1], 0), SC + SL2), iff(SC > nz(Trail2[1], 0), SC - SL2, SC + SL2)))

// Bar color for trade signal //
Green = Trail1 > Trail2 and close > Trail2 and low > Trail2
Blue = Trail1 > Trail2 and close > Trail2 and low < Trail2
Red = Trail2 > Trail1 and close < Trail2 and high < Trail2
Yellow = Trail2 > Trail1 and close < Trail2 and high > Trail2

// Signals //
Bull = barssince(Green) < barssince(Red)

Buy = crossover(Trail1, Trail2)
Sell = crossunder(Trail1, Trail2)

TS1 = plot(Trail1, "Fast Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.blue : color.yellow, linewidth=2, display=display.none)
TS2 = plot(Trail2, "Slow Trail", style=plot.style_line, color=Trail1 > Trail2 ? color.green : color.red, linewidth=2)
fill(TS1, TS2, Bull ? color.new(color.green, 90) : color.new(color.red, 90))

plotcolor = input(true, "Paint color on chart", input.bool)

bcl = iff(plotcolor == 1, Blue ? color.blue : Green ? color.lime : Yellow ? color.yellow : Red ? color.red : color.white, na)
barcolor(bcl)

if Buy
    strategy.entry("Buy", strategy.long, comment="Buy")

if Sell
    strategy.close("Buy")


Plus de