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


Дата создания: 2023-12-21 11:45:35 Последнее изменение: 2023-12-21 11:45:35
Копировать: 0 Количество просмотров: 653
1
Подписаться
1621
Подписчики

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

Обзор

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

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

Эта стратегия основана на двойной подвижной средней системе для определения направления ценового тренда. Стратегия использует EMA с двумя различными параметрами: EMA1 реагирует на изменения цены быстрее, EMA2 реагирует на изменения цены позже. При прохождении медленной линии на быстрой линии это сигнал покупки, означающий, что цена начинает расти; при прохождении медленной линии ниже - сигнал продажи, означающий, что цена начинает падать.

Кроме того, стратегия также вводит индикатор ADX для определения силы тренда. ADX определяет силу тренда, рассчитывая ценовые колебания. Когда значение ADX повышается, это означает, что тенденция усиливается; когда значение ADX снижается, это означает, что тенденция ослабевает.

В частности, правила генерации торговых сигналов стратегии:

  1. На скоростной линии сделайте больше, на медленной - больше, на скоростной линии - меньше, на медленной - меньше.
  2. Дополнительные вакансии разрешены только при ADX> 25

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

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

Основные преимущества этой стратегии:

  1. Поймать тенденции цен на средние и длинные линииДвойная система средних значений EMA позволяет эффективно оценивать долгосрочные тенденции цен, избегая помех от шума краткосрочного рынка.

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

  3. Оптимизация параметровКомбинации параметров быстрого и медленного движения, параметры ADX и т. Д. имеют место для оптимизации, благодаря которым можно получить лучшие результаты торговли.

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

  5. Легкость реализацииПримечание: Стратегия требует только простых средних показателей, не требует больших ресурсов, проста в программировании и не требует больших затрат.

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

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

  1. Риск изменения тренда“Нет никакой стратегии, которая могла бы точно определить точку обратной тенденции, и неизбежно будет понести большие убытки, когда наступит настоящая обратная тенденция”.

  2. Параметры оптимизации избыточного рискаОптимизация параметров до крайности также приводит к перенастройке стратегии на исторические данные, что снижает ее стабильность и эффективность в реальной войне.

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

Мы можем оптимизировать эти риски в следующих аспектах:

  1. Введение дополнительных показателей для определения точек перехода цены. Например, введение объемов сделок увеличивает объемы сделок при переходе цены.

  2. Допустимое ослабление параметров ADX, чтобы гарантировать, что в начале тренда можно использовать возможности. Также можно ввести вспомогательные показатели суждения, такие как MACD.

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

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

В этой стратегии есть несколько вариантов оптимизации:

  1. Внедрение механизма стоп-лосса: настройка мобильного стоп-порога или стоп-порога, с помощью которого можно активировать стоп-порог при обратном тренде, чтобы избежать чрезмерных убытков при удержании позиции.

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

  3. Параметры адаптируются и оптимизируются: позволяет параметрам показателей самостоятельно адаптироваться к изменениям рынка в реальном времени, а не к фиксированным статическим параметрам, что значительно повышает стабильность стратегии.

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

  5. Трансциклическая оптимизацияПараметры могут быть настроены по-разному в зависимости от цикла сделки, чтобы проверить оптимальную конфигурацию параметров для каждого цикла.

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

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

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

//@version=3
strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing")
len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2")
len3=input(550)
src = close
ema1=ema(src, len)
ema2=ema(ema1, len2)
d=ema1-ema2
zlema=ema1+d

ema21=ema(src, (len/3)*2)
ema22=ema(ema21, (len2/3)*2)
d2=ema21-ema22
zlema2=ema21+d2

ema31=ema(src, len3)
ema32=ema(ema21, len3)
d3=ema31-ema32
zlema3=ema31+d2

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
//ma1 = security(tickerid, "60", vwma(src, len)[1])
//ma2 = security(tickerid, "120", vwma(src, len)[1])
//plot(ma1, linewidth = 2, color = blue, title = "MA")
//plot(ma2, linewidth = 2, color = red, title = "MA2")

// ADX
lenadx = 14
lensig = 14
limadx = 18

up = change(high)
down = -change(low)
trur = rma(tr, lenadx)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur)
sum = plus + minus 
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adx2 = ema(adx, 14)
adx2i = ema(adx2,14)
dadx2 = adx2 - adx2i
zladx2 = adx2 + dadx2
plus2 = ema(plus, 14)
plus2i = ema (plus2, 14)
dplus2 = plus2 - plus2i
zlplus2 = plus2 + dplus2

minus2 = ema(minus, 14)
minus2i = ema (minus2, 14)
dminus2 = minus2 - minus2i
zlminus2 = minus2 + dminus2

vwma = vwma(close, 150)
vwma2 = ema(vwma, 9)
vwma2i = ema(vwma2, 9)
dvwma2 = vwma2 - vwma2i
zlvwma2 = vwma2 + dvwma2


rmax=rma(src, len)
rmax2=rma(rmax, len2)
rmd=rmax-rmax2
zlrmax=rmax+rmd
rmaxz=rma(src, (len/3)*2)
rmaxz2=rma(rmaxz, (len2/3)*2)
rmzd=rmaxz-rmaxz2
zlrmaxz=rmaxz+rmzd
rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime
rmaxcol= zlrmax[1] > zlema[1] ? red:lime


rmazlema3=rma(zlema3, 100)
plot(rmazlema3, color=gray, linewidth=2)
plot(zlema, color=green)
plot(zlema2, color=yellow)
plot(zlema3, color=teal, linewidth=2)
plot(ema2, color=na)
plot(rmax, color=rmaxcol2, linewidth=3)
plot(zlrmax, color=rmaxcol, linewidth=3)


//Trading
size = strategy.position_size
lot = 0.0 
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if zlrmax[1] < zlema[1]
    strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if zlrmax[1] > zlema[1]
    strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))