
Двойная стратегия захвата и фильтрации трендовых сигналов MACD - это стратегия количественного трейдинга, основанная на двух разных временных рамках. Эта стратегия используется для захвата рыночных торговых возможностей путем объединения краткосрочных и долгосрочных трендовых сигналов, эффективно фильтруя рыночный шум и повышая точность торговых сигналов. Эта стратегия реализуется на платформе TradingView, независимо от наложения ценовых графиков и применяется для различных финансовых рынков, включая акции, фьючерсы и валюту.
В основе стратегии лежит использование двух индикаторов MACD: MACD1 (краткосрочный) и MACD2 (долгосрочный). MACD1 имеет по умолчанию быструю длину 34, медленную длину 144, сигнальную плавность 9 для обнаружения изменений в краткосрочной тенденции; MACD2 имеет по умолчанию быструю длину 100, медленную длину 200 и сигнальную плавность 50 для оценки направления долгосрочной тенденции.
Основная идея двойной MACD-стратегии заключается в том, чтобы идентифицировать рыночные тенденции и генерировать торговые сигналы с помощью MACD-индикаторов в двух разных временных рамках. Код стратегии сначала рассчитывает два MACD-индикатора и их соответствующие параметры:
MACD1 (краткосрочный индикатор):
MACD2 (долгосрочный показатель):
Логика сделки была четкой и строгой:
Условия:
Условия для освобождения:
Стратегия также включает в себя меры по управлению рисками, устанавливает регулируемые параметры остановки и остановки, по умолчанию остановка составляет 1% (минимум 0,1%), остановка - 1,5% (минимум 0,1%), рассчитывается на основе динамики цены входа. Торги обрабатываются при закрытии линии K, чтобы обеспечить стабильность сигнала.
В результате глубокого анализа кода, стратегия двойного MACD демонстрирует ряд преимуществ:
Двойной механизм подтверждения тренда: благодаря сочетанию краткосрочного и долгосрочного MACD, стратегия может эффективно фильтровать рыночный шум, уменьшать ложные сигналы и повышать точность торгов. Стратегия генерирует торговые сигналы только тогда, когда краткосрочные и долгосрочные сигналы совпадают.
Гибкая параметровая настройка: политика позволяет пользователю настраивать параметры MACD (быстрое, медленное и гладкое сигналы) и методы расчета (SMA или EMA), что позволяет стратегии адаптироваться к различным рыночным условиям и предпочтениям пользователей.
Интуитивная визуальная обратная связь: стратегия интуитивно отображает силу тренда с помощью динамического изменения цвета (поднимающийся тренд - темно-зеленый, понижающийся - темно-красный), что помогает трейдерам лучше понимать состояние рынка.
Правильное управление рисками: встроенные регулируемые параметры остановки и прекращения убытков, защищающие безопасность средств и блокирующие прибыль. Эти параметры могут быть скорректированы в зависимости от волатильности рынка и индивидуальной способности к риску.
Функция оповещения в реальном времени: стратегия обеспечивает оповещение о повышении и снижении цены, что позволяет контролировать и автоматизировать торговлю в реальном времени, что позволяет трейдерам вовремя использовать рыночные возможности.
Широкая применимость: стратегия применяется на различных финансовых рынках, включая акции, фьючерсы и валюту, что делает ее практическим инструментом для различных сценариев торговли.
Несмотря на обоснованный дизайн двойной MACD-стратегии, существуют некоторые потенциальные риски:
Риск обратного тренда: в условиях резкой волатильности рынка тренд может быстро измениться, что приведет к убыткам в стратегии. Даже при установке стоп-лосса, в экстремальных рыночных условиях фактическая стоп-цена может сильно скользить.
Чувствительность к параметрам: эффективность стратегии сильно зависит от параметров MACD. Ненадлежащие параметры могут привести к слишком большому количеству ложных сигналов или пропущенным важным торговым возможностям. Пользователи должны тщательно оптимизировать параметры в соответствии с конкретными рынками и временными рамками.
Проблема отставания: MACD по сути является отстающим показателем, рассчитанным на основе исторических данных о ценах. В быстро меняющихся рынках сигнал может прийти слишком поздно, пропустить оптимальную точку входа или привести к ненужным потерям.
Плохое поведение на горизонтальном рынке: эта стратегия лучше всего работает на рынке с сильным трендом, но может часто создавать ложные сигналы на горизонтальном или недиректированном рынке, что приводит к последовательным небольшим потерям.
Управление рисками средств: по умолчанию используйте 100% средств для торговли, что может привести к чрезмерному леверингу и неправильному управлению средствами. Трейдеры должны рассмотреть возможность уменьшения пропорции средств для каждой сделки, чтобы лучше управлять рисками.
Чтобы снизить эти риски, трейдеры должны рассмотреть возможность: перекрестной проверки в сочетании с другими техническими показателями; регулярного отслеживания и оптимизации параметров стратегии; корректировки распределения средств в соответствии с рыночными условиями; ручного вмешательства в экстремальных рыночных условиях; и установки разумного соотношения риска/возвращения.
В результате глубокого анализа кода можно сделать следующее:
Добавление условий фильтрации: можно добавить дополнительные технические показатели (например, относительно сильный индекс RSI или ленты Брин) в качестве фильтра, чтобы уменьшить ложные сигналы. Например, торговать только тогда, когда RSI указывает на то, что рынок не является перекупленным / перепроданным.
Самостоятельно адаптируемые параметры: самостоятельно адаптируемые параметры MACD, которые автоматически корректируются в зависимости от волатильности рынка. В высоковолатильных рынках можно увеличить длину быстрого и медленного движения, чтобы уменьшить шум; в низковолатильных рынках можно уменьшить параметры, чтобы повысить чувствительность.
Улучшение стратегии остановки: реализация динамического остановки на основе волатильности, например, установка остановки на основе ATR (средняя величина истинной волатильности), а не фиксированного процента. Это сделает остановку более подходящей для текущих рыночных условий.
Добавление механизма частичного выравнивания: разрешается частичное выравнивание при достижении определенного целевого показателя прибыли, блокирование части прибыли, а оставшаяся позиция продолжает получать прибыль.
Фильтрация времени торговли: добавление фильтрации времени торговли, чтобы избежать торговли в периоды высокой волатильности, такие как открытие / закрытие рынка, или в периоды низкой ликвидности.
Оптимизация управления капиталом: реализация управления капиталом на основе критериев Келли или модели фиксированного соотношения риска, динамическая корректировка размера позиции в зависимости от выигрышности и риска/возвращения.
Комбинирование нескольких временных циклов: помимо двух существующих MACD, следует рассмотреть возможность добавления третьего, более длительного MACD, чтобы обеспечить более полное представление о рынке.
Классификация состояния рынка: добавление логики классификации состояния рынка (например, трендовый рынок против горизонтального рынка) и корректировка стратегии и параметров торговли в зависимости от различных состояний рынка.
Эти оптимизации позволяют повысить устойчивость и адаптивность стратегий, позволяя им сохранять хорошую производительность в различных рыночных условиях.
Двойная стратегия захвата трендового сигнала MACD и фильтрации создают мощную систему отслеживания трендов путем хитрого сочетания краткосрочных и долгосрочных показателей MACD. Основные преимущества этой стратегии заключаются в ее строгом механизме двойного подтверждения, который эффективно уменьшает ложные сигналы и повышает точность торговли.
Несмотря на существующие риски, такие как обратная тенденция, чувствительность параметров и неэффективная работа на горизонтальном рынке, эти риски могут быть эффективно контролированы с помощью соответствующих мер управления рисками и оптимизации стратегии.
В целом, стратегия двойного MACD предоставляет солидную структуру для количественных трейдеров, особенно для краткосрочных и среднесрочных трендовых трейдеров. Благодаря сочетанию классических инструментов технического анализа с гибкими торговыми правилами, стратегия предоставляет надежную торговую систему для трейдеров, стремящихся к постоянной прибыли.
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy(title="Dual MACD Strategy [Jason Kasei]", shorttitle="DualMACD", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=10000)
// --- 输入参数 ---
// MACD1 参数
macd1_fast_length = input.int(title="MACD1 Fast Length", defval=34)
macd1_slow_length = input.int(title="MACD1 Slow Length", defval=144)
macd1_signal_length = input.int(title="MACD1 Signal Smoothing", minval=1, maxval=50, defval=9)
macd1_sma_source = input.string(title="MACD1 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd1_sma_signal = input.string(title="MACD1 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// MACD2 参数
macd2_fast_length = input.int(title="MACD2 Fast Length", defval=100)
macd2_slow_length = input.int(title="MACD2 Slow Length", defval=200)
macd2_signal_length = input.int(title="MACD2 Signal Smoothing", minval=1, maxval=50, defval=50)
macd2_sma_source = input.string(title="MACD2 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd2_sma_signal = input.string(title="MACD2 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// 止损止盈参数
stop_loss_pct = input.float(title="Stop Loss %", defval=1.0, minval=0.1, step=0.1)
take_profit_pct = input.float(title="Take Profit %", defval=1.5, minval=0.1, step=0.1)
// --- 计算 MACD1 ---
src = close
macd1_fast_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_fast_length) : ta.ema(src, macd1_fast_length)
macd1_slow_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_slow_length) : ta.ema(src, macd1_slow_length)
macd1 = macd1_fast_ma - macd1_slow_ma
macd1_signal = macd1_sma_signal == "SMA" ? ta.sma(macd1, macd1_signal_length) : ta.ema(macd1, macd1_signal_length)
macd1_hist = macd1 - macd1_signal
// --- 计算 MACD2 ---
macd2_fast_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_fast_length) : ta.ema(src, macd2_fast_length)
macd2_slow_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_slow_length) : ta.ema(src, macd2_slow_length)
macd2 = macd2_fast_ma - macd2_slow_ma
macd2_signal = macd2_sma_signal == "SMA" ? ta.sma(macd2, macd2_signal_length) : ta.ema(macd2, macd2_signal_length)
macd2_hist = macd2 - macd2_signal
// --- 绘制 MACD1 和 MACD2
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(macd1_hist, title="MACD1 Histogram", style=plot.style_line, color=(macd1_hist >= 0 ? (macd1_hist[1] < macd1_hist ? #26A69A : #B2DFDB) : (macd1_hist[1] < macd1_hist ? #FFCDD2 : #FF5252)))
plot(macd2_hist, title="MACD2 Histogram", style=plot.style_histogram, color=(macd2_hist >= 0 ? (macd2_hist[1] < macd2_hist ? #26A69A : #B2DFDB) : (macd2_hist[1] < macd2_hist ? #FFCDD2 : #FF5252)))
// --- 交易条件 ---
is_deep_green_macd2 = ta.cross(macd2_hist, 0) and macd2_hist > 0 and macd2_hist[1] < macd2_hist
is_deep_red_macd2 = ta.cross(macd2_hist, 0) and macd2_hist < 0 and macd2_hist[1] > macd2_hist
// 检测 MACD1 hist 穿越零轴
macd1_cross_up = macd1_hist > 0
macd1_cross_down = macd1_hist < 0
// 做多条件
long_condition = macd1_cross_up and macd2_hist > 0 and is_deep_green_macd2
// 做空条件
short_condition = macd1_cross_down and macd2_hist < 0 and is_deep_red_macd2
// --- 交易逻辑 ---
if long_condition
strategy.entry("Long", strategy.long)
stop_loss_long = strategy.position_avg_price * (1 - stop_loss_pct / 100)
take_profit_long = strategy.position_avg_price * (1 + take_profit_pct / 100)
strategy.exit("Long Exit", "Long", stop=stop_loss_long, limit=take_profit_long)
if short_condition
strategy.entry("Short", strategy.short)
stop_loss_short = strategy.position_avg_price * (1 + stop_loss_pct / 100)
take_profit_short = strategy.position_avg_price * (1 - take_profit_pct / 100)
strategy.exit("Short Exit", "Short", stop=stop_loss_short, limit=take_profit_short)
// --- 警报条件 ---
alertcondition(long_condition, title="Long Entry", message="Dual MACD Strategy: Long Entry Signal")
alertcondition(short_condition, title="Short Entry", message="Dual MACD Strategy: Short Entry Signal")