Тенденция MACD в соответствии со стратегией

Автор:Чао Чжан, Дата: 2023-12-11 14:57:00
Тэги:

img

Обзор

Стратегия MACD Trend Following - это количественная торговая стратегия, основанная на индикаторе MACD. Эта стратегия идентифицирует сигналы золотого креста и креста смерти MACD для определения рыночных тенденций и отслеживания ценовых тенденций.

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

Основная логика стратегии MACD Trend Following заключается:

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

Благодаря этому механизму, стратегия может своевременно отслеживать изменения рыночных тенденций и получать прибыль.

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

Стратегия MACD Trend Following имеет следующие преимущества:

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

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

Стратегия MACD Trend Following также сопряжена со следующими рисками:

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

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

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

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

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

  1. Оптимизировать параметры индикатора MACD для снижения частоты ложного сигнала.

  2. Добавьте другие показатели, такие как объем торговли, чтобы отфильтровать сигналы.

  3. Настроить динамический механизм остановки потерь. Точки остановки потерь могут быть регулированы динамически на основе волатильности.

  4. Оптимизировать логику определения сигнала для открытия позиций.

  5. Модели могут быть обучены для оценки надежности сигналов.

Заключение

В целом, стратегия MACD Trend Following является относительно зрелой количественной стратегией. Она использует индикатор MACD для определения направления тренда рынка и контролирует риски с механизмом стоп-лосса, который может эффективно отслеживать ценовые тенденции. Но сам индикатор MACD также имеет некоторые недостатки, легко генерировать ложные сигналы. Поэтому есть возможности для дальнейшей оптимизации этой стратегии, в основном по таким аспектам, как параметры индикатора, механизм стоп-лосса, фильтрация сигнала и т. Д.


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

//@version=5
strategy("MACD Cross Strategy", overlay=true)

// Get MACD values
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
var float entryLongPrice = na
var float entryShortPrice = na

var float highestLongProfit = 0
var float highestShortProfit = 0

var float highestMACD = 0
var float lowestMACD = 0
var bool haveOpenedLong = false
var bool haveOpenedShort = false

var float stoploss = 0.04 // To be adjust for different investment
var float minProfit = 0.05 // To be adjust for different investment

if macdLine > 0
    lowestMACD := 0
    highestMACD := math.max(highestMACD, macdLine)
    haveOpenedShort := false
else
    highestMACD := 0
    lowestMACD := math.min(lowestMACD, macdLine)
    haveOpenedLong := false

// Enter long position when MACD line crosses above the signal line
if ta.crossover(macdLine, signalLine) and macdLine < highestMACD and macdLine > 0 and haveOpenedLong == false
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", from_entry = "Long", stop=close*(1 - stoploss))
    entryLongPrice := close
    haveOpenedLong := true

if ta.crossunder(macdLine, signalLine) and macdLine > lowestMACD and macdLine < 0 and haveOpenedShort == false
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", from_entry = "Short", stop=close*(1 + stoploss))
    entryShortPrice := close
    haveOpenedShort := true

// log.info("entryLongPrice:{0}", entryLongPrice)
if strategy.position_size > 0
    profit = close - entryLongPrice
    log.info("profit:{0}", profit)
    if profit > 0
        highestLongProfit := math.max(highestLongProfit, profit)
        if profit / entryLongPrice > minProfit and highestLongProfit * 0.8 > profit
            strategy.close("Long")
            highestLongProfit := 0

if strategy.position_size < 0
    profit = entryShortPrice - close
    if profit > 0
        highestShortProfit := math.max(highestShortProfit, profit)
        log.info("highestShortProfit={0}, profit={1}", highestShortProfit, profit)
        if profit / entryShortPrice > minProfit and highestShortProfit * 0.8 > profit
            strategy.close("Short")
            highestShortProfit := 0

Больше