
ゼロラグ MACDとクラウドグラフ均等線動量統合取引システムは,高速市場環境のために設計された量化取引戦略であり,この戦略は,3つの異なる特性の技術指標を巧みに統合しています:ゼロラグ MACD ((Zero Lag MACD),一目瞭然グラフの基準線 ((Kijun-sen) と移動便利性指標 ((Ease of Movement,EOM)).この3つの指標は,相互に協調して,取引信号の確認時に複数のレベルの証明を提供し,信号の質と信頼性を大幅に向上させます.この戦略は,特に暗号通貨などの波動的な市場に適しており,低時間周期 (例えば5分) で優れている.
この戦略の核心的な設計理念は,複数の条件が同時に満たされている場合にのみ取引シグナルをトリガーすることであり,それによって低品質の取引機会をフィルターし,誤った信号を軽減し,ダイナミックなストップ・ロズと固定された損率で堅牢なリスク管理を実現します.パラメータの最適化と条件のりによって,この戦略は,異なる市場環境に適応し,トレーダーに高確率の取引機会を提供します.
ゼロラグデッドMACDとクラウドグラフ均線動力の統合取引システムの動作は,3つの核心指標の協同作用に基づいています.
ゼロ・ラグランス MACD (強化版1.2):従来のMACDと比較して,ゼロラグデッドMACDは,特殊な計算方法によって信号の遅延を軽減し,トレンドの転換点に対する感受性を高めます.この指標は,戦略で正確な動力の変化を捉えるために使用され,その計算プロセスは以下のとおりです.
zerolagEMA = (2 * ma1) - ma2そしてzerolagslowMA = (2 * mas1) - mas2一目平衡図基準線 ((キジュン・セン)): 動的サポート/抵抗とトレンドフィルターとして,キジュン・セン線は市場の支配的な方向を確定するために使用されます.その計算は,特定の周期内の最高価格と最低価格の平均値を取って,ドンチアン通路の原理に基づいて計算されます:
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))移動便利性指数 (EOM): これは取引量に基づく振動器で,価格変動の難易度を測定することによって価格動向を確認する. EOMは以下の公式で計算される.
eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)この戦略の入場条件は,以下の3つの指標の合体です.
多頭入学条件:
ta.crossover(ZeroLagMACD, signal))ZeroLagMACD < hist)close > baseLine)eom > 0)空頭入場条件:
ta.crossunder(ZeroLagMACD, signal))ZeroLagMACD > hist)close < baseLine)eom < 0)リスク管理の観点から,戦略はATRに基づく動的ストップローズを採用し,現在のATRの2.5倍のストップローズ距離を設定し,固定リスク/リターン比率を1:1:2に設定し,取引ごとに合理的な利益目標を確保した.
多重認証システム戦略は,異なる特性の3つの指標 (トレンド,動力,取引量) を統合することにより,偽の信号を効果的にフィルターし,高確率の取引機会が現れた場合にのみ入場し,取引の成功率を大幅に向上させます.
遅滞を減らすために:従来のMACDではなく,ゼロラグデッドMACDを採用することで,市場転換点をより早く捉えることができ,従来の指標でよく見られるラグデッドの問題を軽減し,トレーダーが理想的なエントリーポイントにより近い状態にすることができます.
適応性が高い戦略のすべてのパラメータは,異なる市場環境,取引品種,時間周期に応じてカスタマイズされ,非常に強い適応性を有します. 核心指標は,MACD周期パラメータ,Kijun-sen周期,EOM長さなど,ターゲットに最適化することができます.
優れたリスク管理システム:
全面的な市場分析戦略は,価格動力 (MACD),価格構造 (Kijun-sen) と取引量確認 (EOM) を同時に考慮し,市場を複数の次元から分析し,より包括的な取引意思決定システムを形成する.
視覚化機能: 戦略は,信号標識,指標ライン表示,情報パネルを含む豊富な可視化オプションを提供し,トレーダーが取引信号と現在の市場状態を直感的に理解し監視するのを助けます.
偽信号のリスク: 策略が複数の指数確認を使用しているにもかかわらず,高波動または整合の市場では,偽信号が発生することがあります. 特に,市場が短期間で頻繁に方向を変えるとき,複数の指数の確認は,取引信号が不足し,取引機会の一部が逃れることにつながる可能性があります.
パラメータ最適化の課題策略には複数のパラメータを調整する必要がある (MACDパラメータ,キジュンセン周期,EOM長さなど),不適切なパラメータ設定は,過去のデータに過度に適合させ,将来の市場環境で不良なパフォーマンスを引き起こす可能性があります.
スライドポイントと流動性のリスク低時間周期の取引,特に仮想通貨などの波動的な市場では,滑り込みと流動性の問題が発生し,実際の実行価格と戦略計算価格の差異が生じます.
ストップダメージは破損のリスク: 急速な波動のある市場では,ATRに基づくストップは,極端な価格変動に対応できず,予想以上の実際の損失を引き起こす可能性があります.
テクノロジーの依存戦略は技術指標に大きく依存しており,基本面の変化による市場変動が激しい場合,不良な結果が出る可能性があります.
値のパラメータは自律的に: 現行の戦略は,固定された指標パラメータを使用し,パラメータの自己適応調整メカニズムを実現することを考えることができる.市場の変動性または取引周期に応じてMACD,Kijun-senおよびEOMのパラメータを自動的に最適化することができる.これは,戦略が異なる市場段階により良く適応し,全体的な安定性を向上させることを可能にする.
市場状態の分類を追加する: 市場状態認識モジュールを追加することで,戦略は,現在の市場が傾向にあるか,または揺動状態にあるかによって取引条件とリスク管理パラメータを調整できます. 例えば:
を抑える戦略を最適化:現在の戦略は,固定リスク報酬比率 ((1:1.2) を使って止まりを設定し,より柔軟な止まりの仕組みを実現することを考えることができます.例えば:
機械学習モデルを統合する戦略の予測力を強化する機械学習の活用を検討する.
時間フィルターの追加: 市場が異なる時間帯で異なる行動を示す可能性があるため,時間フィルターを追加することで,低効率な取引時に取引を避けることができます:
ゼロラグッドMACDと雲図均線動力統合取引システムは,精巧に設計された量化取引戦略で,ゼロラグッドMACD,キジュンセン,EOMの3つの技術指標を統合することによって,多次元取引信号確認システムを形成している.この戦略は,入場点識別で厳格な複数確認機構を採用し,リスク管理で動的ストップ損失と固定リスクリターン比を組み合わせ,取引プロセスの全方位制御を実現している.
戦略の核心的な強みは,遅滞を減らす設計理念と多指標の協同作業の仕組みにあるため,急速に変化する市場で高確率の取引機会を捉えることができる.同時に,完全にカスタマイズ可能なパラメータ設定は,異なる市場環境と個人リスクの好みに応じてトレーダーに柔軟な調整を可能にします.
この戦略には,パラメータ最適化チャレンジや偽信号リスクなどの潜在的なリスクがあるものの,指標パラメータ自主適応,市場状態分類,機械学習統合などの推奨された最適化方向によって,戦略の安定性と適応性をさらに向上させることができます.
全体として,これは理念的に高度な,構造的に整った量化取引システムであり,技術分析の基礎のあるトレーダー,特に高周波取引ではなく高品質の取引シグナルを求める投資家の使用に適しています.合理的なパラメータ調整と継続的な最適化により,この戦略は,さまざまな市場環境で安定した取引パフォーマンスを提供する可能性があります.
/*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")