Sistem perdagangan integrasi momentum rata-rata pergerakan MACD tanpa jeda dan grafik awan

MACD EMA SMA ATR ICHIMOKU EOM RRR 动量指标 零滞后指标 均线交叉
Tanggal Pembuatan: 2025-06-11 09:58:31 Akhirnya memodifikasi: 2025-06-11 09:58:31
menyalin: 3 Jumlah klik: 383
2
fokus pada
319
Pengikut

Sistem perdagangan integrasi momentum rata-rata pergerakan MACD tanpa jeda dan grafik awan Sistem perdagangan integrasi momentum rata-rata pergerakan MACD tanpa jeda dan grafik awan

Ringkasan

Sistem perdagangan integrasi linier dinamis MACD dengan grafik awan adalah strategi perdagangan kuantitatif yang dirancang khusus untuk lingkungan pasar berirama cepat, yang dengan cerdik mengintegrasikan tiga indikator teknis yang berbeda: MACD tanpa lag ((Zero Lag MACD), garis dasar grafik yang seimbang ((Kijun-sen) dan indikator kemudahan bergerak ((Ease of Movement, EOM)). Ketiga indikator ini bekerja bersama-sama, memberikan beberapa tingkat bukti saat mengkonfirmasi sinyal perdagangan, meningkatkan kualitas sinyal dan keandalan secara signifikan. Strategi ini sangat cocok untuk pasar yang berfluktuasi besar seperti cryptocurrency, dan berkinerja baik dalam periode waktu rendah (seperti 5 menit).

Konsep desain inti dari strategi ini adalah untuk memicu sinyal perdagangan hanya jika beberapa kondisi terpenuhi secara bersamaan, sehingga memfilter peluang perdagangan berkualitas rendah, mengurangi sinyal yang salah, dan manajemen risiko yang kuat melalui stop loss yang dinamis dan rasio kerugian tetap. Dengan optimasi parameter dan penyaringan kondisi, strategi ini dapat beradaptasi dengan berbagai lingkungan pasar, memberikan peluang perdagangan dengan probabilitas tinggi bagi pedagang.

Prinsip Strategi

MACD tanpa lag dan sistem perdagangan integrasi dinamis linier berbasis pada tiga indikator inti:

  1. MACD (perbaikan versi 1.2)Dibandingkan dengan MACD tradisional, MACD dengan lag nol mengurangi lag sinyal dan meningkatkan sensitivitas terhadap titik-titik perubahan tren melalui metode komputasi khusus. Indikator ini digunakan dalam strategi untuk menangkap perubahan momentum yang tepat, proses perhitungan yang meliputi:

    • Perhitungan nol lag untuk jalur cepat dan lambat:zerolagEMA = (2 * ma1) - ma2DanzerolagslowMA = (2 * mas1) - mas2
    • Garis MACD: perbedaan antara garis cepat dan lambat
    • Garis sinyal: rata-rata bergerak lurus MACD
    • Garis pilar: perbedaan antara garis MACD dan garis sinyal
  2. Garis acuan ekuilibrium pertama (Kijun-sen)Sebagai filter dukungan / resistensi dan tren yang dinamis, garis Kijun-sen digunakan untuk mengkonfirmasi arah dominan pasar. Ini dihitung berdasarkan prinsip saluran Dongxian, mengambil rata-rata harga tertinggi dan terendah dalam periode tertentu:

    • baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
  3. Indeks Aksesibilitas Mobile (EOM): Ini adalah sebuah osilator berdasarkan volume transaksi yang mengkonfirmasi pergerakan harga dengan mengukur kesulitan perubahan harga. EOM dihitung dengan rumus berikut:

    • eom = ta.sma(div * ta.change(hl2) * (high - low) / volume, eom_length)

Kebijakan ini melibatkan kombinasi dari tiga indikator:

Syarat Masuk

  • Garis sinyal pada MACDta.crossover(ZeroLagMACD, signal)
  • Garis MACD berada di bawah grafik pilarZeroLagMACD < hist
  • Harga lebih tinggi dari Kijun-senclose > baseLine
  • EOM lebih besar dari 0eom > 0

Syarat untuk masuk dengan kepala kosong

  • MACD di bawah garis melewati garis sinyalta.crossunder(ZeroLagMACD, signal)
  • Garis MACD lebih tinggi dari pilarZeroLagMACD > hist
  • Harga lebih murah dari Kijun-senclose < baseLine
  • EOM kurang dari 0eom < 0

Dalam pengelolaan risiko, strategi ini menggunakan stop loss dinamis berbasis ATR, dengan stop loss jarak 2,5 kali ATR saat ini, dan menetapkan rasio risiko-pengembalian tetap 1: 1.2, memastikan bahwa setiap perdagangan memiliki target keuntungan yang wajar.

Keunggulan Strategis

  1. Multiple Authentication System (MAS)Dengan mengintegrasikan tiga indikator dengan karakteristik yang berbeda (trend, momentum, dan volume transaksi), strategi ini dapat secara efektif memfilter sinyal palsu, dan hanya masuk ketika peluang perdagangan dengan probabilitas tinggi muncul, yang secara signifikan meningkatkan tingkat keberhasilan perdagangan.

  2. Mengurangi KetinggalanMenggunakan MACD dengan zero lag, bukan MACD tradisional, dapat menangkap titik pivot pasar lebih awal, mengurangi masalah lag yang sering terjadi pada indikator tradisional, dan memungkinkan pedagang untuk lebih dekat ke titik masuk yang ideal.

  3. Sangat mudah beradaptasiSemua parameter dalam strategi dapat disesuaikan secara khusus sesuai dengan lingkungan pasar, jenis perdagangan, dan siklus waktu yang berbeda, sehingga memiliki kemampuan adaptasi yang sangat kuat. Indikator inti termasuk parameter siklus MACD, siklus Kijun-sen, panjang EOM, dan lain-lain dapat dioptimalkan secara khusus.

  4. Sistem Manajemen Risiko yang Baik

    • Desain Stop Loss Dinamis (Adaptasi Volatilitas Berdasarkan ATR) memastikan posisi Stop Loss dapat disesuaikan secara otomatis dengan volatilitas pasar
    • Rasio pengembalian risiko tetap (RRR) = 1:1:2 memberikan ekspektasi keuntungan yang konsisten
    • Strategi hanya membuka posisi jika beberapa kondisi terpenuhi secara bersamaan, secara signifikan mengurangi risiko sinyal yang salah
  5. Analisis Pasar SeluruhStrategi ini mempertimbangkan pergerakan harga (MACD), struktur harga (Kijun-sen) dan konfirmasi volume transaksi (EOM) secara bersamaan, dan menganalisis pasar dari berbagai dimensi, membentuk sistem keputusan perdagangan yang lebih komprehensif.

  6. Fungsi visualisasiStrategi menawarkan banyak pilihan visualisasi, termasuk penandaan sinyal, tampilan garis indikator, dan panel informasi, untuk membantu pedagang secara intuitif memahami dan memantau sinyal perdagangan dan kondisi pasar saat ini.

Risiko Strategis

  1. Risiko sinyal palsuMeskipun strategi menggunakan konfirmasi multi-indikator, sinyal palsu masih mungkin terjadi di pasar yang berfluktuasi tinggi atau di pasar yang berfluktuasi. Khususnya ketika pasar sering berubah arah dalam waktu singkat, konfirmasi multi-indikator dapat menyebabkan terlalu sedikit sinyal perdagangan dan kehilangan sebagian peluang perdagangan.

    • Solusi: Parameter indikator dapat disesuaikan dengan kondisi pasar, mungkin perlu melonggarkan beberapa kondisi atau menyesuaikan sensitivitas MACD dan EOM selama periode fluktuasi tinggi.
  2. Tantangan pengoptimalan parameterStrategi memiliki beberapa parameter yang perlu disesuaikan (parameter MACD, siklus Kijun-sen, panjang EOM, dan lain-lain), pengaturan parameter yang tidak tepat dapat menyebabkan over-fit dengan data historis, dan tidak berfungsi dengan baik dalam lingkungan pasar masa depan.

    • Solusi: Mengadopsi pengujian ke depan dan pengujian stabilitas untuk memastikan parameter tetap efektif dalam berbagai lingkungan pasar; Menghindari optimasi berlebihan, mencari kombinasi parameter yang stabil dalam berbagai kondisi pasar.
  3. Titik geser dan risiko likuiditasDalam perdagangan siklus waktu rendah, terutama untuk pasar yang lebih berfluktuasi seperti cryptocurrency, kemungkinan terjadinya slippage dan masalah likuiditas, yang menyebabkan perbedaan antara harga pelaksanaan aktual dan harga perhitungan strategi.

    • SolusiTermasuk simulasi titik geser dalam pengukuran ulang; Pertimbangkan untuk menambahkan kondisi penyaringan likuiditas dalam strategi; Prioritaskan perdagangan di pasar yang lebih likuid.
  4. Stop Loss Berisiko MenembusDalam pasar yang berfluktuasi cepat, stop loss berdasarkan ATR mungkin tidak dapat menanggapi perubahan harga yang ekstrem, sehingga menyebabkan kerugian yang lebih besar dari yang diharapkan.

    • SolusiPertimbangkan untuk menambahkan mekanisme perlindungan stop-loss tambahan, seperti menyesuaikan ATR secara otomatis dalam kondisi fluktuasi ekstrim atau mengatur batas kerugian maksimum mutlak.
  5. Ketergantungan teknologiStrategi ini sangat bergantung pada indikator-indikator teknis, yang dapat berkinerja buruk dalam situasi pasar yang sangat bergejolak yang disebabkan oleh perubahan fundamental.

    • SolusiPertimbangan: Mengurangi atau menghentikan transaksi sebelum data atau peristiwa ekonomi penting diumumkan; Mempertimbangkan untuk mengintegrasikan filter dasar.

Arah optimasi strategi

  1. Parameter indikator beradaptasi: Strategi saat ini menggunakan parameter indikator yang tetap, mekanisme penyesuaian penyesuaian diri yang dapat dipertimbangkan untuk mewujudkan parameter, secara otomatis mengoptimalkan MACD, Kijun-sen dan parameter EOM sesuai dengan volatilitas pasar atau siklus perdagangan. Ini akan memungkinkan strategi untuk lebih beradaptasi dengan berbagai tahap pasar, meningkatkan stabilitas keseluruhan.

    • Parameter yang dapat disesuaikan secara dinamis berdasarkan tingkat fluktuasi atau intensitas tren dari N siklus terakhir
    • Mempelajari kombinasi parameter yang optimal dalam berbagai kondisi pasar (trend, getaran) dan membangun mekanisme switching
  2. Menambahkan klasifikasi status pasarDengan menambahkan modul identifikasi status pasar, strategi dapat menyesuaikan kondisi perdagangan dan parameter manajemen risiko sesuai dengan apakah pasar saat ini sedang dalam keadaan tren atau bergejolak. Misalnya:

    • Meningkatkan kondisi penyaringan atau mengurangi frekuensi perdagangan di pasar yang bergolak
    • Dalam tren yang jelas, Anda dapat melonggarkan beberapa persyaratan masuk dan memperpanjang waktu memegang posisi.
    • Pertimbangkan untuk menambahkan indikator kekuatan tren seperti ADX untuk membantu mengidentifikasi kondisi pasar
  3. Optimalkan strategi penanggulanganStrategi saat ini menggunakan stop loss yang ditetapkan dalam rasio risiko / keuntungan tetap (RRR) 1: 1.2) dan dapat dipertimbangkan untuk menerapkan mekanisme stop loss yang lebih fleksibel, seperti:

    • Strategi berhenti sebagian: setelah mencapai keuntungan tertentu, pindahlah stop loss ke harga biaya, biarkan sebagian keuntungan tetap berjalan
    • Stop dinamis berdasarkan tingkat teknik (seperti level support/resistance, level Fibonacci)
    • Menggunakan ATR untuk mengatur target stop loss secara dinamis dan secara otomatis menyesuaikan target profit dalam lingkungan yang berfluktuasi
  4. Integrasi model pembelajaran mesinPertimbangan untuk menggunakan teknologi pembelajaran mesin untuk meningkatkan kemampuan prediksi strategi:

    • Analisis pola historis menggunakan algoritma pembelajaran mesin untuk memprediksi probabilitas keberhasilan sinyal
    • Sistem klasifikasi kualitas untuk membangun sinyal perdagangan berdasarkan kinerja historis
    • Menggunakan model pembelajaran mendalam untuk mengidentifikasi pola pasar yang lebih kompleks
  5. Menambahkan filter waktuPenambahan filter waktu dapat menghindari perdagangan pada waktu yang tidak efisien:

    • Analisis keberhasilan transaksi berdasarkan data historis untuk periode waktu yang berbeda
    • Menghentikan perdagangan pada saat volatilitas terlalu rendah atau terlalu tinggi
    • Mempertimbangkan karakteristik waktu perdagangan di pasar yang berbeda, misalnya untuk mengoptimalkan karakteristik perdagangan 24 jam di pasar cryptocurrency

Meringkaskan

Sistem perdagangan integrasi MACD tanpa lag dengan gerakan linier rata-rata adalah strategi perdagangan kuantitatif yang dirancang dengan baik, yang membentuk satu set sistem konfirmasi sinyal perdagangan multi-dimensi dengan mengintegrasikan tiga indikator teknis MACD tanpa lag, Kijun-sen, dan EOM. Strategi ini menggunakan mekanisme konfirmasi ganda yang ketat pada identifikasi titik masuk, menggabungkan stop loss dinamis dan perbandingan pengembalian risiko tetap pada manajemen risiko, untuk mencapai kontrol menyeluruh atas proses perdagangan.

Keunggulan inti dari strategi ini adalah konsep desain yang mengurangi keterbelakangan dan mekanisme kerja sama multi-indikator, yang memungkinkannya untuk menangkap peluang perdagangan probabilitas tinggi di pasar yang berubah dengan cepat. Sementara itu, pengaturan parameter yang dapat disesuaikan sepenuhnya memungkinkan pedagang untuk menyesuaikan secara fleksibel sesuai dengan lingkungan pasar yang berbeda dan preferensi risiko pribadi.

Meskipun ada beberapa risiko potensial dari strategi ini, seperti tantangan pengoptimalan parameter dan risiko sinyal palsu, stabilitas dan adaptasi strategi dapat ditingkatkan lebih lanjut dengan arah optimasi yang disarankan seperti penyesuaian parameter indikator, klasifikasi keadaan pasar, dan integrasi pembelajaran mesin.

Secara keseluruhan, ini adalah sistem perdagangan kuantitatif yang canggih dan terstruktur yang sesuai untuk digunakan oleh pedagang dengan basis analisis teknis tertentu, terutama investor yang mencari sinyal perdagangan berkualitas tinggi daripada perdagangan frekuensi tinggi. Dengan penyesuaian parameter yang masuk akal dan pengoptimalan berkelanjutan, strategi ini berpotensi memberikan kinerja perdagangan yang stabil di berbagai lingkungan pasar.

Kode Sumber Strategi
/*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")