Стратегия следования за трендом с двойной скользящей средней


Дата создания: 2024-01-24 11:28:57 Последнее изменение: 2024-01-24 11:28:57
Копировать: 1 Количество просмотров: 559
1
Подписаться
1617
Подписчики

Стратегия следования за трендом с двойной скользящей средней

Обзор

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

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

Двухлинейная стратегия отслеживания трендов использует два индикатора движущихся средних: быстрое движущееся среднее ((5 циклов) и медленное движущееся среднее ((21 циклов)). Быстрая средняя линия используется для генерации торговых сигналов, а медленная средняя линия используется для определения направления рыночной тенденции.

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

В качестве дополнительного условия фильтрации при определении сигнала покупки и продажи эта стратегия требует последовательного появления красного столба (число столбов, которое пользователь может установить). Это позволяет избежать появления ошибочных сигналов в регионе сверки.

В целом, логика определения трендов в стратегии бинарного отслеживания трендов заключается в следующем:

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

По мнению экспертов, это позволяет эффективно отфильтровывать шум и определять направление тенденций.

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

Стратегия двойного равномерного отслеживания трендов имеет следующие преимущества:

  1. Использование системы двойной равномерности позволяет эффективно идентифицировать тенденции и определять направления основных тенденций.
  2. Быстрая средняя линия подает торговый сигнал, чтобы вовремя зафиксировать обратный тренд.
  3. Ценовые каналы оценивают тенденции на большом уровне, чтобы избежать ошибочного восприятия краткосрочного рынка
  4. Условия фильтрации красного/зеленого столба снижают вероятность ошибочного сигнала в зоне сверки
  5. Параметры стратегии могут быть изменены для различных рынков, что повышает стабильность стратегии
  6. Добавление стратегии “стоп-лосс” для эффективного контроля риска на каждой сделке

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

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

При использовании двухлинейной стратегии отслеживания трендов существуют некоторые риски, в частности:

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

Соответственно, стратегические риски можно снизить следующими способами:

  1. Регулирование условий фильтрации красного/зеленого столба, снижение частоты торгов на консолидированном рынке
  2. Оптимизация параметров быстрой средней линии для обеспечения своевременности торговых сигналов
  3. Добавление мобильного стоп-стратегии или стоп-стратегии, строгое управление одиночными потерями

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

Есть еще много возможностей для оптимизации стратегии двойного равномерного отслеживания тенденций, в том числе в следующих направлениях:

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

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

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

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

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

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
//ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
//trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -1 ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)