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