La stratégie utilise l’indicateur ATR pour définir des points de perte dynamiques et ajuster la position de perte en fonction de l’ampleur des fluctuations des prix, afin de contrôler le risque. La stratégie consiste principalement à effectuer plusieurs entrées en forçant les 5e EMA et la 20e EMA, puis à utiliser l’indicateur ATR pour définir la position de perte et la position d’arrêt. La position de perte s’ajuste en fonction des fluctuations des prix, ce qui permet de bloquer plus de bénéfices.
La stratégie commence par juger qu’il y a une entrée supplémentaire lorsque l’EMA du 5e jour traverse l’EMA du 20e jour pour former une fourchette. Après l’entrée, l’indicateur ATR est utilisé pour calculer le multiple ATR de la distance entre le prix d’entrée et le prix actuel, en fixant le stop loss à 1,5 ATR en dessous du prix d’entrée. Puis, au fur et à mesure que le prix augmente, levez progressivement le stop loss, si la hausse du prix dépasse le prix d’entrée de 3 ATR.
Plus précisément, la stratégie définit les variables suivantes:
Après l’entrée, on calcule at_ref comme étant le montant actuel de l’ATR, at_div comme étant le multiple de l’ATR entre le prix d’entrée et le prix actuel. Puis on définit at_down, at_current et at_up en fonction de la position de l’atr_div. Le prix d’arrêt est 1,5 ATR en dessous du prix d’entrée.
À mesure que le prix augmente, en comparant le prix actuel avg et atr_up, si avg porte atr_up, recalculez la position correspondante de atr_div et atr, ce qui augmente progressivement la ligne de stop-loss et augmente le profit de la position.
Si le prix dépasse le prix d’entrée 3ATR, une partie de la position est levée pour bloquer les bénéfices, et le symbole tookProfit est alors placé comme vrai. Si le prix continue d’augmenter, la position de stop-loss continue d’être élevée. Si le stop-loss est déclenché, le tookProfit est jugé.
En utilisant l’indicateur ATR pour ajuster dynamiquement la position de stop-loss, il est possible de définir une distance de stop-loss raisonnable en fonction de la volatilité du marché.
Dans le cas d’une perte limitée, il est préférable de suivre la tendance et de couper les bénéfices. La ligne de stop-loss s’élève progressivement et les bénéfices s’accumulent.
Le mécanisme de stop-loss partiel permet de bloquer une partie des bénéfices et de réduire les risques. Après cela, la position de stop-loss continue à augmenter, ce qui permet aux bénéfices de continuer à fonctionner.
L’indicateur ATR n’est pas sensible aux ruptures anormales et ne peut pas faire face aux risques liés aux lacunes.
L’EMA n’est pas en mesure de déterminer si la tendance est inversée et peut entrer dans une nouvelle position si la tendance est inversée.
La probabilité d’un revirement de la perte est plus élevée après un arrêt partiel.
Les paramètres ne sont pas suffisamment optimisés, les arrêt de 1,5 ATR et les arrêt de 3 ATR doivent être ajustés en fonction des variétés.
L’ajout d’autres indicateurs de stop-loss, tels que le canal Donchian, peut être envisagé pour éviter le retard de l’indicateur ATR.
Il est possible de tester différents indicateurs de la moyenne ou d’ajouter un MACD pour juger de l’inversion de tendance.
Les variétés peuvent avoir des réglages différents pour optimiser la proportion et la fréquence de la fermeture partielle.
Ajout d’optimisation des paramètres, test de l’arrêt de perte de différents ATR. Ajout d’une fonction d’arrêt de perte de pas.
La stratégie est utilisée pour tester les performances pendant les périodes de faiblesse de la tendance, et ne peut être utilisée que lorsque la tendance est forte.
L’idée générale de la stratégie est claire et compréhensible, et l’utilisation de l’indicateur ATR pour l’ajustement dynamique des arrêts de perte pour le contrôle du risque de transaction est son plus grand avantage. Cependant, l’indicateur ATR lui-même est en retard et les paramètres doivent être optimisés.
/*backtest
start: 2022-10-03 00:00:00
end: 2023-10-09 00:00:00
period: 1d
basePeriod: 1h
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/
// © ekinbasarkomur
//@version=5
strategy("[EKIN] ATR Exit Strategy", overlay=true, initial_capital = 1000, default_qty_value = 100, default_qty_type = strategy.percent_of_equity, calc_on_every_tick = true)
// Simple EMA tracking
fastEMA = ta.ema(close, 5)
slowEMA = ta.ema (close, 20)
atr = ta.atr(14)
// We define entry price for future reference
var float entry_price = na
// We define stop and take profit for future calculations
var float stop_price = na
var float take_profit_price = na
// We define atr limtim its here
var float atr_down = na
var float atr_up = na
var float atr_current = na
var float atr_ref = na
avg = (low + high) / 2
// Conditions
enterCondition = ta.crossover(fastEMA, slowEMA)
var bool tookProfit = false
timePeriod = time >= timestamp(syminfo.timezone, 2021, 12, 15, 0, 0)
InTrade = strategy.position_size > 0
// Go long if conditions are met
if (enterCondition and timePeriod and not InTrade)
// Calculate and update variables
entry_price := avg
atr_ref := atr
atr_div = int((avg - entry_price) / atr_ref)
atr_down := entry_price + (atr_ref * (atr_div - 1.5))
atr_up := entry_price + (atr_ref * (atr_div + 1))
atr_current := entry_price + (atr_ref * atr_div)
stop_price := (entry_price - (atr_ref * 1.5))
take_profit_price := (entry_price + (atr_ref * 3))
strategy.order("buy", strategy.long, qty = 2)
// Enter here if in position
if InTrade or tookProfit
stopCondition = avg < stop_price
takeProfitCondition = avg > take_profit_price
if avg < atr_down
stopCondition := true
// Move stop price and exit price if price for each atr price increase
if avg > atr_up
if tookProfit
atr_ref := atr
atr_div = int((avg - entry_price) / atr_ref)
atr_down := entry_price + (atr_ref * (atr_div - 1))
atr_up := entry_price + (atr_ref * (atr_div + 1))
atr_current := entry_price + (atr_ref * atr_div)
// Take half of the investment if current price is 3 atr higher than entry price
if (takeProfitCondition and timePeriod and InTrade and not tookProfit)
strategy.order("take_half_profit", strategy.short, qty = 1)
tookProfit := true
// Exit position if conditions are met and reset the variables
if (stopCondition and timePeriod and InTrade)
if tookProfit
strategy.order("exit", strategy.short, qty = 1)
else
strategy.order("stop_loss", strategy.short, qty = 2)
tookProfit := false
// Plot EMA's
plot(fastEMA, color = color.blue)
plot(slowEMA, color = color.yellow)
// Plot ATR Limit/Stop positions
profit_plot = plot(series = InTrade?atr_up:na, title = "profit", color = color.green, style=plot.style_linebr)
close_plot = plot(series = InTrade?atr_current:na, title = "close", color = color.white, style=plot.style_linebr)
stop_plot = plot(series = InTrade?atr_down:na, title = "stop_loss", color = color.red, style=plot.style_linebr)
fill(profit_plot, close_plot, color = color.new(color.green, 80))
fill(close_plot, stop_plot, color =color.new(color.red,80))