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

Автор:Чао Чжан, Дата: 2023-12-08 17:07:53
Тэги:

img

Обзор

Эта стратегия построена на основе индикатора среднего истинного диапазона (ATR) для построения линии SuperTrend для оценки направления тренда рынка и генерации торговых сигналов.

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

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

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

Преимущества

Наибольшее преимущество этой стратегии заключается в сочетании способностей определения тенденций и отслеживания:

  1. Линия SuperTrend, основанная на ATR, может эффективно идентифицировать рыночные тенденции и фильтровать шум.
  2. Эффект отставания линии SuperTrend помогает уменьшить неправильные сигналы.
  3. Он может давать как суждение о тренде, так и торговые сигналы для легкой работы.
  4. Параметры можно оптимизировать для более разнообразных рынков.
  5. Визуальные индикаторы позволяют интуитивно оценивать тренд.

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

К основным рискам этой стратегии относятся:

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

Возможные решения включают оптимизацию параметров, таких как период ATR и фактор SuperTrend, объединение с другими индикаторами для проверки и снижение вероятности неправильного сигнала.

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

Дальнейшее оптимизирование возможно в таких областях, как:

  1. Принятие машинного обучения для автоматической оптимизации параметров.
  2. Добавление показателей, таких как экспоненциальные скользящие средние для проверки.
  3. Создание стратегий стоп-лосса/прибыли для усовершенствованного управления деньгами.
  4. Сочетание индикаторов настроения и аналитики новостей для прогнозирования потенциальных изменений тренда.
  5. Использование глубокого обучения для анализа исторических данных и повышения точности.

Глубокая оптимизация обещает еще больше повысить стабильность, адаптивность и рентабельность стратегии.

Заключение

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


/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Supertrend Strategy", overlay = true)

Periods = input(10, title="ATR Period")
src = input(hl2, title="Source")
Multiplier = input(3.0, title="ATR Multiplier", step=0.1)
changeATR = input(true, title="Change ATR Calculation Method?")
showsignals = input(true, title="Show Buy/Sell Signals?")
highlighting = input(true, title="Highlighter On/Off?")

atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

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

upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
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.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)

dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
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.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)

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 Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)

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!")


Больше