Кроссовер MACD с сигнальной стратегией

Автор:Чао Чжан, Дата: 2023-12-13 16:58:15
Тэги:

img

Обзор

Стратегия MACD Crossover с сигналом генерирует торговые сигналы, когда MACD пересекает линию сигнала выше или ниже.

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

Стратегия сначала рассчитывает быстро движущуюся среднюю линию fastMA и медленно движущуюся среднюю линию slowMA. Параметр быстро движущегося среднего составляет 12 дней, а параметр медленно движущегося среднего составляет 26 дней. Затем вычисляется разница между двумя скользящими средними линиями для формирования MACD. Затем вычисляется 9-дневная скользящая средняя MACD для получения линии сигнала. Торговые сигналы генерируются, когда MACD пересекает линию сигнала выше или ниже.

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

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

Стратегия MACD Crossover with Signal сочетает в себе идею двойных скользящих средних, чтобы отфильтровать краткосрочный шум и фиксировать только поворотные моменты долгосрочных и среднесрочных тенденций.

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

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

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

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

Прорыв линии сигнала не обязательно гарантирует, что среднесрочная тенденция изменилась.

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

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

  1. Добавление показателей фильтрации ликвидности и волатильности для снижения частоты открытия и избежания неэффективной торговли.

  2. Объединение нескольких других технических индикаторов для формирования портфеля индикаторов для улучшения качества сигнала.

  3. Добавьте алгоритмы машинного обучения для обучения параметров и порогов внимания, которые более подходят для текущей рыночной среды, уменьшая вмешательство человека.

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

Заключение

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


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author : SudeepBisht
//@version=2
strategy(title="MACD with Signal", shorttitle="MACD_with_Signal")
source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(12, minval=1), slowLength=input(26,minval=1)
signalLength=input(9,minval=1)

fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

plot_color = hist_colorChange ? histA_IsUp ? green : histA_IsDown ? lime : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? green : red : red
signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=3)
plot(smd and outSignal ? outSignal : na, title="Signal", color=blue, style=line ,linewidth=1)
plot(sh and outHist ? outHist : na, title="", color=plot_color, style=columns, linewidth=4)
//plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)
hline(0, '0 Line',  linewidth=2, color=white)

macd_chk=smd and outMacD ? outMacD : na
checker=smd and outSignal ? outSignal : na
if (crossover(macd_chk,checker))
    strategy.entry("BBandLE", strategy.long)

if (crossunder(macd_chk, checker))
    strategy.entry("BBandSE", strategy.short)


Больше