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