این اندیکاتور با نام “Histogram Bid and Ask” یک ابزار بصری نموداری است که تغییرات لحظهای قیمتهای خرید و فروش (Bid/Ask) یا سایر جفتهای قیمتی مانند High/Low و Open/Close را در قالب خطوط هیستوگرام روی نمودار نمایش میدهد. برخلاف هیستوگرامهای سنتی که از بافرهای اندیکاتور استفاده میکنند، این ابزار هوشمندانه با رسم اشیاء گرافیکی از نوع OBJ_TREND کار میکند و هر بار که قیمت جدیدی در همان کندل جاری دریافت میشود، یک خط افقی جدید در سمت راست (برای قیمت Ask/High/Close به رنگ قرمز) یا چپ (برای قیمت Bid/Low/Open به رنگ آبی) زمان کندل ترسیم میکند و با جابجایی تدریجی این خطوط به ازای هر تیک جدید، تراکم و توزیع قیمتها را در طول شکلگیری کندل به تصویر میکشد. با شروع کندل جدید، تمام خطوط هیستوگرام کندل قبلی به رنگهای روشنتر (مرجانی و آبی آسمانی) تغییر یافته و در موقعیت خود ثابت میشوند تا معاملهگر بتواند الگوی توزیع قیمتها در کندلهای گذشته را تحلیل کرده و دید عمیقتری نسبت به رفتار قیمت در بازههای زمانی مختلف به دست آورد.
این اندیکاتور در تابع OnCalculate و بر اساس انتخاب کاربر از میان سه حالت شمارشی hPrice (شامل Bid/Ask، High/Low و Open/Close) عمل میکند. در هر تیک جدید، تابع DrawHistogram فراخوانی شده و یک خط روند (OBJ_TREND) افقی در سطح قیمت فعلی ترسیم میکند. برای قیمتهای صعودی (Ask، High یا Close)، خطوط با رنگ قرمز در سمت راست نقطه شروع کندل رسم میشوند و برای قیمتهای نزولی (Bid، Low یا Open)، خطوط با رنگ آبی در سمت چپ کندل قرار میگیرند. هر خط جدید به اندازه ثابت HSIZE (معادل ۱۰ واحد زمانی) از خط قبلی فاصله میگیرد و شمارنده داخلی که در فیلد متنی هر شیء ذخیره میشود، این فاصلهگذاری تصاعدی را کنترل میکند. به این ترتیب، با افزایش تعداد تیکها، هیستوگرام متراکمتری از سطوح قیمتی بازدیدشده شکل میگیرد و معاملهگر میتواند چگالی نسبی قیمتهای معاملهشده را در طول عمر کندل مشاهده کند.
با بسته شدن کندل و شروع کندل جدید، بخش دوم کد در شرط if(time[0]>prevTimeBar) فعال میشود و تمام اشیاء هیستوگرام کندل قبلی را با تغییر رنگ به مرجانی روشن (برای خطوط قرمز) و آبی آسمانی (برای خطوط آبی) در موقعیت خود تثبیت میکند. این مکانیزم باعث میشود کندلهای گذشته هیستوگرام دائمی از سطوح قیمتی بازدیدشده داشته باشند و کندل جاری بهصورت زنده در حال تکامل باشد. این اندیکاتور برای تحلیلهای مبتنی بر جریان سفارشات (Order Flow) و بررسی رفتار قیمت در تایمفریمهای پایین بسیار مناسب است. معاملهگران میتوانند با مشاهده تراکم خطوط Bid و Ask، سطوح حمایت و مقاومت دینامیک را شناسایی کنند، رد قیمت از سطوح مهم را تشخیص دهند و الگوهای جذب سفارشات (Absorption) یا اسپایکهای ناگهانی را تحلیل کنند. همچنین حالت High/Low برای تشخیص رِنج واقعی نوسان کندل و حالت Open/Close برای مقایسه قدرت خریداران و فروشندگان در باز و بسته شدن قیمتها کاربرد دارد و میتواند به عنوان ابزاری مکمل در کنار پرایس اکشن و حجم معاملات استفاده شود.
تنظیمات اندیکاتور Histogram Bid and Ask
تنظیمات این اندیکاتور بسیار ساده و مینیمال طراحی شده و تنها شامل یک پارامتر ورودی اصلی و چند ثابت تعریفشده در کد است که در ادامه بهصورت آیتمبندی شده توضیح داده میشوند:
تنظیمات اصلی (قابل تغییر توسط کاربر در پنجره Inputs)
histogram (پیشفرض: bid_and_ask)
این پارامتر از نوع شمارشی (enum) بوده و تعیین میکند که هیستوگرام بر اساس کدام جفت قیمتی رسم شود. سه گزینه برای انتخاب وجود دارد:
bid_and_ask: در این حالت، هیستوگرام بر اساس قیمتهای لحظهای خرید (Bid) و فروش (Ask) که از تابع SymbolInfoTick دریافت میشود رسم میگردد. خطوط قرمز در سمت راست کندل، قیمتهای Ask و خطوط آبی در سمت چپ کندل، قیمتهای Bid را در هر تیک نمایش میدهند. این گزینه برای مشاهده اسپرد لحظهای، تراکم سفارشات در سطوح مختلف و تحلیل رفتار قیمت در تایمفریمهای بسیار پایین (مانند تیک یا ثانیهای) ایدهآل است.
high_and_low: در این حالت، هیستوگرام بر اساس بالاترین (High) و پایینترین (Low) قیمت کندل جاری رسم میشود. با هر تغییر در سقف یا کف کندل، خط جدیدی به هیستوگرام اضافه میشود که روند گسترش دامنه نوسان کندل را نشان میدهد. این گزینه برای تحلیل نحوه شکلگیری رِنج کندل و شناسایی سطوحی که قیمت تمایل به توقف یا برگشت داشته مناسب است.
open_and_close: در این حالت، هیستوگرام بر اساس قیمت باز شدن (Open) و قیمت لحظهای بسته شدن (Close) کندل رسم میشود. خطوط آبی سمت چپ نمایانگر قیمت ثابت Open کندل و خطوط قرمز سمت راست نمایانگر نوسانات قیمت Close در طول شکلگیری کندل هستند. این گزینه برای مقایسه بصری قدرت خریداران و فروشندگان نسبت به قیمت آغازین و تشخیص جهتگیری تدریجی کندل بسیار کاربردی است.
تنظیمات داخلی (ثابتهای تعریفشده در کد – برای تغییر نیاز به ویرایش سورس کد است)
HSIZE (پیشفرض: 10) : این ثابت، مقیاس افقی نمودار و فاصلهگذاری بین خطوط هیستوگرام را بر حسب واحدهای زمانی (معادل دقیقه در تایمفریمهای استاندارد) تعیین میکند. هر خط جدید به اندازه HSIZE * شمارنده از مبدأ کندل فاصله میگیرد. مقدار ۱۰ باعث میشود خط اول ۱۰ واحد، خط دوم ۲۰ واحد و الی آخر از مرکز کندل دور شوند. کاهش این عدد (مثلاً به ۵) باعث فشردهتر شدن خطوط و نمایش تیکهای بیشتر در فضای محدود میشود و افزایش آن (مثلاً به ۲۰) خطوط را بازتر کرده و برای تایمفریمهای بالاتر با تعداد تیک کمتر مناسبتر است.
WIDTH (پیشفرض: 2) : ضخامت خطوط هیستوگرام را بر حسب پیکسل مشخص میکند. مقدار ۲ خطوطی با ضخامت متوسط ایجاد میکند که هم قابل رؤیت هستند و هم از تداخل بیش از حد با یکدیگر جلوگیری میکنند. در بازارهای پرتیک با تراکم بالای خطوط، کاهش این مقدار به ۱ میتواند خوانایی نمودار را حفظ کند. برای نمایش واضحتر در تایمفریمهای بالاتر یا اسکرینهای با وضوح پایین، میتوان آن را به ۳ یا ۴ افزایش داد. این پارامتر از طریق ماکروی ObjSet1 به تمام اشیاء گرافیکی اعمال میشود.
نکته مهم
از آنجایی که HSIZE و WIDTH بهصورت ثابت در کد تعریف شدهاند و در بخش input قرار ندارند، برای تغییر آنها باید فایل منبع اندیکاتور (mq5.) را ویرایش و مجدداً کامپایل کرد. در صورت تمایل به تنظیم آسانتر این مقادیر، میتوان آنها را به بخش input کد منتقل نمود تا مانند پارامتر histogram از طریق پنجره تنظیمات اندیکاتور قابل تغییر باشند.







