
Система торговли с интегрированной линейной динамикой с нулевой задержкой MACD и облачной диаграммой - это количественная торговая стратегия, разработанная специально для быстрых рыночных условий, которая хитро интегрирует три различных технических показателя: нулевая задержка MACD ((Zero Lag MACD), эталонная линия с равновесной диаграммой ((Kijun-sen) и показатель мобильной удобства ((Ease of Movement, EOM)). Эти три показателя работают в координате друг с другом, обеспечивая многоуровневую проверку при подтверждении торгового сигнала, что значительно повышает качество и надежность сигнала.
Ключевая концепция стратегии заключается в том, что торговые сигналы срабатывают только при одновременном выполнении нескольких условий, что позволяет отфильтровывать низкокачественные торговые возможности, уменьшить ошибочные сигналы и обеспечить надежное управление рисками с помощью динамических стоп-лостов и фиксированной прибыльно-неприбыльной доли. Благодаря оптимизации параметров и фильтрации условий, стратегия может адаптироваться к различным рыночным условиям, предоставляя трейдерам высоковероятные торговые возможности.
Система с интеграцией нулевой задержки MACD и равнолинейной динамики на графике облаков основана на взаимодействии трех основных показателей:
Нулевая задержка MACD (улучшенная версия 1.2)По сравнению с традиционным MACD, нулевой задержка MACD уменьшает задержку сигнала с помощью специального метода расчета, повышает чувствительность к точке переворота тренда. Этот показатель используется в стратегии для захвата точных динамических изменений, процесс расчета которого включает в себя:
zerolagEMA = (2 * ma1) - ma2иzerolagslowMA = (2 * mas1) - mas2Базовый график сбалансированности на первом взгляде ((Kijun-sen)В качестве динамического фильтра поддержки/сопротивления и тренда, линия Кижун-сен используется для определения направления, в котором доминирует рынок. Она рассчитывается на основе принципов дончжанского канала, принимая среднее значение наивысшей и наименьшей цены за определенный период:
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))Показатель мобильности (EOM)EOM: Это базирующийся на количестве сделок осциллятор, который определяет движение цены путем измерения сложности изменения цены. EOM рассчитывается по формуле:
eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)Вступление в стратегию обусловлено комбинацией сигналов по трем показателям:
Условия приема:
ta.crossover(ZeroLagMACD, signal))ZeroLagMACD < hist)close > baseLine)eom > 0)Условия для головоломки:
ta.crossunder(ZeroLagMACD, signal))ZeroLagMACD > hist)close < baseLine)eom < 0)С точки зрения управления рисками, стратегия использует динамический стоп-лост на основе ATR, стоп-лост-дистанцию в 2,5 раза превышает текущий ATR, а также устанавливает фиксированный риск-возвратный коэффициент 1:1.2, гарантируя разумную прибыльность для каждой сделки.
Система многократного подтвержденияС помощью интеграции трех индикаторов с различными характеристиками (тренд, динамика и объем сделок) стратегия может эффективно отфильтровывать ложные сигналы, вступая в сделку только при появлении высоковероятных торговых возможностей, что значительно повышает уровень успешности сделки.
Сокращение отсталостиПрименение MACD с нулевой задержкой вместо традиционной MACD позволяет быстрее улавливать рыночные переломы, уменьшая задержки, которые часто встречаются в традиционных показателях, и дает трейдерам возможность приблизиться к идеальной точке входа.
Высокая степень адаптацииВсе параметры в стратегии могут быть настроены на различные рыночные условия, торговые виды и временные циклы, что делает их чрезвычайно адаптивными. Основные показатели, включая параметры MACD-циклов, циклов Kijun-sen, длины EOM, могут быть оптимизированы.
Хорошие механизмы управления рисками:
Всесторонний анализ рынкаСтратегия одновременно учитывает динамику цен (MACD), структуру цен (Kijun-sen) и подтверждение объема сделок (EOM), анализирует рынок с нескольких измерений и формирует более полную систему принятия решений по сделкам.
ВизуализацияСтратегия предлагает множество визуальных возможностей, включая маркировку сигналов, отображение линий показателей и информационные панели, которые помогают трейдерам интуитивно понимать и контролировать торговые сигналы и текущее состояние рынка.
Риск ложных сигналов: Несмотря на использование стратегии подтверждения с помощью нескольких индикаторов, в условиях высокой волатильности или свертывания рынка могут возникать ложные сигналы. Особенно, когда рынок часто меняет направление в течение короткого времени, подтверждение с помощью нескольких индикаторов может привести к недостаточному количеству торговых сигналов и упущению некоторых торговых возможностей.
Параметры оптимизацииВ стратегии есть несколько параметров, которые требуют корректировки (MACD параметры, циклы Киджун-сена, длина EOM и т. Д.), Неправильная настройка параметров может привести к чрезмерному соответствию историческим данным, которые будут плохо работать в будущих рыночных условиях.
Скидки и риски ликвидностиВ течение низких временных циклов торговли, особенно в таких волатильных рынках, как криптовалюты, могут возникать проблемы со скольжением и ликвидностью, что приводит к расхождению между фактической ценой исполнения и ценой, рассчитанной по стратегии.
Стоп-убытки, которые могут быть пробитыВ условиях быстрого колебания рынка, ATR-основанные стоп-лоши могут быть неспособны справиться с экстремальными ценовыми изменениями, что приводит к фактическим потерям, превышающим ожидания.
Технологическая зависимостьСтратегия сильно зависит от технических показателей, которые могут оказаться неэффективными в случае сильных колебаний рынка, вызванных фундаментальными изменениями.
Параметры индикатора адаптируются: текущая стратегия использует фиксированные показательные параметры, можно рассмотреть возможность реализации механизма адаптивной корректировки параметров, автоматической оптимизации MACD, Kijun-sen и EOM в зависимости от волатильности рынка или торговых циклов. Это позволит стратегии лучше адаптироваться к различным этапам рынка, повышая общую стабильность.
Добавление классификации состояния рынкаС помощью добавления модуля идентификации состояния рынка стратегия может корректировать условия торговли и параметры управления рисками в зависимости от того, находится ли текущий рынок в состоянии тренда или волатильности. Например:
Оптимизация стратегий по борьбе с туберкулезомВ текущей стратегии используется фиксированный риск-возмездный коэффициент (RRR) 1: 1.2) для установки тормоза, можно рассмотреть возможность реализации более гибких механизмов торможения, таких как:
Интеграция моделей машинного обученияВ частности, он приводит примеры того, как можно использовать технологии машинного обучения для повышения прогнозируемости стратегий:
Добавление временного фильтраРынок может отличаться по своим характеристикам в разные периоды времени, и добавление фильтра времени позволяет избежать торговли в неэффективные периоды:
Торговая система с интеграцией с нулевой задержкой MACD и равнолинейной динамикой на графике облаков - это хорошо разработанная количественная торговая стратегия, которая формирует многомерную систему подтверждения торгового сигнала путем интеграции трех технических показателей с нулевой задержкой MACD, Kijun-sen и EOM. Эта стратегия использует строгие механизмы многократного подтверждения в идентификации входных точек, в управлении рисками сочетает динамические стоп-лоры и фиксированный риск-возврат, обеспечивая всесторонний контроль торгового процесса.
Ключевые преимущества стратегии заключаются в ее снижении задержек в дизайне и механизме совместной работы нескольких индикаторов, что позволяет ей захватывать высоковероятные торговые возможности на быстро меняющихся рынках. При этом полностью настраиваемые параметры позволяют трейдерам гибко адаптироваться к различным рыночным условиям и личным предпочтениям в отношении риска.
Хотя существуют некоторые потенциальные риски, связанные с этой стратегией, такие как проблемы оптимизации параметров и риски ложных сигналов, ее устойчивость и адаптивность могут быть повышены с помощью предлагаемых направлений оптимизации, таких как самостоятельная адаптация параметров показателей, классификация состояния рынка и интеграция машинного обучения.
В целом, это идеально продвинутая, структурированная система количественных торгов, подходящая для использования трейдерами с определенной базой технического анализа, особенно для инвесторов, которые ищут высококачественные торговые сигналы, а не высокочастотные сделки. Благодаря разумной корректировке параметров и постоянной оптимизации, стратегия имеет потенциал для стабильной торговой производительности в различных рыночных условиях.
/*backtest
start: 2024-06-11 00:00:00
end: 2025-06-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy(title="Zero Lag MACD + Kijun-sen + EOM Strategy", shorttitle="ZL-KJ-EOM", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// ================================================================================
// INPUT PARAMETERS - ALL INDICATOR SETTINGS
// ================================================================================
// === ZERO LAG MACD SETTINGS ===
group_macd = "Zero Lag MACD Enhanced Settings"
fastLength = input.int(12, title="Fast MM period", minval=1, group=group_macd)
slowLength = input.int(26, title="Slow MM period", minval=1, group=group_macd)
signalLength = input.int(9, title="Signal MM period", minval=1, group=group_macd)
MacdEmaLength = input.int(9, title="MACD EMA period", minval=1, group=group_macd)
useEma = input.bool(true, title="Use EMA (otherwise SMA)", group=group_macd)
useOldAlgo = input.bool(false, title="Use Glaz algo (otherwise 'real' original zero lag)", group=group_macd)
showDots = input.bool(true, title="Show symbols to indicate crossing", group=group_macd)
dotsDistance = input.float(1.5, title="Symbols distance factor", minval=0.1, group=group_macd)
// === KIJUN-SEN SETTINGS ===
group_kijun = "Kijun-Sen Settings"
basePeriods = input.int(26, minval=1, title="Kijun-Sen Period", group=group_kijun)
// === EASE OF MOVEMENT SETTINGS ===
group_eom = "Ease of Movement Settings"
eom_length = input.int(14, minval=1, title="EOM Length", group=group_eom)
div = input.int(10000, title="EOM Divisor", minval=1, group=group_eom)
// === RISK MANAGEMENT SETTINGS ===
group_risk = "Risk Management Settings"
atr_period = input.int(14, title="ATR Period", minval=1, group=group_risk)
atr_multiplier = input.float(2.5, title="ATR Multiplier for Stop Loss", minval=0.1, step=0.1, group=group_risk)
risk_reward_ratio = input.float(1.2, title="Risk-to-Reward Ratio", minval=0.1, step=0.1, group=group_risk)
// === DISPLAY SETTINGS ===
group_display = "Display Settings"
show_macd_plot = input.bool(false, title="Show MACD Plot (Separate Pane)", group=group_display)
show_eom_plot = input.bool(false, title="Show EOM Plot (Separate Pane)", group=group_display)
show_kijun_plot = input.bool(true, title="Show Kijun-Sen Line", group=group_display)
show_signals = input.bool(true, title="Show Entry Signals", group=group_display)
show_info_table = input.bool(true, title="Show Info Table", group=group_display)
// ================================================================================
// ZERO LAG MACD ENHANCED VERSION 1.2 (WITH USER INPUTS)
// ================================================================================
source = close
// Fast line
ma1 = useEma ? ta.ema(source, fastLength) : ta.sma(source, fastLength)
ma2 = useEma ? ta.ema(ma1, fastLength) : ta.sma(ma1, fastLength)
zerolagEMA = ((2 * ma1) - ma2)
// Slow line
mas1 = useEma ? ta.ema(source, slowLength) : ta.sma(source, slowLength)
mas2 = useEma ? ta.ema(mas1, slowLength) : ta.sma(mas1, slowLength)
zerolagslowMA = ((2 * mas1) - mas2)
// MACD line
ZeroLagMACD = zerolagEMA - zerolagslowMA
// Signal line
emasig1 = ta.ema(ZeroLagMACD, signalLength)
emasig2 = ta.ema(emasig1, signalLength)
signal = useOldAlgo ? ta.sma(ZeroLagMACD, signalLength) : (2 * emasig1) - emasig2
// MACD Histogram
hist = ZeroLagMACD - signal
// MACD EMA line
macd_ema = ta.ema(ZeroLagMACD, MacdEmaLength)
// MACD plot components (for separate pane if enabled)
upHist = (hist > 0) ? hist : 0
downHist = (hist <= 0) ? hist : 0
// ================================================================================
// KIJUN-SEN INDICATOR (WITH USER INPUTS)
// ================================================================================
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
baseLine = donchian(basePeriods)
// ================================================================================
// EASE OF MOVEMENT INDICATOR (WITH USER INPUTS)
// ================================================================================
var cumVol = 0.
cumVol += nz(volume)
if barstate.islast and cumVol == 0
runtime.error("No volume is provided by the data vendor.")
eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)
// ================================================================================
// ATR CALCULATION FOR STOP LOSS
// ================================================================================
atr = ta.atr(atr_period)
// ================================================================================
// ENTRY CONDITIONS
// ================================================================================
// Long Entry Conditions
macd_cross_up = ta.crossover(ZeroLagMACD, signal)
macd_below_hist = ZeroLagMACD < hist // MACD line below histogram
price_above_kijun = close > baseLine // Price above Kijun-sen
eom_above_zero = eom > 0 // EOM above zero
long_condition = macd_cross_up and macd_below_hist and price_above_kijun and eom_above_zero
// Short Entry Conditions
macd_cross_down = ta.crossunder(ZeroLagMACD, signal)
macd_above_hist = ZeroLagMACD > hist // MACD line above histogram
price_below_kijun = close < baseLine // Price below Kijun-sen
eom_below_zero = eom < 0 // EOM below zero
short_condition = macd_cross_down and macd_above_hist and price_below_kijun and eom_below_zero
// ================================================================================
// STRATEGY EXECUTION
// ================================================================================
// Entry Logic - Enter at next candle open as specified
if long_condition
strategy.entry("Long", strategy.long, comment="Long Entry")
if short_condition
strategy.entry("Short", strategy.short, comment="Short Entry")
// Exit Logic (Stop Loss and Take Profit)
if strategy.position_size > 0 // Long position
stop_loss = strategy.position_avg_price - (atr * atr_multiplier)
distance_to_sl = strategy.position_avg_price - stop_loss
take_profit = strategy.position_avg_price + (distance_to_sl * risk_reward_ratio)
strategy.exit("Long Exit", "Long", stop=stop_loss, limit=take_profit, comment="Long Exit")
if strategy.position_size < 0 // Short position
stop_loss = strategy.position_avg_price + (atr * atr_multiplier)
distance_to_sl = stop_loss - strategy.position_avg_price
take_profit = strategy.position_avg_price - (distance_to_sl * risk_reward_ratio)
strategy.exit("Short Exit", "Short", stop=stop_loss, limit=take_profit, comment="Short Exit")
// ================================================================================
// PLOTTING INDICATORS
// ================================================================================
// Plot Kijun-sen
plot(show_kijun_plot ? baseLine : na, color=color.new(color.maroon, 0), title="Kijun-Sen", linewidth=2)
// Plot entry signals
plotshape(show_signals and long_condition, title="Long Signal", location=location.belowbar, color=color.new(color.green, 0), style=shape.triangleup, size=size.small, text="LONG")
plotshape(show_signals and short_condition, title="Short Signal", location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.small, text="SHORT")
// Plot stop loss and take profit levels for current position
plot(strategy.position_size > 0 ? strategy.position_avg_price - (atr * atr_multiplier) : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title="Long Stop Loss")
plot(strategy.position_size > 0 ? strategy.position_avg_price + ((strategy.position_avg_price - (strategy.position_avg_price - (atr * atr_multiplier))) * risk_reward_ratio) : na, color=color.new(color.green, 0), style=plot.style_linebr, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 ? strategy.position_avg_price + (atr * atr_multiplier) : na, color=color.new(color.red, 0), style=plot.style_linebr, linewidth=1, title="Short Stop Loss")
plot(strategy.position_size < 0 ? strategy.position_avg_price - (((strategy.position_avg_price + (atr * atr_multiplier)) - strategy.position_avg_price) * risk_reward_ratio) : na, color=color.new(color.green, 0), style=plot.style_linebr, linewidth=1, title="Short Take Profit")
// ================================================================================
// SEPARATE PANE PLOTS (OPTIONAL)
// ================================================================================
// MACD Plot (separate pane)
plot(show_macd_plot ? upHist : na, color=color.new(color.green, 40), style=plot.style_columns, title='MACD Positive Histogram')
plot(show_macd_plot ? downHist : na, color=color.new(color.purple, 40), style=plot.style_columns, title='MACD Negative Histogram')
plot(show_macd_plot ? ZeroLagMACD : na, color=color.new(color.black, 0), linewidth=2, title='MACD Line')
plot(show_macd_plot ? signal : na, color=color.new(color.gray, 0), linewidth=2, title='Signal Line')
plot(show_macd_plot ? macd_ema : na, color=color.new(color.red, 0), linewidth=2, title='EMA on MACD Line')
// MACD zero line
plot(show_macd_plot ? 0 : na, "MACD Zero Line", color=color.new(color.gray, 50))
// MACD crossover dots - calculate cross condition globally for consistency
macd_signal_cross = ta.cross(ZeroLagMACD, signal)
circleYPosition = signal * dotsDistance
plot(show_macd_plot and showDots and macd_signal_cross ? circleYPosition : na, style=plot.style_circles, linewidth=4, color=hist > 0 ? color.new(color.green, 0) : color.new(color.purple, 0), title='MACD Cross Dots')
// EOM Plot (separate pane)
plot(show_eom_plot ? eom : na, "EOM", color=color.new(#43A047, 0), linewidth=2)
plot(show_eom_plot ? 0 : na, "EOM Zero Line", color=color.new(color.gray, 50))
// ================================================================================
// INFO TABLE
// ================================================================================
var table info_table = table.new(position.top_right, 2, 8, bgcolor=color.new(color.white, 0), border_width=1)
if show_info_table and barstate.islast
table.cell(info_table, 0, 0, "Position", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 0, strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "FLAT",
text_color=strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : color.black)
table.cell(info_table, 0, 1, "Entry Price", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 1, strategy.position_size != 0 ? str.tostring(strategy.position_avg_price, "#.####") : "N/A", text_color=color.black)
table.cell(info_table, 0, 2, "Current ATR", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 2, str.tostring(atr, "#.####"), text_color=color.black)
table.cell(info_table, 0, 3, "MACD Value", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 3, str.tostring(ZeroLagMACD, "#.####"), text_color=color.black)
table.cell(info_table, 0, 4, "Signal Value", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 4, str.tostring(signal, "#.####"), text_color=color.black)
table.cell(info_table, 0, 5, "EOM Value", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 5, str.tostring(eom, "#.##"), text_color=eom > 0 ? color.green : color.red)
table.cell(info_table, 0, 6, "Price vs Kijun", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 6, close > baseLine ? "ABOVE" : "BELOW", text_color=close > baseLine ? color.green : color.red)
table.cell(info_table, 0, 7, "Last Signal", text_color=color.black, bgcolor=color.new(color.gray, 70))
table.cell(info_table, 1, 7, long_condition ? "LONG" : short_condition ? "SHORT" : "NONE",
text_color=long_condition ? color.green : short_condition ? color.red : color.gray)
// ================================================================================
// ALERTS
// ================================================================================
// Alert conditions
alertcondition(long_condition, title="Long Entry Signal",
message="ZL-MACD+KJ+EOM Strategy: Long Entry Signal Triggered\nMACD: {{plot_0}}\nSignal: {{plot_1}}\nEOM: {{plot_2}}\nPrice: {{close}}\nKijun-Sen: {{plot_3}}")
alertcondition(short_condition, title="Short Entry Signal",
message="ZL-MACD+KJ+EOM Strategy: Short Entry Signal Triggered\nMACD: {{plot_0}}\nSignal: {{plot_1}}\nEOM: {{plot_2}}\nPrice: {{close}}\nKijun-Sen: {{plot_3}}")
// Position exit alerts
alertcondition(strategy.position_size[1] != 0 and strategy.position_size == 0, title="Position Closed",
message="ZL-MACD+KJ+EOM Strategy: Position Closed")