Стратегия MACD Trend Following - это количественная торговая стратегия, основанная на индикаторе MACD. Эта стратегия идентифицирует сигналы золотого креста и креста смерти MACD для определения рыночных тенденций и отслеживания ценовых тенденций.
Основная логика стратегии MACD Trend Following заключается:
Благодаря этому механизму, стратегия может своевременно отслеживать изменения рыночных тенденций и получать прибыль.
Стратегия MACD Trend Following имеет следующие преимущества:
Стратегия MACD Trend Following также сопряжена со следующими рисками:
Для устранения вышеуказанных рисков могут быть приняты следующие меры оптимизации:
Стратегия MACD Trend Following может быть оптимизирована в следующих аспектах:
Оптимизировать параметры индикатора MACD для снижения частоты ложного сигнала.
Добавьте другие показатели, такие как объем торговли, чтобы отфильтровать сигналы.
Настроить динамический механизм остановки потерь. Точки остановки потерь могут быть регулированы динамически на основе волатильности.
Оптимизировать логику определения сигнала для открытия позиций.
Модели могут быть обучены для оценки надежности сигналов.
В целом, стратегия 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