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

Автор:Чао Чжан, Дата: 2024-02-22 16:25:13
Тэги:

img

Обзор

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

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

Эта стратегия в основном основана на 12-дневной EMA, 26-дневной EMA и индикаторе MACD.

  1. Вычислить 12-дневную и 26-дневную среднюю среднюю среднюю.
  2. Вычислить MACD (то есть 12-дневную EMA минус 26-дневную EMA).
  3. Вычислить 9-дневную EMA MACD как линию сигнала.
  4. Когда MACD выходит за линию сигнала, генерируется сигнал покупки.
  5. Когда MACD опускается ниже линии сигнала, генерируется сигнал продажи.
  6. Сделайте соответствующую операцию по покупке или продаже на закрытии второй свечи после получения сигнала.

Кроме того, эта стратегия также устанавливает некоторые условия фильтрации:

  1. Время торговли - это время, когда не закрывается каждый торговый день.
  2. Абсолютное значение разницы между MACD и сигнальной линией должно быть больше 0,08.
  3. Разрешается только одно направление расположения за раз.

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

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

  1. Правила стратегии просты и понятны, легко понять и реализовать.
  2. Параметры показателей оптимизированы для относительно стабильной работы.
  3. В ней учитывается отслеживание среднесрочных и краткосрочных тенденций и своевременный выход с стоп-лосса.
  4. Логика торговли строга, чтобы избежать недействительной торговли.

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

Эта стратегия также сопряжена с некоторыми рисками:

  1. Риск чрезмерного приспособления данных для обратного тестирования. Фактическое применение может потребовать корректировки параметров и пороговых значений.
  2. Риск высоких сдвигов из-за частой торговли.
  3. Риск потери от несвоевременного выхода, когда тенденция меняется.
  4. Усиление риска, присущего самой количественной торговле.

Соответствующие методы смягчения последствий

  1. Динамически оптимизировать параметры и регулировать пороги.
  2. Соответственно смягчить правила торговли, чтобы уменьшить ненужную торговлю.
  3. Объедините больше индикаторов, чтобы оценить сигналы обратного движения.
  4. Строго контролируйте позиции и рычаги.

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

К основным аспектам оптимизации этой стратегии относятся:

  1. Проверьте длинные комбинации скользящих средних циклов, чтобы найти оптимальные параметры.
  2. Добавьте фундаментальные показатели, такие как финансовая эффективность, значимые события и т. д. в качестве фильтров.
  3. Включите больше индикаторов для определения времени изменения тренда, таких как полосы Боллинджера, KDJ и т.д.
  4. Разработать механизмы остановки убытков. Активно сократить убытки, когда убытки достигают заранее установленных точек остановки убытков.
  5. Добавить соотношение заимствования для контроля максимального заимствования.

Резюме

Движущаяся средняя кроссовер MACD торговая стратегия генерирует торговые сигналы с помощью простого отслеживания тренда и эффективно контролирует риски с соответствующими условиями фильтрации. Это эффективная количественная торговая стратегия.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMMA", max_bars_back = 200)

var up1 = #26A69A
var up2 = #B2DFDB
var down1 = #FF5252
var down2 = #FFCDD2
var confirmationLength = 2

var earliest = timestamp("20 Jan 2024 00:00 +0000")

// Regn u
shortEMA = ta.ema(close, 12)
longEMA = ta.ema(close, 26)
macd = shortEMA - longEMA
signal = ta.ema(macd, 9)
delta = macd - signal
absDelta = math.abs(delta)
previousDelta = delta[1]

signalCrossover = ta.crossover(macd, signal)
signalCrossunder = ta.crossunder(macd, signal)

harskiftetdag = hour(time[confirmationLength]) > hour(time)

enterLongSignal = signalCrossover[confirmationLength] and (macd > signal) and (absDelta >= 0.08)
exitLongSignal = signalCrossunder[confirmationLength] and (macd < signal)

enterShortSignal = signalCrossunder[confirmationLength] and (macd < signal) and (absDelta >= 0.08)
exitShortSignal = signalCrossover[confirmationLength] and (macd > signal)

// Så er det tid til at købe noe
qty = math.floor(strategy.equity / close)

if time >= earliest and not harskiftetdag
    if exitLongSignal 
        strategy.close("long")
    else if enterLongSignal
        strategy.close("short")
        strategy.entry("long", strategy.long, qty = qty)

    if exitShortSignal
        strategy.close("short")
    else if enterShortSignal
        strategy.close("long")
        strategy.entry("short", strategy.short, qty = qty)

// Så er det tid til at vise noe

plot(macd, color=color.blue)
plot(signal, color=color.orange)

// bgcolor(color = delta > 0.1 ? color.new(color.green, 90) : color.new(color.green, 100))
// bgcolor(color = signalCrossover ? color.purple : signalCrossunder ? color.aqua : color.new(color.green, 100))

histogramColor = delta > 0 ? (previousDelta < delta ? up1 : up2) : (previousDelta > delta ? down1 : down2)

plot(
     delta,
     style=plot.style_columns,
     color=histogramColor
     )

Больше