
শূন্য-ল্যাগ MACD এবং ক্লাউড গ্রাফের সমতুল্য গতিশীলতা সমন্বিত ট্রেডিং সিস্টেম হল একটি কোয়ান্টাম ট্রেডিং কৌশল যা দ্রুত গতির বাজারের পরিবেশের জন্য বিশেষভাবে ডিজাইন করা হয়েছে। এই কৌশলটি তিনটি ভিন্ন বৈশিষ্ট্যযুক্ত প্রযুক্তিগত সূচককে চতুরভাবে একত্রিত করেঃ শূন্য-ল্যাগ MACD ((Zero Lag MACD), প্রথম দৃষ্টিতে সমতাযুক্ত গ্রাফের বেঞ্চমার্ক ((Kijun-sen) এবং মোবাইলের সুবিধাজনকতা সূচক ((Ease of Movement, EOM) । এই তিনটি সূচক একে অপরের সাথে সমন্বয় করে কাজ করে, ট্রেডিং সিগন্যাল নিশ্চিত করার সময় একাধিক স্তরের প্রমাণ প্রদান করে, যা সিগন্যালের গুণমান এবং নির্ভরযোগ্যতা উল্লেখযোগ্যভাবে উন্নত করে। এই কৌশলটি বিশেষত ক্রিপ্টোকারেন্সির মতো বড় বাজারের জন্য উপযুক্ত, এবং নিম্ন সময়ের সময়কালের মধ্যে ভাল কাজ করে (যেমন 5 মিনিট) ।
এই কৌশলটির মূল নকশা ধারণাটি হ’ল একাধিক শর্ত একসাথে পূরণ হলেই ট্রেডিং সিগন্যাল ট্রিগার করা হয়, যার ফলে নিম্নমানের ব্যবসায়ের সুযোগগুলি ফিল্টার করা হয়, ভুল সংকেত হ্রাস করা হয় এবং গতিশীল স্টপ লস এবং স্থির লাভ-ক্ষতির অনুপাতের মাধ্যমে স্থিতিশীল ঝুঁকি ব্যবস্থাপনা করা হয়। প্যারামিটার অপ্টিমাইজেশন এবং শর্তাদির মাধ্যমে এই কৌশলটি বিভিন্ন বাজারের পরিবেশের সাথে খাপ খাইয়ে নিতে সক্ষম, ব্যবসায়ীদের জন্য উচ্চ সম্ভাব্যতার ব্যবসায়ের সুযোগ সরবরাহ করে।
জিরো-ল্যাগড MACD এবং ক্লাউডগ্রাফের সমান্তরাল গতির সমন্বিত ট্রেডিং সিস্টেম তিনটি মূল সূচকের উপর ভিত্তি করে কাজ করেঃ
শূন্য বিলম্বিত MACD[সম্পাদনা]ঐতিহ্যগত MACD এর তুলনায়, জিরো-ল্যাগড MACD একটি বিশেষ গণনা পদ্ধতির মাধ্যমে সংকেত বিলম্বকে হ্রাস করে এবং প্রবণতা পাল্টানোর বিন্দুতে সংবেদনশীলতা বাড়ায়। এই সূচকটি কৌশলটিতে সঠিক গতিশীল পরিবর্তনগুলি ধরার জন্য ব্যবহৃত হয়, যার গণনা প্রক্রিয়াটি অন্তর্ভুক্তঃ
zerolagEMA = (2 * ma1) - ma2এবংzerolagslowMA = (2 * mas1) - mas2প্রথম সমতল মানচিত্র বেঞ্চলাইন ((Kijun-sen): একটি গতিশীল সমর্থন / প্রতিরোধ এবং প্রবণতা ফিল্টার হিসাবে, কিজুন-সেন লাইনটি বাজারের প্রভাবশালী দিকনির্দেশ নিশ্চিত করার জন্য ব্যবহৃত হয়। এর গণনাটি ডং চিয়ান চ্যানেল নীতির উপর ভিত্তি করে, নির্দিষ্ট সময়ের মধ্যে সর্বোচ্চ এবং সর্বনিম্ন দামের গড় গ্রহণ করেঃ
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))মোবাইল ব্যবহারের সুবিধার সূচক (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)ঝুঁকি ব্যবস্থাপনার ক্ষেত্রে, কৌশলটি এটিআর-ভিত্তিক গতিশীল স্টপ লস ব্যবহার করে, বর্তমান এটিআর-এর ২.৫ গুণ স্টপ লস দূরত্ব এবং একটি স্থির ঝুঁকি-ফেরতের অনুপাত ১ঃ১ঃ২ সেট করে, যাতে প্রতিটি লেনদেনের জন্য যুক্তিসঙ্গত মুনাফা লক্ষ্য থাকে।
একাধিক প্রমাণীকরণ সিস্টেমট্রেডিং কৌশলঃ ট্রেডিং কৌশলটি কার্যকরভাবে মিথ্যা সংকেতগুলিকে ফিল্টার করতে সক্ষম হয়, কেবলমাত্র যখন উচ্চ সম্ভাব্যতার ব্যবসায়ের সুযোগ উপস্থিত হয় তখনই প্রবেশ করে, যা ব্যবসায়ের সাফল্যের হারকে উল্লেখযোগ্যভাবে বাড়িয়ে তোলে।
পিছিয়ে পড়া কমানোজিরো-ল্যাগড এমএসিডি প্রচলিত এমএসিডির পরিবর্তে ব্যবহার করা হয়েছে, যা বাজারের টার্নপয়েন্টগুলিকে আরও তাড়াতাড়ি ধরতে সক্ষম করে, যা ঐতিহ্যগত সূচকগুলির মধ্যে প্রচলিত সমস্যাগুলি হ্রাস করে এবং ব্যবসায়ীদের আদর্শ প্রবেশের কাছাকাছি নিয়ে আসে।
অভিযোজনযোগ্য: কৌশলটির সমস্ত প্যারামিটারগুলি বিভিন্ন বাজার পরিবেশ, লেনদেনের জাত এবং সময়কালের জন্য কাস্টমাইজ করা যায়, যা এটিকে অত্যন্ত অভিযোজ্য করে তোলে। মূল সূচকগুলির মধ্যে রয়েছে MACD চক্রের প্যারামিটার, কিজুন-সেন চক্র, ইওএম দৈর্ঘ্য ইত্যাদি।
ভাল ঝুঁকি ব্যবস্থাপনা:
সম্পূর্ণ বাজার বিশ্লেষণকৌশলটি মূল্যের গতিশীলতা (এমএসিডি), মূল্যের কাঠামো (কিজুন-সেন) এবং লেনদেনের পরিমাণ নিশ্চিতকরণ (ইওএম) বিবেচনা করে এবং একাধিক মাত্রা থেকে বাজার বিশ্লেষণ করে একটি আরও বিস্তৃত লেনদেনের সিদ্ধান্ত গ্রহণের ব্যবস্থা গঠন করে।
ভিজ্যুয়ালাইজেশনকৌশলঃ ট্রেডারদের ট্রেডিং সিগন্যাল এবং বর্তমান বাজারের অবস্থা বুঝতে এবং পর্যবেক্ষণ করতে সহায়তা করার জন্য কৌশলগুলি সংকেত চিহ্নিতকরণ, সূচক লাইন প্রদর্শন এবং তথ্য প্যানেল সহ প্রচুর ভিজ্যুয়ালাইজেশন বিকল্প সরবরাহ করে।
ভুল সংকেতের ঝুঁকিযদিও কৌশলটি একাধিক সূচক নিশ্চিতকরণ ব্যবহার করে, তবে উচ্চতর ওঠানামা বা বাজার পুনরুদ্ধারের সময় মিথ্যা সংকেত দেখা দিতে পারে। বিশেষত যখন বাজারগুলি স্বল্প সময়ের মধ্যে ঘন ঘন দিক পরিবর্তন করে, একাধিক সূচকের নিশ্চিতকরণ কম ট্রেডিং সিগন্যালের কারণ হতে পারে এবং কিছু ব্যবসায়ের সুযোগ মিস করতে পারে।
প্যারামিটার অপ্টিমাইজেশান চ্যালেঞ্জকৌশলটিতে বেশ কয়েকটি প্যারামিটার রয়েছে যা সামঞ্জস্য করতে হবে (ম্যাকড প্যারামিটার, কিজুন-সেন চক্র, ইওএম দৈর্ঘ্য ইত্যাদি) এবং ভুল প্যারামিটার সেটগুলি অতীতের ডেটার সাথে অতিরিক্ত মিলিত হতে পারে, যা ভবিষ্যতের বাজারের পরিস্থিতিতে খারাপভাবে কাজ করবে।
স্লাইড পয়েন্ট এবং তরলতা ঝুঁকিনিম্ন সময়ের চক্রের লেনদেনের ক্ষেত্রে, বিশেষত ক্রিপ্টোকারেন্সির মতো বাজারের ক্ষেত্রে, স্লাইডিং এবং তরলতার সমস্যা হতে পারে, যার ফলে প্রকৃত কার্যকর মূল্য এবং কৌশলগতভাবে গণনা করা মূল্যের মধ্যে পার্থক্য দেখা দিতে পারে।
স্টপ লস দ্বারা আঘাত করা ঝুঁকি: দ্রুত অস্থির বাজারে, এটিআর-ভিত্তিক স্টপ লস চরম মূল্য পরিবর্তনের সাথে মোকাবিলা করতে অক্ষম হতে পারে, যার ফলে প্রকৃত ক্ষতির পরিমাণ প্রত্যাশার চেয়ে বেশি হতে পারে।
প্রযুক্তি নির্ভরতা: কৌশলটি প্রযুক্তিগত সূচকগুলির উপর অত্যন্ত নির্ভরশীল এবং মৌলিক পরিবর্তনের ফলে বাজারের তীব্র ওঠানামা হলে এটি দুর্বল হতে পারে।
সূচক প্যারামিটার স্বনির্ধারিত: বর্তমান কৌশলটি স্থির সূচক প্যারামিটার ব্যবহার করে, প্যারামিটারগুলির স্ব-অনুকূলিতকরণ ব্যবস্থা বাস্তবায়নের কথা বিবেচনা করা যেতে পারে, বাজারের অস্থিরতা বা ট্রেডিং চক্রের উপর নির্ভর করে স্বয়ংক্রিয়ভাবে MACD, কিজুন-সেন এবং EOM এর প্যারামিটারগুলি অপ্টিমাইজ করা যায়। এটি কৌশলটিকে বিভিন্ন বাজারের পর্যায়ে আরও ভালভাবে মানিয়ে নিতে এবং সামগ্রিক স্থায়িত্ব বাড়িয়ে তুলতে সক্ষম করবে।
বাজার অবস্থার শ্রেণিবিন্যাসমার্কেট স্ট্যাটাস আইডেন্টিফিকেশন মডিউল যোগ করে, কৌশলটি ট্রেডিং শর্তাবলী এবং ঝুঁকি ব্যবস্থাপনা প্যারামিটারগুলিকে সামঞ্জস্য করতে পারে যেহেতু বর্তমান বাজারটি ট্রেন্ডিং বা অস্থির অবস্থায় রয়েছে। উদাহরণস্বরূপঃ
স্ট্রোক প্রতিরোধ কৌশল অপ্টিমাইজ করুন: বর্তমান কৌশলটি স্থির রিস্ক-রিটার্ন অনুপাত ব্যবহার করে (১ঃ১ঃ২) স্টপ সেট করুন, আরও নমনীয় স্টপ ব্যবস্থা বাস্তবায়নের জন্য বিবেচনা করা যেতে পারে, যেমনঃ
মেশিন লার্নিং মডেল ইন্টিগ্রেশন: মেশিন লার্নিং প্রযুক্তি ব্যবহার করে কৌশলগুলির পূর্বাভাস দেওয়ার ক্ষমতা বাড়ানোর কথা ভাবুন:
সময় ফিল্টার যোগ করুনমার্কেট বিভিন্ন সময়ে ভিন্নভাবে আচরণ করতে পারে, এবং সময় ফিল্টার যুক্ত করা হয় যাতে অকার্যকর সময়ে লেনদেন করা যায় না।
শূন্য-বিরতিযুক্ত MACD এবং ক্লাউডগ্রাফের সমান্তরাল গতির সমন্বিত ট্রেডিং সিস্টেমটি একটি সুনির্দিষ্টভাবে পরিকল্পিত পরিমাণগত ট্রেডিং কৌশল যা শূন্য-বিরতিযুক্ত MACD, কিজুন-সেন এবং ইওএম এর তিনটি প্রযুক্তিগত সূচককে একত্রিত করে একটি বহুমাত্রিক ট্রেডিং সিগন্যাল নিশ্চিতকরণ সিস্টেম গঠন করে। এই কৌশলটি প্রবেশের পয়েন্ট সনাক্তকরণে কঠোর একাধিক নিশ্চিতকরণ প্রক্রিয়া গ্রহণ করে, ঝুঁকি পরিচালনার ক্ষেত্রে গতিশীল স্টপ লস এবং স্থির ঝুঁকি রিটার্নের অনুপাতকে একত্রিত করে, ট্রেডিং প্রক্রিয়াটির পুরো দিকের নিয়ন্ত্রণ অর্জন করে।
কৌশলটির মূল সুবিধা হ’ল এটির পিছিয়ে পড়া নকশার ধারণাগুলি হ্রাস করা এবং একাধিক সূচক একসাথে কাজ করার প্রক্রিয়া যা এটিকে দ্রুত পরিবর্তিত বাজারে উচ্চ-সম্ভাব্যতার ব্যবসায়ের সুযোগগুলি ধরতে সক্ষম করে। সম্পূর্ণরূপে কাস্টমাইজযোগ্য প্যারামিটার সেটিংগুলি ব্যবসায়ীদের বিভিন্ন বাজার পরিবেশ এবং ব্যক্তিগত ঝুঁকি পছন্দ অনুসারে নমনীয়ভাবে সামঞ্জস্য করতে দেয়।
যদিও এই কৌশলটির কিছু সম্ভাব্য ঝুঁকি রয়েছে, যেমন প্যারামিটার অপ্টিমাইজেশান চ্যালেঞ্জ এবং মিথ্যা সংকেত ঝুঁকি, তবে সুপারিশকৃত অপ্টিমাইজেশান দিকনির্দেশগুলি যেমন সূচক প্যারামিটার স্ব-অনুকূলিতকরণ, বাজার অবস্থা শ্রেণিবদ্ধকরণ এবং মেশিন লার্নিং ইন্টিগ্রেশন ইত্যাদির মাধ্যমে কৌশলটির স্থায়িত্ব এবং অভিযোজনযোগ্যতা আরও বাড়ানো যেতে পারে।
সামগ্রিকভাবে, এটি একটি ধারণাগতভাবে উন্নত, কাঠামোগত পরিমাণগত ট্রেডিং সিস্টেম যা প্রযুক্তিগত বিশ্লেষণের একটি নির্দিষ্ট ভিত্তিযুক্ত ব্যবসায়ীদের জন্য উপযুক্ত, বিশেষত বিনিয়োগকারীরা যারা উচ্চমানের ট্রেডিং সিগন্যালের চেয়ে উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের সন্ধান করছেন। যুক্তিসঙ্গত পরামিতি সমন্বয় এবং ক্রমাগত অপ্টিমাইজেশনের মাধ্যমে, কৌশলটি বিভিন্ন বাজারের পরিবেশে স্থিতিশীল ট্রেডিং পারফরম্যান্স সরবরাহ করার সম্ভাবনা রয়েছে।
/*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")