icon icon Home
icon icon Accounts
icon icon Quick start
icon icon Symbols

چگونه حجم معاملات را تحلیل کنیم؟

نویسنده
saman
saman

سامان دانشجوی اقتصاد دانشگاه قم است. او از 4 سال پیش فعالیت خود در بازارهای مالی را با ترید بیت کوین و ارزهای دیجیتال آغاز کرده است و در حال حاضر، به عنوان نویسنده محتوا و پژوهشگر در حوزه ارزهای دیجیتال و فارکس فعالیت می‌کند. پس از تجربه کار در شرکت‌ فاین‌ارز اکنون به عنوان کارشناس محتوا در آرون‌گروپس در حال فعالیت است. با سامان از طریق زیر می‌توانید در ارتباط باشید: saman_academy@aron-groups.com

Author
بازبینی کننده
کارشناس اقتصادی
Author
کارشناس اقتصادی

کارشناس اقتصادی در آرون گروپس.

calendar آخرین بروزرسانی: 2 روز پیش
watch زمان مطالعه 1 دقیقه

_ آشنایی با تحلیل حجم معاملات در بازار های مالی :

حجم معاملات به عنوان یکی از مهمترین شاخص‌ها در بازارهای مالی شناخته می‌شود. این مفهوم به تنهایی قادر است درک عمق بازارها، نیازهای سرمایه‌گذاران و تغییرات قیمت‌ها را در خود جای دهد. در این مقاله، به معنی حجم معاملات، اهمیت آن در بازارهای مالی، عوامل مؤثر بر حجم معاملات و تأثیر آن در تصمیم‌گیری‌های سرمایه‌گذاران پرداخته می‌شود.

چگونه حجم معاملات را تحلیل کنیم؟

_ معنی حجم معاملات :

حجم معاملات، تعداد دارایی‌هایی است که در یک بازه زمانی مشخص بین فروشندگان و خریداران معامله می‌شود. در بازارهای مالی مانند فارکس و کریپتو ، حجم معاملات نشان‌دهنده میزان فعالیت در بازار است. حجم معاملات بالاتر به معنای نقدینگی بیشتر و احتمال حرکت قیمتی بزرگ‌تر است. حجم معاملات پایین‌تر به معنای نقدینگی کمتر و احتمال حرکت قیمتی کوچک‌تر است.

حجم معاملات را می‌توان برای هر دارایی مالی در هر بازه زمانی استفاده کرد. به عنوان مثال، می‌توان حجم معاملات بیت کوین را در یک روز، یک هفته یا یک ماه اندازه‌گیری کرد.

_ اهمیت حجم معاملات :

حجم معاملات یک معیار مهم از فعالیت بازار است. حجم معاملات بالا نشان دهنده این است که تعداد زیادی از معامله گران در حال معامله یک دارایی هستند. این می‌تواند نشانه ای از علاقه زیاد به بازار و احتمال حرکت قیمت باشد.

حجم معاملات همچنین می‌تواند برای تایید روند قیمت استفاده شود. اگر قیمت در حال افزایش باشد و حجم معاملات نیز در حال افزایش باشد، این نشان می دهد که روند صعودی قوی است. اگر قیمت در حال کاهش باشد و حجم معاملات نیز در حال کاهش باشد، این نشان می دهد که روند نزولی قوی است.

_ عوامل مؤثر بر حجم معاملات :

به صورت کلی عوامل موثر بر حجم معاملات را میتوان به دو دسته ی عوامل فاندامنتالی و عوامل تکنیکالی تقسیم کرد که در ادامه به شرح هر یک خواهیم پرداخت:

_ عوامل فاندامنتالی موثر بر حجم معاملات عبارتند از:

1 . خبرهای اقتصادی و سیاسی: اخباری مانند انتشار گزارش های اقتصادی، تصمیمات سیاست پولی و همچنین اخبار سیاسی می توانند بر حجم معاملات تأثیر بگذارند. به عنوان مثال، انتشار گزارش رشد اقتصادی مثبت می تواند منجر به افزایش حجم معاملات در بازارهای سهام شود.

2 . رویدادهای شرکتی: رویدادهای شرکتی مانند انتشار گزارش های مالی، اعلام سود سهام و همچنین ادغام و تملک می توانند بر حجم معاملات تأثیر بگذارند. به عنوان مثال، اعلام سود سهام بالاتر از انتظار می تواند منجر به افزایش حجم معاملات در سهام یک شرکت شود.

3 . عوامل جهانی: عوامل جهانی مانند جنگ، بحران مالی ، شیوع بیماری ها و همچنین تغییرات آب و هوایی می توانند بر حجم معاملات تأثیر بگذارند. به عنوان مثال، جنگ در منطقه ای می تواند منجر به کاهش حجم معاملات در بازارهای جهانی شود؛یا بروز یک بیماری همه گیر میتواند باعث افزایش قیمت کالا های ریسک گریز مانند طلا شود.

4 . ارزش ذاتی دارایی:  اگر ارزش ذاتی یک دارایی بالا باشد، احتمال افزایش حجم معاملات آن نیز بیشتر است. به عنوان مثال، اگر یک شرکت سودآوری بالایی داشته باشد، ارزش ذاتی سهام آن نیز بالا خواهد بود و احتمال افزایش حجم معاملات سهام آن نیز بیشتر است.

5 . سیاست های اقتصادی:  سیاست های اقتصادی نیز می توانند بر حجم معاملات تاثیر بگذارند. به عنوان مثال، اگر یک کشور سیاست های پولی انبساطی را اتخاذ کند، احتمال افزایش حجم معاملات در بازار سهام آن نیز بیشتر است.

6 . عوامل فصلی:  عوامل فصلی مانند تعطیلات نیز می تواند بر حجم معاملات تأثیر بگذارد. به عنوان مثال، حجم معاملات در بازار سهام ایالات متحده معمولاً در ماه های نوامبر و دسامبر که فصل تعطیلات است، افزایش می یابد.

7 . تغییرات در قوانین و مقررات: تغییرات در قوانین و مقررات می توانند بر حجم معاملات تأثیر بگذارند. به عنوان مثال، مقررات جدید می توانند منجر به کاهش حجم معاملات در یک بازار شوند.

در اینجا یک مثال از نحوه تأثیر عوامل فاندامنتالی بر حجم معاملات آورده شده است:

تصور کنید که گزارش رشد اقتصادی ایالات متحده مثبت منتشر می شود. این خبر می تواند منجر به افزایش حجم معاملات در بازار سهام ایالات متحده شود، زیرا سرمایه گذاران انتظار دارند که شرکت های آمریکایی عملکرد بهتری داشته باشند.

چگونه حجم معاملات را تحلیل کنیم؟

_ عوامل تکنیکالی موثر بر حجم معاملات عبارتند از:

1 . روند قیمت: روند قیمت یک دارایی می تواند بر حجم معاملات تأثیر بگذارد. به عنوان مثال، در یک روند صعودی، سرمایه گذاران تمایل بیشتری به خرید دارند، که می تواند منجر به افزایش حجم معاملات شود.

2 . نوسانات قیمت: نوسانات قیمت یک دارایی نیز می تواند بر حجم معاملات تأثیر بگذارد. به عنوان مثال، در یک دوره نوسانات شدید، سرمایه گذاران تمایل بیشتری به معامله دارند، که می تواند منجر به افزایش حجم معاملات شود.

3 . شاخص های تکنیکالی:  شاخص های تکنیکالی نیز می تواند بر حجم معاملات تأثیر بگذارد. به عنوان مثال، اگر یک شاخص تکنیکالی سیگنال خرید دهد، حجم معاملات ممکن است افزایش یابد، زیرا سرمایه گذاران ممکن است بخواهند از سیگنال خرید پیروی کنند.

در اینجا یک مثال از نحوه تأثیر عوامل تکنیکالی بر حجم معاملات آورده شده است:

تصور کنید که قیمت یک سهام در حال افزایش است. این روند می تواند منجر به افزایش حجم معاملات شود، زیرا سرمایه گذاران تمایل بیشتری به خرید سهام دارند.

لازم به ذکر است که حجم معاملات می تواند تحت تأثیر عوامل فاندامنتالی و تکنیکالی متعددی باشد. به همین دلیل، مهم است که معامله گران هنگام تحلیل حجم معاملات، تمام عوامل موثر را در نظر بگیرند.

چگونه حجم معاملات را تحلیل کنیم؟

_ تأثیر حجم معاملات بر تصمیم‌گیری‌های سرمایه‌گذاران:

حجم معاملات یک ابزار تحلیلی قدرتمند است که می تواند به معامله گران کمک کند تا تصمیمات آگاهانه تری بگیرند. حجم معاملات می تواند به معامله گران کمک کند تا موارد زیر را تشخیص دهند:

  • توجه بازار: حجم معاملات بالا نشان دهنده این است که تعداد زیادی از معامله گران در حال معامله یک دارایی هستند. این می تواند نشانه ای از علاقه زیاد به بازار و احتمال حرکت قیمت باشد.
  • روند قیمت: حجم معاملات می تواند به تأیید روند قیمت کمک کند. اگر قیمت در حال افزایش باشد و حجم معاملات نیز در حال افزایش باشد، این نشان می دهد که روند صعودی قوی است. اگر قیمت در حال کاهش باشد و حجم معاملات نیز در حال کاهش باشد، این نشان می دهد که روند نزولی قوی است.
  • تغییر روند: حجم معاملات می تواند به معامله گران در تشخیص تغییر روند کمک کند. اگر قیمت در حال افزایش باشد، اما حجم معاملات کاهش می یابد، این می تواند نشانه ای از کاهش علاقه به بازار و احتمال معکوس شدن روند قیمت باشد.
  • نقطه ورود و خروج: حجم معاملات می تواند به معامله گران در تعیین نقطه ورود و خروج کمک کند. به عنوان مثال، اگر یک معامله گر با تحلیلی که انجام داده در نزدیکی یک محدوده ی حمایتی شاهد افزایش حجم بازار هم باشد، ممکن است وارد معامله شود، زیرا این نشان دهنده افزایش علاقه به بازار است.

حجم معاملات یک ابزار قدرتمند است که می تواند به معامله گران کمک کند تا تصمیمات آگاهانه تری بگیرند. با این حال، حجم معاملات باید در کنار سایر عوامل بازار مانند قیمت و نوسانات در نظر گرفته شود. حجم معاملات بالا به تنهایی نمی تواند تضمین کننده روند قیمت باشد.

چگونه حجم معاملات را تحلیل کنیم؟

_ تعدادی از برترین ابزار های تشخیص حجم معاملات:

در اینجا تعدادی از برترین ابزارها، سایت‌ها و اندیکاتورها برای تشخیص حجم معاملات آورده شده است:

  • ابزارهای ارائه دهنده ی نمودار:

بسیاری از ابزارهای ارائه دهنده ی نمودار مانند TradingView و MetaTrader امکان نمایش حجم معاملات را در نمودارهای قیمت می‌دهند. این ابزارها به معامله‌گران امکان می‌دهند تا حجم معاملات را در کنار قیمت مشاهده کنند و تغییرات را در طول زمان ردیابی کنند.

  • سایت‌های ارائه‌دهنده داده‌های مالی:

سایت‌هایی مانند TradingView ، Investing.com، YahooFinance  ، CoinMarketCap داده‌های حجم معاملات را برای طیف گسترده‌ای از دارایی‌ها ارائه می‌دهند. این سایت‌ها به معامله‌گران امکان می‌دهند تا حجم معاملات را برای دارایی‌های مختلف مقایسه کنند و روندهای کلی را شناسایی کنند.

  • اندیکاتورهای حجم معاملات:

اندیکاتورهای حجم معاملات ابزارهایی هستند که برای اندازه‌گیری و تحلیل حجم معاملات استفاده می‌شوند. برخی از محبوب‌ترین اندیکاتورهای حجم معاملات عبارتند از:

1 . اندیکاتور حجم معاملات (Volume): این اندیکاتور ساده‌ترین اندیکاتور حجم معاملات است که حجم معاملات را به صورت یک خط در کنار قیمت نمایش می‌دهد.

2 . اندیکاتور نسبت حجم (Volume Ratio): این اندیکاتور حجم معاملات را با قیمت مقایسه می‌کند تا ببیند آیا حجم معاملات در حال افزایش یا کاهش است.

3 . اندیکاتور انباشت/توزیع (Accumulation/Distribution): این اندیکاتور حجم معاملات را برای شناسایی روندهای انباشت یا توزیع استفاده می‌کند.

4 . اندیکاتور Money Flow Index (MFI): این اندیکاتور حجم معاملات را برای اندازه‌گیری جریان پول در یک دارایی استفاده می‌کند.

5 . شاخص Chaikin Money Flow: این شاخص از حجم معاملات برای اندازه گیری جریان پول در بازار استفاده می کند.

6 . شاخص On-Balance Volume: این شاخص از حجم معاملات برای اندازه گیری تغییرات در حجم معاملات استفاده می کند.

نحوه کار با ابزارها، سایت‌ها و اندیکاتورهای حجم معاملات به طور کلی ساده است. معمولاً با انتخاب گزینه‌ای در منوی ابزار یا سایت، می‌توانید حجم معاملات را برای دارایی‌های مورد نظر خود مشاهده کنید.

در اینجا یک مثال از نحوه استفاده از ابزارهای حجم معاملات آورده شده است:

فرض کنید یک معامله‌گر در بازار سهام قصد دارد سهام شرکتی را بخرد. معامله‌گر می‌تواند از ابزار حجم معاملات در نمودار قیمت سهام برای بررسی حجم معاملات در طول زمان استفاده کند. اگر حجم معاملات در حال افزایش باشد، این می‌تواند نشانه‌ای از علاقه زیاد به سهام باشد و احتمال افزایش قیمت وجود دارد.

چگونه حجم معاملات را تحلیل کنیم؟

_ حجم معاملات در حمایت و مقاومت :

حجم معاملات در حمایت و مقاومت نقش مهمی در تحلیل تکنیکال بازار ایفا می‌کند. در تحلیل حمایت و مقاومت، ما به دنبال شناسایی سطوح قیمتی هستیم که می‌توانند نقش حمایت یا مقاومت را برای قیمت‌ ایفا کنند.حجم معاملات در این روندها و سطوح می‌تواند به عنوان یک ابزار تأییدی مورد استفاده قرار بگیرد. وقتی قیمت به سطح حمایت نزدیک می‌شود و حجم معاملات نیز افزایش می‌یابد، می‌توانیم از قدرت نسبی خط حمایت صحبت کنیم. این الگو نشان می‌دهد که خریداران یا گاو ها در نزدیکی  سطح حمایت حضور دارند و احتمال برگشت قیمت به سمت بالا وجود دارد.

همینطور وقتی قیمت به سطح مقاومت نزدیک می‌شود و حجم معاملات نیز افزایش می‌یابد، این می‌تواند نشان دهنده قدرت محدوده ی مقاومتی و حضور فروشندگان یا خرس ها در حوالی سطح مقاومتی باشد که باعث افزایش احتمال کاهش قیمت از سطح مقاومتی را بیشتر میکند. به طور کلی، حجم معاملات در سطوح حمایت و مقاومت می‌تواند به عنوان یک عامل عالی برای قدرت و قابلیت ادامه سطوح مورد بررسی قرار گیرد . با این حال، برای اعتبار بیشتر، معیارهای دیگر مانند نمودار قیمت و شاخص‌های تکنیکالی را نیز در نظر بگیرید.

_Volume Spike به چه معناست؟

Volume Spike  به افزایش ناگهانی حجم معاملات در بازار های مالی اشاره دارد. وقتی که حجم معاملات در یک بازه زمانی خاص به طور قابل توجهی بیشتر از میانگین روزانه یا مقادیر گذشته است، آن را به عنوان یک Volume Spike می‌شناسیم. اگر بخواهیم دقیق‌تر باشیم معمولا حجم بالا در چارت‌ها به صورت یک اسپایک دیده می‌شود. برای تعیین محل Volume Spike، کافی است که حجم روزانه را با حجم میانگین مقایسه کنید. چنانچه حجم یک روز ۲ یا ۳ برابر حجم میانگین بود، می‌توان گفت که یک اسپایک رخ داده است. این حجم معامله بالای غیرمعمول می‌تواند نشانه‌ای از یک تغییر بزرگ در روند قیمت باشد. Volume Spike  می‌تواند نشان دهنده تغییرات قدرت و تأثیر سرمایه‌گذاران در بازار باشد. این میزان حجم معاملات معمولاً به عنوان شاخصی از قدرت و اعتبار الگوهای تکنیکالی یا سطوح حمایت و مقاومت دیگر استفاده می‌شود. با این حال، برای ارزیابی Volume Spike  ممکن است نیاز به تحلیل و بررسی دقیق‌تر در سیاست‌ها، خبرها و رویدادهای اقتصادی مرتبط با دارایی مورد نظر باشد تا بتوانیم موضوعیت افزایش حجم را بهتر درک کنیم.

پیشنهاد برای مطالعه بیشتر: بهترین نقطه ورود و خروج

چگونه حجم معاملات را تحلیل کنیم؟

حجم معاملات در بازارهای مالی یکی از مهمترین مفاهیم است که به شما به عنوان  فعال بازار های مالی کمک می‌کند تا با تغییرات بازارها و تأثیر آنها بر سرمایه‌گذاری‌ها آشنا شوید. اهمیت حجم معاملات، عوامل مؤثر بر آن و تأثیر آن بر تصمیم‌گیری‌های سرمایه‌گذاران را باید در نظر گرفت تا بتوانید به بهترین شکل ممکن در بازارهای مالی عمل کنید. 

پیشنهاد می‌کنیم مطالعه کنید: ارزش معاملات چیست؟

calendar شهریور 20, 1402
به این مقاله امتیاز بدهید

Leave a Reply

Your email address will not be published. Required fields are marked *

`; // Select the inner section where the comment should be placed const contentWrapper = cardTemplate.querySelector('.gradient-card-content'); // Move the comment into the template contentWrapper.appendChild(comment); // Add the template to the wrapper wrapper.appendChild(cardTemplate); // Add the constructed wrapper to the comment list commentListWrapper.appendChild(wrapper); }); comments.forEach((comment) => { // Select the comment-body element const commentBody = comment.querySelector('.comment-body'); const meta = comment.querySelector('.comment-meta.commentmetadata'); const reply = comment.querySelector('.reply'); if (commentBody) { // Create a new
with a specific class const newDiv = document.createElement('div'); newDiv.classList.add('custom-wrapper'); // Add the desired class // Append the new
to the comment-body commentBody.appendChild(newDiv); newDiv.appendChild(meta) newDiv.appendChild(reply) } }); -->
نه ممنون
Table of contents
`; const initializeAccordion = () => { const accordionHeaders = document.querySelectorAll(".accordion__header"); accordionHeaders.forEach((item) => { item.addEventListener("mouseup", () => { item.classList.toggle("open"); }); }); }; if (newSingleBlogPost != null || newSingleBlogPost != undefined) { // add table of content after first child in base content const firstChild = baseContent.firstElementChild.firstElementChild.firstElementChild; // Convert the table of content HTML string to a DOM element const tempDiv = document.createElement("div"); tempDiv.innerHTML = tableOfContentHTML; const tableOfContentElement = tempDiv.firstElementChild; if (firstChild) { baseContent.firstElementChild.firstElementChild.insertBefore(tableOfContentElement, firstChild.nextElementSibling); } // Set accordion click after table of content add to DOM initializeAccordion(); // Select all h2 and h3 elements const headings = document.querySelectorAll(".base_content h2, .base_content h3"); // Add data-id attribute to each heading headings.forEach((heading) => { const text = heading.textContent.trim(); const id = text .replace(/\s+/g, "_") .replace(/[^\w\u0600-\u06FF_]/g, "") .toLowerCase(); heading.setAttribute("data-id", id); }); // Create dynamic table of contents const tocWrapper = document.querySelector(".tocWrapper"); tocWrapper.innerHTML = ""; // Clear any existing content let currentH2 = null; // Variable to store the current h2 being processed headings.forEach((heading,index) => { if (heading.tagName === "H2") { // Create a link for h2 headings const link = document.createElement("a"); link.href = `#${heading.getAttribute("data-id")}`; link.textContent = heading.textContent; link.classList.add("h2"); link.classList.add("scroll-tag"); // Create a list item for h2 const listItem = document.createElement("div"); listItem.classList.add("item"); listItem.appendChild(link); // Append the list item for the h2 tocWrapper.appendChild(listItem); // Set the current h2 to this heading currentH2 = listItem; } else if (heading.tagName === "H3" && currentH2) { // Create a link for h3 headings as a subitem of the current h2 const link = document.createElement("a"); link.href = `#${heading.getAttribute("data-id")}`; link.textContent = heading.textContent; link.classList.add("h3"); link.classList.add("scroll-tag"); // Create a subitem for h3 and append it to the current h2 item const subItem = document.createElement("div"); subItem.classList.add("sub-item"); subItem.appendChild(link); // Append the subitem to the current h2's list item currentH2.appendChild(subItem); } }); // Scroll to the section when a TOC item is clicked tocWrapper.addEventListener("click", (e) => { e.preventDefault() if (e.target.tagName === "A") { const targetId = e.target.getAttribute("href").substring(1); const targetElement = document.querySelector(`[data-id="${targetId}"]`); if (targetElement) { // Scroll to the element, but adjust for the header height const targetOffset = targetElement.getBoundingClientRect().top + window.scrollY - 84; window.scrollTo({ top: targetOffset, behavior: "smooth" }); e.preventDefault(); } } }); const tableOfcontent = document.querySelector('.table_of_contents'); const tagleOfContentTitle = tableOfcontent.querySelector('.title span') const translateTableOfContent = () => { const language = getLanguageKey(); if (language === "fa") { tagleOfContentTitle.textContent = "فهرست مطالب"; } else if (language === "ar") { tagleOfContentTitle.textContent = "جدول المحتويات"; } else { tagleOfContentTitle.textContent = "Table of Content"; } }; // فراخوانی تابع ترجمه translateTableOfContent(); // Copy logic // Localized messages for different languages const messages = { en: { initial: "Copy link", copied: "Copied!", }, fa: { initial: "کپی لینک", copied: "کپی شد!", }, ar: { initial: "نسخ الرابط", copied: "تم النسخ!", }, }; // Function to detect language and match messages function getLanguageKey () { const lang = document.documentElement.lang.toLowerCase(); if (lang.includes("fa")) return "fa"; if (lang.includes("ar")) return "ar"; return "en"; }; // Function to update button text based on language const updateButtonText = (button, state = "initial") => { const langKey = getLanguageKey(); button.textContent = messages[langKey]?.[state] || messages.en[state]; }; // Function to change button background color const updateButtonBackgroundColor = (button, color) => { button.style.backgroundColor = color; }; // Initialize button text and background color on page load window.addEventListener("load", () => { const copyButton = document.querySelector(".copy_btn"); updateButtonText(copyButton); updateButtonBackgroundColor(copyButton, "#f9c43e"); // Initial color }); // Add click event listener to copy URL and update button text and color document.querySelector(".copy_btn").addEventListener("click", function () { const copyButton = this; const currentUrl = window.location.href; navigator.clipboard .writeText(currentUrl) .then(() => { updateButtonText(copyButton, "copied"); updateButtonBackgroundColor(copyButton, "#cacaca"); // Change color on click setTimeout(() => { updateButtonBackgroundColor(copyButton, "#f9c43e"); // Reset color after 3 seconds updateButtonText(copyButton); // Reset text after 3 seconds }, 3000); // 3-second timeout }) .catch((err) => { console.error("Failed to copy:", err); }); }); // rate popup click function /** * Initialize popup functionality for rate popups. * @param {HTMLElement} trigger - Element that triggers the popup. * @param {HTMLElement} popup - Popup element to display. * @param {HTMLElement} overlay - The overlay element. * @param {HTMLElement} closeButton - Button to close the popup. */ function initRatePopup(trigger, popup, overlay, closeButton) { // Show the popup when the trigger is clicked if (trigger) { trigger.addEventListener("click", () => { setTimeout(()=>{ openModal(popup, overlay); },1000) }); } // Add event listener to the overlay for closing the modal overlay.addEventListener("click", () => closeModal(popup, overlay)); // Hide the popup when the close button is clicked if (closeButton) { closeButton.addEventListener("click", () => { closeModal(popup, overlay); }); } } // Initialize the rate popup const rateStarsWrapper = document.querySelectorAll(".rate_stars_wrapper"); const ratePopup = document.querySelector(".rate_popup"); const closeRatePopupBtn = document.querySelector(".no_thanks"); rateStarsWrapper.forEach((element)=>{ initRatePopup(element, ratePopup, overlay, closeRatePopupBtn); }) window.addEventListener("load", () => { // Bonus popup functions const popup = document.querySelector(".bonus_popup"); if (!popup) return; // Exit if popup doesn't exist let isPopupShown = false; let hasScrolled = false; // Listener for scroll event const handleScroll = () => { if (isPopupShown || hasScrolled) return; // Prevent multiple triggers hasScrolled = true; setTimeout(() => { popup.classList.add("show"); isPopupShown = true; // Remove the event listener after showing the popup window.removeEventListener("scroll", handleScroll); }, 0); }; window.addEventListener("scroll", handleScroll); // Close popup functionality const closeIcon = popup.querySelector(".close_icon"); if (closeIcon) { closeIcon.addEventListener("click", () => { popup.classList.remove("show"); popup.classList.add("hide"); // Remove the hide class after animation completes popup.addEventListener( "transitionend", () => { popup.classList.remove("hide"); }, { once: true } ); }); } // Suggested Article Popup Logic const suggestedPopup = document.querySelector(".suggested_article_popup"); if (suggestedPopup) { const timeout = parseInt(suggestedPopup.getAttribute("data-timeout"), 10) || 0; setTimeout(() => { suggestedPopup.classList.add("show"); const closeSuggestedIcon = suggestedPopup.querySelector(".close_btn_wrapper"); if (closeSuggestedIcon) { closeSuggestedIcon.addEventListener("click", () => { suggestedPopup.classList.remove("show"); suggestedPopup.classList.add("hide"); suggestedPopup.addEventListener( "transitionend", () => { suggestedPopup.classList.remove("hide"); }, { once: true } ); }); } }, timeout); } }); } -->