Эта стратегия использует ATR, чтобы установить динамическую остановку, чтобы регулировать остановку в зависимости от колебаний цены, чтобы обеспечить контроль риска. Стратегия в основном заключается в том, чтобы сделать несколько входов с помощью 5-дневной ЭМА и 20-дневной ЭМА, чтобы сформировать золотой форк, а затем использовать ATR, чтобы установить остановку и остановку.
Стратегия сначала рассчитывает, что в случае пересечения 5-дневной ЭМА через 20-дневную ЭМА будет сделан лишний вход. После входа, используя показатель ATR, рассчитывается кратность ATR от расстояния от текущей цены, и устанавливается стоп-стоп на 1,5 ATR ниже цены входа. Затем, по мере роста цены, постепенно повышается стоп-стоп, и частично останавливается, если рост цены превышает цену входа 3 ATR.
В частности, в стратегии определяются следующие переменные:
После входа рассчитываетсяatr_ref как значение текущего ATR,atr_div как кратность ATR от текущей цены входа. Затем в зависимости отatr_div устанавливаетсяatr_down,atr_current иatr_up. Стоп_price - это 1,5 ATR ниже цены входа.
По мере роста цены, путем сравнения текущей цены AVG и ATR_UP, если AVG носит ATR_UP, то пересчитывается соответствующее положение ATR_DIV и ATR, таким образом, постепенно повышается стоп-линия, увеличивая прибыль от держания позиции.
Если цена превышает входную цену 3ATR, то будет частично ликвидировано, чтобы зафиксировать прибыль, в этот момент знак tookProfit будет установлен как true. Если цена продолжит расти, то будет продолжено повышение стоп-позиции. Если будет вызвана стоп-убыток, то будет принято решение о tookProfit, если ранее уже была частичная стоп-позиция, то будет ликвидирована только оставшаяся позиция, иначе вся позиция будет ликвидирована.
Используя ATR индикатор для динамического регулирования стоп-позиции, можно установить разумную стоп-дистанцию в зависимости от степени волатильности рынка.
В случае ограниченных убытков следует следовать тренду, чтобы сократить прибыль. Стоп-линия будет постепенно повышаться, чтобы прибыль продолжала накапливаться.
Частичный стоп-механизм может блокировать часть прибыли, уменьшая риск. Затем стоп-позиция продолжает расти, чтобы прибыль продолжала работать.
ATR не чувствителен к аномальным прорывам и не может справиться с рисками, связанными с пробелами.
EMA не может определить обратный тренд и может ввести новую позицию, если тренд изменится.
После частичной остановки вероятность возврата убытков выше.
Недостаточно оптимизированы параметры, 1.5 ATR Stop Loss и 3 ATR Stop Loss требуют корректировки в зависимости от разновидности.
Можно рассмотреть возможность включения других стоп-индикаторов, таких как Дончианский канал, чтобы предотвратить задержку показателя ATR.
Можно тестировать различные среднелинейные показатели или включать MACD, чтобы определить обратный тренд.
Можно оптимизировать пропорции и частоту частичного задержки, различные сорта могут иметь разные настройки.
Добавление параметров оптимизации, тестирование эффекта остановки потери различных ATR множителей. Добавление функции остановки потери по шагу.
Тестирование эффективности при слабом тренде, можно рассматривать только при более сильном тренде.
Общая концепция этой стратегии ясна и понятна, и использование ATR для динамической корректировки остановок для управления риском торговли является ее наибольшим преимуществом. Однако сам ATR-индикатор имеет отсталость, и параметры настройки требуют оптимизации. Добавление других показателей для определения остановок и тенденций будет направлением к улучшению. Кроме того, некоторые механизмы остановки также нуждаются в оптимизированном тестировании в зависимости от разных сортов.
/*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))