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

MACD SMMA SMA ZLEMA EMA MA
Дата создания: 2024-05-17 15:33:02 Последнее изменение: 2024-05-17 15:33:02
Копировать: 5 Количество просмотров: 1201
1
Подписаться
1617
Подписчики

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

Обзор

Стратегия использует различные индикаторы движущихся средних, включая SMMA, SMA, ZLEMA и EMA, и на их основе создает улучшенный индикатор MACD (Impulse MACD), который генерирует торговый сигнал через перекрестку Impulse MACD с его сигнальной линией. Основная идея стратегии заключается в том, чтобы использовать движущиеся средние на разных временных масштабах, чтобы захватить рыночные тенденции, а также использовать Impulse MACD для подтверждения силы и направления тенденции.

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

  1. Расчетная длина 34 высоких, низких, закрывающихся цен SMMA, ZLEMA, полученная с помощью Impulse MACD ((MD) ).
  2. Вычислить 9-циклическую SMA по импульсному MACD в качестве сигнальной линии ((SB) }}.
  3. Вычислить разницу между импульсным MACD и сигнальной линией ((SH), отражающей силу тренда.
  4. Когда Impulse MACD пересекает линию сигнала, создается сигнал купить, а когда пересекает, то становится равномерным.
  5. В зависимости от отношений цены с импульсным MACD, высокой и низкой ценовой SMMA, графика с столбиками импульса MACD, нарисованная в разных цветах, интуитивно отражает тенденцию к силе и слабости.

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

  1. Использование различных типов скользящих средних позволяет более полно отражать тенденции рынка.
  2. Улучшенный индикатор MACD (Impulse MACD) учитывает относительное положение цены по отношению к скользящим средним и лучше отражает силу тренда.
  3. Введение сигнальных линий помогает отфильтровать некоторые ложные сигналы и улучшить качество сигнала.
  4. Импульсный MACD изображен в различных цветах в зависимости от интенсивности тренда, что позволяет интуитивно оценивать движение рынка.

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

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

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

  1. Внедрение показателей, определяющих тенденцию, таких как ADX, для торговли только в то время, когда тенденция очевидна, снижает потери во время шок.
  2. Для генерируемого торгового сигнала может быть проведена повторная подтверждение в сочетании с другими показателями, такими как RSI, ATR и т. Д., что повышает качество сигнала.
  3. Установка разумных стоп-лосс и стоп-позиций, контроль риска одноразовой сделки.
  4. Оптимизация параметров, например, поиск оптимальной комбинации параметров с использованием генетических алгоритмов.

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

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

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

//@version=5
strategy("Impulse MACD Strategy [LazyBear]", shorttitle="IMACD_Strategy", overlay=false)

// Function to calculate SMMA
calc_smma(src, len) =>
    var float smma = na
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

// Function to calculate SMA
	ta.sma(src, len)
    sum = 0.0
    for i = 0 to len - 1
        sum := sum + src[i]
    sum / len

// Function to calculate ZLEMA
calc_zlema(src, length) =>
    var float ema1 = na
    var float ema2 = na
    var float d = na
    ema1 := ta.ema(src, length)
    ema2 := ta.ema(ema1, length)
    d := ema1 - ema2
    ema1 + d

// Function to calculate EMA
calc_ema(src, len) =>
    ema = 0.0
    ema := ta.ema(src, len)
    ema

// Inputs
lengthMA = input(34, title="Length of Moving Average")
lengthSignal = input(9, title="Length of Signal Line")

// Calculations
src = hlc3
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA) 

md = mi > hi ? (mi - hi) : mi < lo ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? src > hi ? color.lime : color.green : src < lo ? color.red : color.orange

// Plotting
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(md, color=mdc, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(sh, color=color.blue, linewidth=2, title="ImpulseHisto", style=plot.style_histogram)
plot(sb, color=color.maroon, linewidth=2, title="ImpulseMACDCDSignal")

// Execute trades based on signals
if (ta.crossover(md, sb))
    strategy.entry("Buy", strategy.long)
if (ta.crossunder(md, sb))
    strategy.close("Buy")