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

Автор:Чао Чжан, Дата: 21-12-2023 11:45:35
Тэги:

img

Обзор

Стратегия Dual Moving Average Trend Tracking является количественной торговой стратегией, которая отслеживает тенденции цен на акции.

Принцип стратегии

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

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

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

  1. Длинный путь, когда быстрая линия пересекает медленную линию, и короткий, когда быстрая линия пересекает медленную линию
  2. Допустить длинный и короткий только при ADX>25

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

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

Эта стратегия имеет следующие основные преимущества:

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

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

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

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

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

Риски стратегии

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

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

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

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

Для устранения вышеуказанных рисков мы можем оптимизировать следующие аспекты:

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

  2. Правильно расслабить параметры ADX, чтобы обеспечить возможность захвата на ранних этапах тренда.

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

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

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

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

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

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

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

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

Резюме

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


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


Больше