
Эта стратегия - динамический механизм отслеживания убытков, основанный на ATR, который позволяет в режиме реального времени регулировать позиции убытков, чтобы получить большую прибыль, гарантируя убытки.
Стратегия использует быстрый ATR циклов 5 и медленный ATR циклов 10 для создания двухслойной динамической слежки за остановкой. Когда цена движется в благоприятном направлении, быстрый слой впервые запускает слежку, затягивая позицию остановки; когда цена краткосрочно отклоняется, остановка медленного слоя может предотвратить преждевременную остановку.
В частности, стоп-дистанция для быстрого слоя составляет 0,5 5-циклического ATR, а для медленного слоя - 3 10-циклического ATR. Когда быстрый слой пробивается вверх, создается сигнал покупки; когда быстрый слой падает вниз, создается сигнал продажи. Стоп-линия также обновляется в реальном времени и рисуется под кривой цены.
Наибольшим преимуществом этой стратегии является то, что она позволяет динамически регулировать позиции стоп-ложа, чтобы максимально увеличить прибыль при условии гарантированного стоп-ложа. По сравнению с фиксированным стоп-дистанцией, динамическая стоп-линия ATR может корректироваться в зависимости от степени волатильности рынка, снижая вероятность активирования стоп-ложа.
Кроме того, двухслойный ATR-дизайн может сбалансировать чувствительность к падению. Быстрый слой быстро реагирует, а медленный слой может отфильтровывать кратковременный шум, чтобы избежать преждевременной падении.
Основной риск этой стратегии заключается в том, является ли установка стоп-дистанции обоснованной. Если ATR-коэффициент установлен слишком большим, то стоп-дистанция не будет работать в соответствии с ценой. Если ATR-коэффициент слишком маленький, то он может быть поврежден кратковременным шумом. Поэтому параметры должны быть скорректированы в соответствии с характеристиками разных сортов.
Кроме того, в консолидированном состоянии ATR меньше, ближе к линии остановки и подвержены частым остановкам. Поэтому эта стратегия лучше подходит для разновидностей с определенной волатильностью.
Можно попробовать различные комбинации ATR-циклических параметров, чтобы найти оптимальный баланс. Кроме того, можно рассмотреть возможность использования в сочетании с другими показателями, такими как индикатор тренда, который определяет рыночную фазу, чтобы динамически корректировать размер ATR-множества.
Также можно изучить возможность замены показателя ATR. Изменение ATR на такие показатели, как DKVOL, HRANGE или ATR, может иметь лучший эффект.
Стратегия разработана на основе ATR-показателя с двухуровневым механизмом динамического отслеживания, который позволяет добиваться большей прибыли и избежать чрезмерных потерь. Подходит для пользователей с высокими требованиями к удержанию. Стратегия может гибко регулировать параметры в зависимости от рыночных и сортовых особенностей, чтобы достичь оптимального эффекта удержания.
/*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")