Стратегия адаптивного отслеживания тренда

Автор:Чао Чжан, Дата: 2023-10-17 14:04:28
Тэги:

img

Обзор

Эта стратегия использует метод "Wilder volatility trailing stop" в сочетании с индикатором ATR и различными типами скользящих средних для реализации адаптивной стратегии отслеживания тренда.

Логика стратегии

Ядром этой стратегии является алгоритм остановки после волатильности Уайлдера. Он сначала рассчитывает индикатор ATR и динамически графизирует линию остановки по вводу длины и мультипликатора ATR. Затем он отслеживает самый высокий и самый низкий уровень линии остановки по выбранному варианту цены среди закрытых, высоких и низких цен. Он посылает торговые сигналы, когда цена нарушает линию остановки.

В коде функция f_ma реализует различные скользящие средние, включая RMA, EMA, SMA и Hull MA. Индикатор ATR рассчитывается и умножается на пользовательский мультипликатор, чтобы генерировать линию остановки, основанную на волатильности. Самые высокие и низкие уровни этой линии отслеживаются с помощью функций высшего и низшего.

Благодаря гибкому использованию индикатора ATR, различных скользящих средних значений и регулируемых параметров, эта стратегия реализует высоко адаптивную систему отслеживания тренда.

Анализ преимуществ

  • Эта стратегия использует алгоритм "Wilder Volatility Trailing Stop", который является зрелой и надежной методологией отслеживания тренда.

  • Стратегия использует индикатор ATR для динамического расчета линии стоп-лосса, избегая жестких точек стоп-лосса.

  • Внедрение различных скользящих средних, включая RMA, EMA, SMA и Hull MA, повышает адаптивность стратегии.

  • Настройка длины ATR, параметров мультипликатора, оптимизированные параметры могут быть найдены для разных рынков, улучшая эффективность стратегии.

  • Использование различных вариантов цен, таких как высокие, низкие, близкие цены, позволяет оптимизировать различные продукты.

  • Подводя итог, это надежная, адаптивная и легко оптимизируемая стратегия отслеживания тренда.

Анализ рисков

  • Стратегия в значительной степени опирается на оптимизацию параметров. Соответствующие параметры ATR и мультипликатора должны быть найдены путем тестирования для разных рынков и продуктов, в противном случае эффект стоп-лосса может быть не идеальным.

  • На рыночных диапазонах линия остановки ATR может вызывать частые необоснованные остановки.

  • Если линия стоп-лосса слишком широкая, возможности для потери будут упущены. Если слишком узкая, частота торговли и расходы на скольжение увеличатся. Сбалансированную точку необходимо найти путем тщательного тестирования.

  • Слишком много вариантов скользящих средних может привести к отклонениям в производительности.

  • Эта стратегия сосредоточена на отслеживании тенденций и не нацелена непосредственно на прибыль.

  • При неправильных параметрах стратегия может проявлять чрезмерную торговлю или чрезмерные периоды хранения.

Руководство по оптимизации

  • Индикаторы определения трендов могут быть введены, чтобы избежать сбоев на рынках с различными показателями.

  • Индикаторы обратного движения могут быть проверены, чтобы позволить быстрее остановиться и повернуть вспять, когда восходящий и нисходящий тренды чередуются.

  • Параметр периода ATR может быть коррелирован с характеристиками продукции, так что для различных продуктов используются разные периоды ATR.

  • Индикаторы объема могут быть использованы для более быстрого затягивания линии остановки потерь при значительном снижении объема.

  • Процент стоп-лосса может быть увеличен, но не слишком тесно, чтобы избежать остановки при нормальных ретрексерах.

  • Другие индикаторы могут использоваться для измерения импульса и оптимизации параметров для ослабления остановок при слабом импульсе.

Резюме

Основанная на концепции Wilder Volatility Trailing Stop, эта стратегия использует индикатор ATR для разработки высоко адаптивной системы отслеживания тренда стоп-лосса. Благодаря оптимизации параметров он может быть приспособлен к различным торговым продуктам и является надежным и практичным подходом к стоп-лос. Но рискам необходимо управлять с помощью дальнейших улучшений, таких как фильтры тренда и элементы объема, чтобы сделать его более надежным.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Wilder's Volatility Trailing Stop Strategy with various MA's
// by SparkyFlary

//For Educational Purposes
//Results can differ on different markets and can fail at any time. Profit is not guaranteed.
strategy(title="Wilder's Volatility Trailing Stop Strategy with various MA's", shorttitle="Trailing Stop Strategy", overlay=true)

AtrMult = input(3.0, title="ATR multiplier")
ATRlength = input(7, title="ATR length")
ATRavgType = input("RMA", title="ATR moving average type", options=["RMA", "EMA", "SMA", "HULL"])
sicType = input("close", title="significant close type for trail calculation", options=["close", "high-low"])

//function for choosing moving averages
f_ma(type, src, len) =>
    float result = 0
    if type == "RMA" // Wilder's moving averaege or Running moving average
        result := rma(src, len)
    if type == "EMA" // Exponential moving average
        result := ema(src, len)
    if type == "SMA" // Simple moving average
        result := sma(src, len)
    if type == "HULL" // Hull moving average
        result := wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
    result

ATR = f_ma(ATRavgType, tr, ATRlength)
upperTrail = lowest(sicType=="close"?close:low, ATRlength) + AtrMult * ATR
lowerTrail = highest(sicType=="close"?close:high, ATRlength) - AtrMult * ATR

float TS = 0
TS := close < TS[1] ? upperTrail[1] : close > TS[1] ? lowerTrail[1] : TS

//plot
plot(TS, title="trailing stop", color=close<TS?color.red:color.green)

//Strategy
buy = crossover(close, TS)
//sell = close < TS
short = crossunder(close, TS)
//cover = close > TS

strategy.entry(id="enter long", long=true, when=buy)
//strategy.close(id="enter long", comment="exit long", when=sell)
strategy.entry(id="enter short", long=false, when=short)
//strategy.close(id="enter short", comment="exit short", when=cover)

Больше