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

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

Автор:Чао Чжан, Дата: 2024-05-17 15:33:02
Тэги:MACDСММАSMAЗЛЕМАЕМАМ.А.

img

Обзор

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

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

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

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

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


Связанные

Больше