
Обзор
Эта стратегия объединяет показатели ATR (Average True Range) и SMA (Simple Moving Average) и реализует торговую систему, которая отслеживает динамические остановки убытков. Когда цена открывает много заказов выше SMA, в то же время устанавливая динамические остановки на основе ATR, цена остановки убытков постоянно повышается по мере роста цены.
Стратегический принцип
- Вычислить 50-дневную SMA, открыть опцион, когда цена закрытия больше 50-дневного SMA.
- Вычислите показатель ATR, ATR-цикл 10, умножьте на ключевое значение ((по умолчанию 3) и получите Stop Loss nLoss.
- Вычислить динамическую цену стоп-стопа xATRTrailingStop, начальная величина 0。
- Когда цена закрытия и предыдущая цена закрытия больше предыдущей цены остановки, новая цена остановки является большей из предыдущей цены остановки и цены закрытия - nLoss.
- Когда цена закрытия и предыдущая цена закрытия меньше предыдущей цены остановки, новая цена остановки меньше предыдущей цены остановки и ((цена закрытия + nLoss)).
- В остальных случаях новая стоп-стоп цена будет выглядеть как: ((закрывающая цена - nLoss) или ((закрывающая цена + nLoss)) [2].
- При закрытии цены, когда она пересекает динамическую цену остановки убытков.
- Стоп-точки обозначены различными цветами, многоголовый стоп - зеленым, пустой стоп - красным, в других случаях - синим.
Анализ преимуществ
- Динамический стоп-механизм может защитить прибыль в трендовых ситуациях и снизить риск вывода. По сравнению с фиксированным стопом, динамический стоп-механизм более гибкий и может адаптироваться к различным рыночным условиям.
- Стоп-рывок рассчитывается на основе показателя ATR, который хорошо отражает величину рыночных колебаний, поэтому стоп-расстояние будет автоматически корректироваться в соответствии с колебаниями в недавних событиях, увеличивая стоп-рынок при увеличении колебаний и уменьшая стоп-рынок при уменьшении колебаний.
- Используя SMA в качестве основы для определения тренда, можно улавливать относительно четкие тенденции. Открывая несколько ордеров выше SMA, можно вмешаться в начале тренда и получить больше возможностей для получения прибыли.
- Позволяет пользователям устанавливать ATR-циклы и параметры ключевых значений, а также гибко адаптировать параметры стратегии к характеристикам различных сортов и циклов.
Анализ рисков
- В условиях неопределенности тренда или волатильности эта стратегия может приводить к частым позиционным погашениям, что приводит к увеличению стоимости торговли и снижению прибыли.
- Эта стратегия имеет только много логики, не может получить прибыль в нисходящем тренде, рискует в одностороннем рынке. Можно рассмотреть возможность добавления логики дисконтирования, чтобы осуществить двустороннюю торговлю.
- Стоп-лосс рассчитывается на основе ATR. При резких колебаниях рынка стоп-роуминг может быть слишком большим, что приводит к увеличению риска. Можно рассмотреть возможность установки максимального стоп-лосса, чтобы контролировать максимальные потери от одной сделки.
- Неправильный выбор параметров может привести к неэффективности стратегии. Например, слишком маленький цикл ATR может привести к слишком чувствительному и частому срабатыванию стоп-лосса; слишком большой может не вовремя остановить стоп-лосс и увеличить убытки.
Направление оптимизации
- Добавление логики позиционирования приводит к увеличению приспособляемости стратегии. Можно открыть пустую позицию, когда цена падает ниже SMA, также используя динамическую логику остановки убытков.
- Внедрение управления многоплоскими позициями, изменение размеров позиций в зависимости от силы тренда. Увеличение позиций при сильных тенденциях, повышение прибыли; уменьшение позиций при слабых тенденциях, контроль риска.
- Оптимизируйте логику остановки убытков, установите максимальную степень остановки убытков, чтобы предотвратить чрезмерные потери в экстремальных ситуациях. Кроме того, можно рассмотреть возможность установки точки остановки, чтобы активировать ликвидацию позиции после достижения ожидаемой прибыли, а не держать ее до остановки убытков.
- Оптимизация параметров, поиск оптимальных параметров, пройдя через различные комбинации параметров. Умные методы оптимизации, такие как генетические алгоритмы, могут быть использованы для повышения эффективности оптимизации.
- Подумайте о добавлении дополнительных фильтров, таких как объем торгов, волатильность и другие показатели, чтобы лучше оценивать тенденции и риски и повысить надежность сигналов.
Подвести итог
Стратегия реализует динамическую систему торговли с отслеживанием стоп-убытков на основе ATR и SMA, которая может автоматически регулировать стоп-позиции в условиях тренда, защищая прибыль и контролируя риск. Логика стратегии ясна, преимущества очевидны, но также существуют некоторые ограничения и риски.
Исходный код стратегии
/*backtest
start: 2023-03-05 00:00:00
end: 2024-03-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Trailingstop", overlay=true)
if close > sma(close, 50)
strategy.entry("long", strategy.long)
// Trailing stop loss for long positions
Trailperc = 0.20
price_stop_long = 0.0
if (strategy.position_size > 0)
stopValue = close * (1 - Trailperc)
price_stop_long := max(stopValue, price_stop_long[1])
else
price_stop_long := 0
if (strategy.position_size > 0)
strategy.exit(id="stoploss_long", stop=price_stop_long)
// Trailing stop loss for short positions
Trailperc_short = 0.20
price_stop_short = 0.0
if (strategy.position_size < 0)
stopValue_short = close * (1 + Trailperc_short)
price_stop_short := min(stopValue_short, price_stop_short[1])
else
price_stop_short := 0
if (strategy.position_size < 0)
strategy.exit(id="stoploss_short", stop=price_stop_short)
// ATR Trailing Stop for visualization
keyvalue = input(3, title="Key Value. 'This changes the sensitivity'", step=0.5)
atrperiod = input(10, title="ATR Period")
xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss),
iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss),
iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss)))
pos = 0
pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1,
iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0)))
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color = xcolor, title = "Trailing Stop")