
Aperçu
Cette stratégie combine l’indicateur ATR (Average True Range) et l’indicateur SMA (Simple Moving Average) pour réaliser un système de négociation avec suivi des arrêts de perte dynamiques. Lorsque le prix est au-dessus du SMA, le prix d’arrêt dynamique basé sur l’ATR augmente progressivement à mesure que le prix augmente.
Principe de stratégie
- Le calcul de la SMA de 50 jours est effectué lorsque le prix de clôture est supérieur à la SMA de 50 jours.
- Pour calculer l’indicateur ATR, le cycle ATR est de 10, multiplié par une valeur clé ((défaut 3) pour obtenir la marge de stop loss nLoss。
- Calculer le prix d’arrêt dynamique xATRTrailingStop avec une valeur initiale de 0。
- Lorsque le prix de clôture et le prix de clôture précédent sont tous deux supérieurs au prix de stop précédent, le nouveau prix de stop est la plus grande valeur entre le prix de stop précédent et le prix de clôture - nLoss.
- Lorsque le prix de clôture et le prix de clôture précédent sont tous deux inférieurs au prix de clôture précédent, le nouveau prix de clôture est la plus petite valeur du prix de clôture précédent et du prix de clôture plus nLoss.
- Dans d’autres cas, le nouveau prix de stop-loss est le prix de clôture - nLoss ou le prix de clôture + nLoss.
- Le prix de clôture est plafonné lorsque le prix de clôture est inférieur au prix de stop-loss dynamique.
- Les points d’arrêt sont indiqués par des couleurs différentes, les points d’arrêt à plusieurs têtes sont indiqués en vert, les points d’arrêt à tête nue en rouge et les autres points d’arrêt en bleu.
Analyse des avantages
- Les stop-loss dynamiques permettent de protéger les bénéfices en cas de tendance et de réduire le risque de retrait. Comparés aux stop-loss fixes, les stop-loss dynamiques sont plus flexibles et peuvent s’adapter à différentes conditions de marché.
- L’amplitude du stop loss est calculée sur la base de l’indicateur ATR, qui reflète bien la taille des fluctuations du marché. La distance de stop loss s’ajuste automatiquement en fonction des fluctuations de la tendance récente, augmentant l’espace de stop loss lorsque les fluctuations augmentent et réduisant l’espace de stop loss lorsque les fluctuations diminuent.
- En utilisant le SMA comme base de jugement de tendance, il est possible de capturer une tendance relativement claire. En plaçant plus d’options au-dessus du SMA, il est possible d’intervenir au début de la tendance et de gagner plus de marge de profit.
- Permet aux utilisateurs de définir des paramètres ATR et des valeurs clés, permettant une flexibilité dans l’adaptation des paramètres de stratégie aux caractéristiques de différentes variétés et périodes.
Analyse des risques
- Dans des situations de tendance incertaine ou de choc, cette stratégie peut entraîner des positions de vente fréquentes, entraînant une augmentation des coûts de transaction et une diminution des bénéfices.
- Cette stratégie ne fait que de la logique et ne peut pas être rentable dans une tendance à la baisse, face au risque d’un marché unilatéral. Il est possible d’envisager d’ajouter la logique de couverture et de réaliser des transactions bidirectionnelles.
- Le point de rupture est calculé sur la base de l’ATR. En cas de forte volatilité du marché, l’espace de rupture peut être trop grand, ce qui augmente le risque.
- Une mauvaise sélection des paramètres peut entraîner l’inefficacité de la stratégie. Par exemple, le choix d’un cycle ATR trop petit peut entraîner un arrêt trop sensible et trop fréquent. Un arrêt trop important peut ne pas être arrêté à temps et augmenter les pertes.
Direction d’optimisation
- L’ajout de la logique de prise de position permet de profiter également de la tendance à la baisse et d’améliorer l’adaptabilité de la stratégie. Il est possible d’ouvrir des ordres vides lorsque le prix tombe au-dessus de la SMA, tout en utilisant la logique de stop loss dynamique.
- Introduire la gestion des positions ouvertes multiples, en ajustant la taille des positions en fonction de l’intensité de la tendance. Augmenter les positions lorsque la tendance est forte, améliorer les gains; Réduire les positions lorsque la tendance est faible, contrôler les risques.
- Optimiser la logique de stop loss, en définissant un maximum de stop loss pour éviter des pertes excessives dans des situations extrêmes. En outre, il est possible d’envisager de définir un point d’arrêt, en se libérant activement de la position après la réalisation des gains attendus, plutôt que de la conserver jusqu’à ce qu’elle soit stoppée.
- Optimiser les paramètres en parcourant différentes combinaisons de paramètres pour trouver le meilleur paramètre. Des méthodes d’optimisation intelligentes telles que les algorithmes génétiques peuvent être utilisées pour améliorer l’efficacité de l’optimisation.
- Envisagez d’ajouter plus de conditions de filtrage, telles que le volume de transactions, la volatilité, etc., afin de mieux juger les tendances et les risques, et d’améliorer la fiabilité du signal.
Résumer
La stratégie est basée sur les indicateurs ATR et SMA pour réaliser un système de trading de suivi de stop-loss dynamique, capable d’ajuster automatiquement la position de stop-loss dans des conditions de tendance, de protéger les bénéfices et de contrôler les risques. La logique de la stratégie est claire, les avantages sont évidents, mais il existe également des limites et des points de risque.
Code source de la stratégie
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Trailingstop", overlay=true)
if close > sma(close, 50)
strategy.entry("long", strategy.long)
// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0
if (strategy.position_size > 0)
stopValue = close * (1 - Trailperc)
price_stop_long := max(stopValue, price_stop_long[1])
else
price_stop_long := 0
if (strategy.position_size > 0)
strategy.exit(id="stoploss_long", stop=price_stop_long)
// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0
if (strategy.position_size < 0)
stopValue_short = close * (1 + Trailperc_short)
price_stop_short := min(stopValue_short, price_stop_short[1])
else
price_stop_short := 0
if (strategy.position_size < 0)
strategy.exit(id="stoploss_short", stop=price_stop_short)
// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = 0
pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")