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

Автор:Чао Чжан, Дата: 2024-01-24 11:28:57
Тэги:

img

Обзор

Стратегия Dual Moving Average Trend Tracking - это стратегия, которая использует комбинацию быстрых и медленных скользящих средних для определения тенденции рынка и генерирует торговые сигналы при изменении направления тренда.

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

Стратегия Dual Moving Average Trend Tracking использует две скользящие средние - быструю скользящую среднюю (5 периодов) и медленную скользящую среднюю (21 период). Быстрый MA используется для генерации торговых сигналов, в то время как медленный MA используется для определения направления тренда рынка. Когда быстрый MA пересекает более медленного MA, генерируется сигнал покупки. Когда быстрый MA пересекает ниже медленного MA, генерируется сигнал продажи.

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

При определении сигналов покупки и продажи стратегия требует, чтобы последовательные красно-зеленые свечи появились (устройство пользователя) в качестве дополнительного фильтра.

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

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

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

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

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

  1. Система двойного MA может эффективно выявлять тенденции и определять основное направление тренда
  2. Быстрый MA генерирует торговые сигналы для своевременного обнаружения обратных тенденций
  3. Канал цен определяет тенденцию более высокого временного рамок, чтобы избежать заблуждения от краткосрочного рыночного шума
  4. Фильтры красно-зеленых свечей снижают вероятность ошибочных сигналов во время консолидации
  5. Регулируемые параметры позволяют оптимизировать для различных рынков для повышения надежности
  6. Стратегии стоп-лосса могут быть добавлены для эффективного контроля риска по сделке

В заключение, эта стратегия имеет относительно хорошую общую стабильность и хорошо работает на сильно развивающихся рынках.

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

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

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

К соответствующим мерам по снижению рисков относятся:

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

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

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

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

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

Заключение

В заключение, стратегия Dual Moving Average Trend Tracking - это относительно надежная стратегия, следующая за трендом. Она сочетает в себе движущиеся средние и ценовые каналы для определения направления и силы тренда, генерируя торговые сигналы с быстрым MA. Дополнительные фильтры свечей также помогают избежать неправильных сигналов. Регулируемые параметры позволяют адаптироваться к различным рыночным условиям.


/*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)

Больше