Стратегия динамического следования тренду

ATR
Дата создания: 2024-06-03 16:57:51 Последнее изменение: 2024-06-03 16:57:51
Копировать: 4 Количество просмотров: 628
1
Подписаться
1617
Подписчики

Стратегия динамического следования тренду

Обзор

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

Стратегический принцип

  1. Вычислить верхнюю (up) и нижнюю (dn) траектории индикатора Supertrend и определить направление текущего тренда (trend) на основе отношения закрытия цены к верхней и нижней траектории.
  2. Когда тренд переходит от понижения ((-1) к подъему ((1)), создается сигнал купить ((buySignal); когда тренд переходит от повышения ((1) к понижению ((-1), создается сигнал продать ((sellSignal) 。
  3. При появлении сигнала купить, открыть позицию сделать больше, и установить нижний путь ((dn) в качестве стоп-порога; при появлении сигнала продать, открыть позицию сделать пустое, и установить верхний путь ((up) в качестве стоп-порога.
  4. Внедрение мобильной логики остановки, когда цена повышается / снижается определенным количеством пунктов (trailingValue), остановка будет перемещаться вверх / вниз, чтобы обеспечить защиту от остановки.
  5. Внедрение логики фиксированного стоп-стопа, при котором прибыль от позиции на низовом уровне заканчивается, когда тенденция меняется.

Стратегические преимущества

  1. Адаптируемость: Супертренд-индикаторы объединяют цены и волатильность, адаптируясь к различным состояниям рынка и видам торгов.
  2. Динамический стоп: использование индикаторных линий в качестве динамического стоп-линия позволяет эффективно контролировать риск и уменьшать убытки.
  3. Мобильный стоп: внедрение мобильной логики стоп позволяет защитить прибыль и повысить прибыльность стратегии при сохранении тренда.
  4. Ясные сигналы: Сигналы о покупке и продаже, создаваемые стратегией, ясны, просты в использовании и выполнении.
  5. Гибкость параметров: параметры стратегии (например, цикл ATR, умножение ATR и т. Д.) могут быть скорректированы в зависимости от рыночных особенностей и стиля торговли, повышая адаптивность.

Стратегический риск

  1. Параметрическая опасность: различные параметры могут привести к значительным различиям в эффективности стратегии, что требует полной обратной проверки и оптимизации параметров.
  2. Риск шокирующего рынка: в шокирующем рынке частое изменение тренда может привести к тому, что стратегия будет генерировать больше торговых сигналов, увеличивая торговые издержки и риск скольжения.
  3. Риск изменения тренда: когда рыночная тенденция внезапно меняется, стратегия может быть слишком поздно, чтобы скорректировать позиции, что приводит к увеличению убытков.
  4. Риск переоптимизации: переоптимизация стратегии может привести к неправильному корректировке кривой и плохому результату на рынке в будущем.

Направление оптимизации стратегии

  1. Внедрение многократного анализа временных рамок, подтверждение устойчивости тенденций, снижение частоты торгов в нестабильных рынках.
  2. В сочетании с другими техническими показателями или фундаментальными факторами, повышает точность определения тенденций.
  3. Оптимизация логики стоп-лосс и стоп-стоп, например, введение динамического стоп-стопа или рисково-прибыльного соотношения, повышение прибыльно-неприбыльного соотношения стратегии.
  4. Тестирование параметров на устойчивость, выбор комбинации параметров, которые будут хорошо работать в разных рыночных условиях.
  5. Введение правил управления позициями и управлением капиталом, чтобы контролировать риски по отдельным сделкам и общий риск.

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Supertrend Strategy', overlay=true, format=format.price, precision=2)
Periods = input.int(title='ATR Period', defval=10)
src = input.source(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input.bool(title='Change ATR Calculation Method ?', defval=true)
showsignals = input.bool(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input.bool(title='Highlighter On/Off ?', defval=true)

// ATR calculation
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Supertrend calculations
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn

// Trend direction
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Plotting
upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))

dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))

// Highlighting
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor, transp=90)

// Alerts
alertcondition(buySignal, title='SuperTrend Buy', message='SuperTrend Buy!')
alertcondition(sellSignal, title='SuperTrend Sell', message='SuperTrend Sell!')
changeCond = trend != trend[1]
alertcondition(changeCond, title='SuperTrend Direction Change', message='SuperTrend has changed direction!')

// Pip and trailing stop calculation
pips = 50
pipValue = syminfo.mintick * pips
trailingPips = 10
trailingValue = syminfo.mintick * trailingPips

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long, stop=dn, comment="SuperTrend Buy")
if (sellSignal)
    strategy.entry("Short", strategy.short, stop=up, comment="SuperTrend Sell")

// Take profit on trend change
if (changeCond and trend == -1)
    strategy.close("Long", comment="SuperTrend Direction Change")
if (changeCond and trend == 1)
    strategy.close("Short", comment="SuperTrend Direction Change")

// Initial Stop Loss
longStopLevel = up - pipValue
shortStopLevel = dn + pipValue

// Trailing Stop Loss
var float longTrailStop = na
var float shortTrailStop = na

if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        if (longTrailStop == na or close > strategy.position_avg_price + trailingValue)
            longTrailStop := high - trailingValue
        strategy.exit("Stop Loss Long", from_entry="Long", stop=longTrailStop)
    if (strategy.position_size < 0)  // Short position
        if (shortTrailStop == na or close < strategy.position_avg_price - trailingValue)
            shortTrailStop := low + trailingValue
        strategy.exit("Stop Loss Short", from_entry="Short", stop=shortTrailStop)

// Initial Exit
strategy.exit("Initial Stop Loss Long", from_entry="Long", stop=longStopLevel)
strategy.exit("Initial Stop Loss Short", from_entry="Short", stop=shortStopLevel)