В процессе загрузки ресурсов... загрузка...

Стратегия торговли на основе показателей EMA и MAMA

Автор:Чао Чжан, Дата: 2023-10-31 14:20:56
Тэги:

img

Обзор

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

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

  1. Вычислить быструю и медленную среднюю среднюю среднюю среднюю, которые отражают краткосрочные и долгосрочные тенденции рынка соответственно.

  2. Вычислите линии MAMA и FAMA, которые являются адаптивными скользящими средними.

  3. Когда быстрая EMA пересекает медленную EMA, генерируется сигнал покупки.

  4. Когда быстрая EMA переходит ниже медленной EMA, генерируется сигнал продажи.

  5. Когда MAMA пересекает FAMA, генерируется сигнал покупки.

  6. Когда MAMA переходит ниже FAMA, генерируется сигнал продажи.

  7. Кроссовки MAMA и FAMA могут использоваться для подтверждения сигналов EMA или раннего обнаружения поворотов тренда.

В частности, в стратегии сначала рассчитывается быстрая (fl) и медленная (sl) EMA, отражающие краткосрочные и долгосрочные тенденции соответственно.

Затем он рассчитывает MAMA и FAMA на основе формулы Джона Элерса:

  1. Вычислить трансформацию Хильберта цены и извлечь фазовую информацию сигнала.

  2. Вычислить мгновенную частоту p на основе фазовой информации.

  3. Вычислить весовой коэффициент α на основе значения p.

  4. Расчет MAMA и FAMA на основе α.

Наконец, торговые сигналы генерируются на основе перекресток EMA и MAMA/FAMA:

  • Длинный, когда EMA переходит выше
  • Короткий показатель при пересечении EMA ниже
  • Долго, когда MAMA пересекает FAMA.
  • Короткий, когда MAMA пересекает FAMA

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

Эта стратегия сочетает в себе преимущества показателей EMA и MAMA для повышения точности торговых сигналов.

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

  • Эффективно сглаживать данные о ценах и уменьшать шум
  • Отслеживать тенденции хорошо с некоторым отставанием
  • Гибкие параметры для регулирования чувствительности

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

  • Адаптивные параметры, без необходимости ручной настройки периода
  • Быстрый ответ на зафиксированный тренд быстро меняется
  • Точно определить поддержку и сопротивление

Преимущества совмещения:

  • EMA определяет общую тенденцию
  • MAMA проверяет сигналы и обнаруживает повороты рано
  • Улучшенная точность и скорость передачи сигналов

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

Основные риски этой стратегии:

  • EMA и MAMA являются отстающими индикаторами, сигналы входа могут иметь некоторую задержку и скольжение
  • Частые перекрестки на различных рынках вызывают проблемы
  • Неправильное настройка параметров приводит к отсутствию тенденций или ложным сигналам

Решения:

  • Использование стоп-потери для контроля потери
  • Выбирайте разумные параметры, избегайте чрезмерной чувствительности
  • Комбинировать с другими индикаторами для подтверждения сигналов

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

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

  • Оптимизировать периоды EMA на основе характеристик символов
  • Чувствительность MAMA alfa для лучшего захвата поворотов
  • Добавьте другие фильтры, такие как MACD, RSI, чтобы избежать ложных сигналов
  • Добавление стоп-лосса к контролю рисков
  • Обратное тестирование для поиска оптимальных параметров
  • Автоматизируйте получение прибыли для максимизации прибыли

Резюме

Эта стратегия объединяет сильные стороны индикаторов EMA и MAMA для своевременного отслеживания тренда и захвата поворотов. Благодаря оптимизации параметров и контролю рисков, она может достичь повышенной скорости выигрыша и прибыльности.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("EMAMA strategy", overlay=true)
//This entire strategy is courtesy of LazyBear for programming the original EMAMA system, I simply added a strategy element to everything to round things out. 

src=input(hl2, title="Source")
fl=input(.5, title="Fast Limit")
sl=input(.05, title="Slow Limit")
sp = (4*src + 3*src[1] + 2*src[2] + src[3]) / 10.0
dt = (.0962*sp + .5769*nz(sp[2]) - .5769*nz(sp[4])- .0962*nz(sp[6]))*(.075*nz(p[1]) + .54)
q1 = (.0962*dt + .5769*nz(dt[2]) - .5769*nz(dt[4])- .0962*nz(dt[6]))*(.075*nz(p[1]) + .54)
i1 = nz(dt[3])
jI = (.0962*i1 + .5769*nz(i1[2]) - .5769*nz(i1[4])- .0962*nz(i1[6]))*(.075*nz(p[1]) + .54)
jq = (.0962*q1 + .5769*nz(q1[2]) - .5769*nz(q1[4])- .0962*nz(q1[6]))*(.075*nz(p[1]) + .54)
i2_ = i1 - jq
q2_ = q1 + jI
i2 = .2*i2_ + .8*nz(i2[1])
q2 = .2*q2_ + .8*nz(q2[1])
re_ = i2*nz(i2[1]) + q2*nz(q2[1])
im_ = i2*nz(q2[1]) - q2*nz(i2[1])
re = .2*re_ + .8*nz(re[1])
im = .2*im_ + .8*nz(im[1])
p1 = iff(im!=0 and re!=0, 360/atan(im/re), nz(p[1]))
p2 = iff(p1 > 1.5*nz(p1[1]), 1.5*nz(p1[1]), iff(p1 < 0.67*nz(p1[1]), 0.67*nz(p1[1]), p1))
p3 = iff(p2<6, 6, iff (p2 > 50, 50, p2))
p = .2*p3 + .8*nz(p3[1])
spp = .33*p + .67*nz(spp[1])
phase = atan(q1 / i1)
dphase_ = nz(phase[1]) - phase
dphase = iff(dphase_< 1, 1, dphase_)
alpha_ = fl / dphase
alpha = iff(alpha_ < sl, sl, iff(alpha_ > fl, fl, alpha_))
mama = alpha*src + (1 - alpha)*nz(mama[1])
fama = .5*alpha*mama + (1 - .5*alpha)*nz(fama[1])
pa=input(false, title="Mark crossover points")

plotarrow(pa?(cross(mama, fama)?mama<fama?-1:1:na):na, title="Crossover Markers")

fr=input(false, title="Fill MAMA/FAMA Region")

duml=plot(fr?(mama>fama?mama:fama):na, style=circles, color=gray, linewidth=0, title="DummyL")

mamal=plot(mama, title="MAMA", color=red, linewidth=2)

famal=plot(fama, title="FAMA", color=green, linewidth=2)

fill(duml, mamal, red, transp=70, title="NegativeFill")

fill(duml, famal, green, transp=70, title="PositiveFill")

ebc=input(false, title="Enable Bar colors")

bc=mama>fama?lime:red

barcolor(ebc?bc:na)

longCondition = crossover(mama, fama)
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(mama, fama)
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

Больше