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