پول هوشمند

استراتژی معاملاتی پول هوشمند Smart Money Concept Lux Algo

admin delta
11 اسفند 1401

استراتژی معاملاتی پول هوشمند  Smart Money Concept Lux Algo یک استراتژی فوق العاده قوی برای ترید با شناخت پول هوشمند است که در این مقاله از دلتا کالج به بررسی آن خواهیم پرداخت.

پول هوشمند در فارکس چیست؟

برای استفاده از استراتژی معاملاتی پول هوشمند ابتدا باید با مفهوم آن آشنا شوید. در سال‌های گذشته با پیدایش ابزارها و پلتفرم‌های معاملاتی جدید توجه به بازارهای مالی و سرمایه‌گذاری در این بازارها افزایش یافته است همچنین حجم معاملات و سرمایه‌گذاری بازیگران اصلی بازارهای مالی مانند بانک‌ها و مؤسسات مالی نیز  به نوسانات بازار دامن زده است.

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

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

استراتژی پول هوشمند

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

مراحل اصلی رفتار سرمایه‌گذاران اصلی بازار

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

1- مرحله خاموشی

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

2- مرحله آگاهی

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

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

3- مرحله بی‌قراری و خروج از بازار و افزایش قیمت

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

4- مرحله توزیع و کاهش قیمت

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

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

اندیکاتور پول هوشمند  لوکس آلگو

در این مقاله از وبلاگ دلتا کالج به اندیکاتور پرطرفدار و همه کاره لوکس آلگو اسمارت مانی (Smart money LuxAlgo) خواهیم پرداخت  برای این که درک بهتری از این اندیکاتور داشته باشید پیشنهاد می‌کنیم ابتدا مقاله گذشته مربوط به استراتژی معاملاتی پول هوشمند  را مطالعه نمایید.

این اندیکاتور همه کاره  که در ادامه به مفاهیم و آموزش کامل نحوه استفاده از آن می‌پردازیم بازار را در زمان‌های واقعی ( نوسانات BOS و CHoCH ) بلوک‌های سفارش ، نقاط و محدوده‌های پرمیوم (Premium) و دیسکانت (Discount ) ، بیشترین (high price)  و کمترین (Low Price) قیمت و بسیاری از موارد دیگر را که برای شناسایی ورود و خروج پول هوشمند نیاز است را به صورت دقیق و محاسبه شده به شما نشان می‌دهد این سطوح برای معامله‌گرانی که از استراتژی‌های متداول پرایس اکشن استفاده می‌کنند نیز دارای اهمیت بسیاری است . در بسیاری از  مقالات منتشر شده این اندیکاتور را یک اندیکاتور پرایس اکشن معرفی کرده‌اند.

همچنین این اندیکاتور به شما ساختارهای  سویینگ  را نیز نمایش  می‌دهد شما می‌توانید در مقاله “سویینگ ترید چیست ” که در دلتا کالج قرار داده شده است  در این باره بیشتر بدانید.

نحوه استفاده و فعال کردن اندیکاتور در Trading View

برای این که شما بتوانید این اندیکاتور را فعال کنید  ابتدا باید در وب‌سایت TradingView  به آدرس https://www.tradingview.com  ثبت نام کنید راهنمایی  مربوط به نحوه ثبت نام در این وب‌سایت در  مقاله آموزش مقدماتی استفاده از وب‌سایت trading View  قرار گرفته است

تنظیمات در تریدینگ ویو
  • همانند تصویر موارد زیر را به ترتیب انجام دهید  :
  • پس از ورود به وب‌سایت تریدیگ ویو  در بخش چارت بر روی گزینه Indicators  کلیک نمایید
  • در قسمت سرچ اندیکاتورها Smart money concepts  را سرچ کنید
  • اندیکاتور smart money concepts [LuxAlgo] را انتخاب کنید

امکانات اندیکاتور smart money concept Luxalgo

این اندیکاتور شامل ویژگی‌های مربوط به SMC  ( شامل مفاهیم تحلیل تکنیکال کلاسیک ، عرضه و تقاضا ، الگوهای قیمت ، سطوح حمایت و مقاومت ) است که در زیر به آن اشاره می‌کنیم :

  • نمایش کلیه نوسانات داخلی و خارجی و سویینگ بازار  به صورت لحظه‌ای (Full Internal &Swing Market Structure)
  • ساختار شکست قیمت (Break of structure (BOS))
  • تغییر ماهیت بازار (Change of Character (CHoCH)
  • سفارش‌های بلوکی صعودی و نزولی
  • سطوح بالا و پایین قیمت (High and Low )
  • تشخیص شکاف‌های قیمتی ( گپ )
  • نمایش بالاترین و پایین‌ترین قیمت  در گذشته (Previous Highs and lows)
  • سطوح و  پریمیوم و دیسکانت (Premium and Discount zones as range)
  • سطوح حمایت و مقاومت (Support and Resistance Level )
  • سطوح پیوت (Pivot Point Level )

راهنمای تنظیمات اندیکاتور Smart Money Concepts LuxAlgo

برای  ورود به تنظیمات اندیکاتور  معمولاً پس از انتخاب اندیکاتور این تنظیمات برای شما نمایش داده می‌شود اما درصورتی که صفحه مربوط به تنظیمات را بسته باشید همانند تصویر زیر می‌توانید صفحه تنظیمات را باز کنید

راهنمای تنظیمات

در قسمت بالا سمت چپ چارت نام اندیکاتور  مشخص است (Smart Money Concepts [LuxAlgo])

با کلیک بر روی نام اندیکاتور کلیدهای مربوط به این اندیکاتور نمایش داده می‌شود  که یکی از این کلیدها مربوط به بخش تنظیمات اندیکاتور خواهد بود  درصورتی که موس خورد را بر روی هر یک از این نمادها ببرید گزینه setting  را مشاهده خواهید کرد.

تنظیمات mode

Mode

این بخش به شما امکان می‌دهد که بتوانید تاریخچه گذشته اندیکاتور و یا  حال را انتخاب کنید به عبارت دیگر شما با انتخاب این بخش به عنوان Present  داده‌های اخیر را می‌توانید مشاهده کنید و با انتخاب گزینه Historical  که به صورت پیش فرض  نیز انتخاب شده است شما به داده‌های گذشته اندیکاتور دسترسی خواهید داشت.

تنظیمات present mode

present mode

تنظیمات هیستوری مود

historical mode

در این بخش شما می‌توانید استیل‌های متفاوتی برای نمایش اندیکاتور انتخاب کنید با انتخاب گزینه Colored  که به صورت پیش فرض انتخاب شده است شما  بخش‌های مختلف اندیکاتور را با چندین رنگ مشاهده خواهید کرد اما با انتخاب گزینه Monochrome  شما بخش‌های مختلف اندیکتور را به صورت تک رنگ مشاهده خواهید کرد.

تنظیمات style

Monochrome Style

تنظیمات color mode

Color Candles

با انتخاب این گزینه نمایش شمع‌ها (Candles ) در چارت به صورت سویینگ در خواهد آمد.

در این بخش ساختارهای داخلی (internal Structure)  های BOS  و CHoCH را به صورت خط چین و همچنین  به صورت برچسب (Labels)  نمایش می‌دهد .

در این بخش شما می‌توانید استراکچرها  را در بازار صعودی (Bullish Structure)  و همچنین بازار نزولی (BearishStructure)  را   بر اساس پارامترها مختلف (BOS , CHoCH , ALL)  همراه با رنگ بندی‌های مختلف تنظیم کنید به صورت پیش فرز رنگ سبز به معنی بازار صعودی و رنگ قرمز به معنی بازار نزولی است)

تنظیمات show internal

Show Internal Structure

Confluence Filter

با انتخاب این گزینه شما می‌توانید استراکچرهایی که از اهمیت کمتری برخوردار هستند را حذف نمایید.

Swing structure

در این بخش شما می‌توانید همانند بخش internal Structure  ب رنگبندی  سطوح  سوینگ تریدینگ (Swing trading)   در بازارهای صعودی و نزولی  را تغییر دهید  این سطوح به صورت برچسب و خط‌های ممتد نمایش داده می‌شوند.

تنظیمات show swing stracture

Show Swing Structure

Swing Point

تنظیمات نمایش سطوح سویینگ   HH, HL,LH, LL

Internal Order Blocks

در این بخش  شما این امکان را دارید که سفارشات بلوکی داخلی را مشاهده کنید همچنین می‌توانید تعداد نمایش این بلوک‌ها را تغییر دهید .

Swing Order Blocks

در این بخش سفارشات لوک سویینگ را می‌توانید فعال کنید و همچنین می‌توانید تعداد آن‌ها را نیز مشخص کنید

Equal Highs & Lows

فعال کردن برچسب‌گذاری شده EQH/EQL برای تشخیص بالاترین و پایین‌ترین قیمت‌های مساوی هم در چارت استفاده می‌شود

Bars Confirmation

به شما این امکان را می‌دهد که مشخص کنید برای تأیید EQH/EQL ها چند کندل قبل را محاسبه نماید

Fair Value Gaps

در این تنظیمات شما می‌توانید  محدوده‌های مناطقی که در چارت گپ‌های بازار اتفاق افتاده است را مشخص کنید

Auto Threshold

با فعال کردن این بخش کپ‌هایی که ارزش کمتری دارند برای شما فیلتر شده و به نمایش داده نمی‌شود

Timeframe

در این بخش شما می‌توانید تایم فرم‌های چارت خود را تنظیم کنید در صورتی که بر روی Chart باشد . چارت جاری که اندیکاتور بر روی آن فعال است محاسبه می‌شود.

Extend FVG

به شما این امکان را می‌دهد که مشخص کنید تعداد کندل‌هایی که در آن کپ اتفاق افتاده است حداقل چند کندل باشد

Highs & Lows MTF

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

Premium/ Discount Zones

با فعال کردن این گزینه مناطق پریموم ، دیسکانت برای شما نمایش داده می‌شود

کاربرد اندیکاتور Smart Money Concepts LuxAlgo

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

کاربرد اندیکاتور اسمارت مانی

همچنین در مثالی دیگر که در تصویر زیر مشخص است شما می‌توانید برچسب‌های سوینگ بازار را مشاهده کنید ، این سطوح  به عنوان BOS و CHoCH  برچسب‌گذاری شده‌اند اما دارای یک خط ثابت با نوشتاری بزرگتر هستند که نشان از تغییر روندهای بزرگتر بازار است معامله گران می‌توانند در زمان انجام معاملات با توجه به نوسانات گذشته بازار در گذشته دید بزرگ‌تری در جهت روند بازار داشته باشند.

استفاده از اندیکاتور اسمارت مانی

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

اندیکاتور پول هوشمند

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

نحوه استفاده از اندیکاتور پول هوشمند

در تصویر پایین مشاهده می‌کنید که این اندیکاتور دارای ویژگی‌های بسیاری است که به معامله گر اجازه می‌دهد یا پیدا کردن سطوح مهم و بلقوه با معامله بهترین قیمت  پیش‌بینی کند. در این تصویر معامله گر می‌تواند به راحتی سطوح مناسبی را جهت حد سود و حد ضرر خود بر اساس بالاترین و پایین‌ترین قیمت‌هایی که در گذشته بازار و معامله گران به آن واکنش نشان داده‌اند پیدا کند همچنین محدوده دیسکانت و پریمیوم 50 درصد فیبوناچی برای معامله گر  نمایش داده شده است که بتواند در صورت لزوم خروج  محدوده خروج اضطراری را نیز تعیین کند.

اندیکاتور پول هوشمند در تردینگ ویو
نحوه استفاده از اندیکاتور پول هوشمند

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

در پایان کد اسکریپت این اندیکاتور را برای استفاده در دیگر پلتفرم‌های معاملاتی و تحلیلی برای شما در زیر قرار دادیم این کد توسط شرکت LuxArgo  برای عموم گذاشته شده است و استفاده از آن محدودیتی ندارد.

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/

// © LuxAlgo

//@version=5

indicator(“Smart Money Concepts [LuxAlgo]”, “Smart Money Concepts [LuxAlgo]”

  , overlay = true

  , max_labels_count = 500

  , max_lines_count = 500

  , max_boxes_count = 500

  , max_bars_back = 500)

//—————————————————————————–{

//Constants

//—————————————————————————–{

color TRANSP_CSS = #ffffff00

//Tooltips

string MODE_TOOLTIP          = ‘Allows to display historical Structure or only the recent ones’

string STYLE_TOOLTIP         = ‘Indicator color theme’

string COLOR_CANDLES_TOOLTIP = ‘Display additional candles with a color reflecting the current trend detected by structure’

string SHOW_INTERNAL         = ‘Display internal market structure’

string CONFLUENCE_FILTER     = ‘Filter non significant internal structure breakouts’

string SHOW_SWING            = ‘Display swing market Structure’

string SHOW_SWING_POINTS     = ‘Display swing point as labels on the chart’

string SHOW_SWHL_POINTS      = ‘Highlight most recent strong and weak high/low points on the chart’

string INTERNAL_OB           = ‘Display internal order blocks on the chart\n\nNumber of internal order blocks to display on the chart’

string SWING_OB              = ‘Display swing order blocks on the chart\n\nNumber of internal swing blocks to display on the chart’

string FILTER_OB             = ‘Method used to filter out volatile order blocks \n\nIt is recommended to use the cumulative mean range method when a low amount of data is available’

string SHOW_EQHL             = ‘Display equal highs and equal lows on the chart’

string EQHL_BARS             = ‘Number of bars used to confirm equal highs and equal lows’

string EQHL_THRESHOLD        = ‘Sensitivity threshold in a range (0, 1) used for the detection of equal highs & lows\n\nLower values will return fewer but more pertinent results’

string SHOW_FVG              = ‘Display fair values gaps on the chart’

string AUTO_FVG              = ‘Filter out non significant fair value gaps’

string FVG_TF                = ‘Fair value gaps timeframe’

string EXTEND_FVG            = ‘Determine how many bars to extend the Fair Value Gap boxes on chart’

string PED_ZONES             = ‘Display premium, discount, and equilibrium zones on chart’

//—————————————————————————–{

//Settings

//—————————————————————————–{

//General

//—————————————-{

mode = input.string(‘Historical’

  , options = [‘Historical’, ‘Present’]

  , group = ‘Smart Money Concepts’

  , tooltip = MODE_TOOLTIP)

style = input.string(‘Colored’

  , options = [‘Colored’, ‘Monochrome’]

  , group = ‘Smart Money Concepts’

  , tooltip = STYLE_TOOLTIP)

show_trend = input(false, ‘Color Candles’

  , group = ‘Smart Money Concepts’

  , tooltip = COLOR_CANDLES_TOOLTIP)

//—————————————-}

//Internal Structure

//—————————————-{

show_internals = input(true, ‘Show Internal Structure’

  , group = ‘Real Time Internal Structure’

  , tooltip = SHOW_INTERNAL)

show_ibull = input.string(‘All’, ‘Bullish Structure’

  , options = [‘All’, ‘BOS’, ‘CHoCH’]

  , inline = ‘ibull’

  , group = ‘Real Time Internal Structure’)

swing_ibull_css = input(#089981, ”

  , inline = ‘ibull’

  , group = ‘Real Time Internal Structure’)

//Bear Structure

show_ibear = input.string(‘All’, ‘Bearish Structure’

  , options = [‘All’, ‘BOS’, ‘CHoCH’]

  , inline = ‘ibear’

  , group = ‘Real Time Internal Structure’)

swing_ibear_css = input(#f23645, ”

  , inline = ‘ibear’

  , group = ‘Real Time Internal Structure’)

ifilter_confluence = input(false, ‘Confluence Filter’

  , group = ‘Real Time Internal Structure’

  , tooltip = CONFLUENCE_FILTER)

internal_structure_size = input.string(‘Tiny’, ‘Internal Label Size’

  , options = [‘Tiny’, ‘Small’, ‘Normal’]

  , group = ‘Real Time Internal Structure’)

//—————————————-}

//Swing Structure

//—————————————-{

show_Structure = input(true, ‘Show Swing Structure’

  , group = ‘Real Time Swing Structure’

  , tooltip = SHOW_SWING)

//Bull Structure

show_bull = input.string(‘All’, ‘Bullish Structure’

  , options = [‘All’, ‘BOS’, ‘CHoCH’]

  , inline = ‘bull’

  , group = ‘Real Time Swing Structure’)

swing_bull_css = input(#089981, ”

  , inline = ‘bull’

  , group = ‘Real Time Swing Structure’)

//Bear Structure

show_bear = input.string(‘All’, ‘Bearish Structure’

  , options = [‘All’, ‘BOS’, ‘CHoCH’]

  , inline = ‘bear’

  , group = ‘Real Time Swing Structure’)

swing_bear_css = input(#f23645, ”

  , inline = ‘bear’

  , group = ‘Real Time Swing Structure’)

swing_structure_size = input.string(‘Small’, ‘Swing Label Size’

  , options = [‘Tiny’, ‘Small’, ‘Normal’]

  , group = ‘Real Time Swing Structure’)

//Swings

show_swings = input(false, ‘Show Swings Points’

  , inline = ‘swings’

  , group = ‘Real Time Swing Structure’

  , tooltip = SHOW_SWING_POINTS)

length = input.int(50, ”

  , minval = 10

  , inline = ‘swings’

  , group = ‘Real Time Swing Structure’)

show_hl_swings = input(true, ‘Show Strong/Weak High/Low’

  , group = ‘Real Time Swing Structure’

  , tooltip = SHOW_SWHL_POINTS)

//—————————————-}

//Order Blocks

//—————————————-{

show_iob = input(true, ‘Internal Order Blocks’

  , inline = ‘iob’

  , group = ‘Order Blocks’

  , tooltip = INTERNAL_OB)

iob_showlast = input.int(5, ”

  , minval = 1

  , inline = ‘iob’

  , group = ‘Order Blocks’)

show_ob = input(false, ‘Swing Order Blocks’

  , inline = ‘ob’

  , group = ‘Order Blocks’

  , tooltip = SWING_OB)

ob_showlast = input.int(5, ”

  , minval = 1

  , inline = ‘ob’

  , group = ‘Order Blocks’)

ob_filter = input.string(‘Atr’, ‘Order Block Filter’

  , options = [‘Atr’, ‘Cumulative Mean Range’]

  , group = ‘Order Blocks’

  , tooltip = FILTER_OB)

ibull_ob_css = input.color(color.new(#3179f5, 80), ‘Internal Bullish OB’

  , group = ‘Order Blocks’)

ibear_ob_css = input.color(color.new(#f77c80, 80), ‘Internal Bearish OB’

  , group = ‘Order Blocks’)

bull_ob_css = input.color(color.new(#1848cc, 80), ‘Bullish OB’

  , group = ‘Order Blocks’)

bear_ob_css = input.color(color.new(#b22833, 80), ‘Bearish OB’

  , group = ‘Order Blocks’)

//—————————————-}

//EQH/EQL

//—————————————-{

show_eq = input(true, ‘Equal High/Low’

  , group = ‘EQH/EQL’

  , tooltip = SHOW_EQHL)

eq_len = input.int(3, ‘Bars Confirmation’

  , minval = 1

  , group = ‘EQH/EQL’

  , tooltip = EQHL_BARS)

eq_threshold = input.float(0.1, ‘Threshold’

  , minval = 0

  , maxval = 0.5

  , step = 0.1

  , group = ‘EQH/EQL’

  , tooltip = EQHL_THRESHOLD)

eq_size = input.string(‘Tiny’, ‘Label Size’

  , options = [‘Tiny’, ‘Small’, ‘Normal’]

  , group = ‘EQH/EQL’)

//—————————————-}

//Fair Value Gaps

//—————————————-{

show_fvg = input(false, ‘Fair Value Gaps’

  , group = ‘Fair Value Gaps’

  , tooltip = SHOW_FVG)

fvg_auto = input(true, “Auto Threshold”

  , group = ‘Fair Value Gaps’

  , tooltip = AUTO_FVG)

fvg_tf = input.timeframe(”, “Timeframe”

  , group = ‘Fair Value Gaps’

  , tooltip = FVG_TF)

bull_fvg_css = input.color(color.new(#00ff68, 70), ‘Bullish FVG’

  , group = ‘Fair Value Gaps’)

bear_fvg_css = input.color(color.new(#ff0008, 70), ‘Bearish FVG’

  , group = ‘Fair Value Gaps’)

fvg_extend = input.int(1, “Extend FVG”

  , minval = 0

  , group = ‘Fair Value Gaps’

  , tooltip = EXTEND_FVG)

//—————————————-}

//Previous day/week high/low

//—————————————-{

//Daily

show_pdhl = input(false, ‘Daily’

  , inline = ‘daily’

  , group = ‘Highs & Lows MTF’)

pdhl_style = input.string(‘⎯⎯⎯’, ”

  , options = [‘⎯⎯⎯’, ‘—-‘, ‘····’]

  , inline = ‘daily’

  , group = ‘Highs & Lows MTF’)

pdhl_css = input(#2157f3, ”

  , inline = ‘daily’

  , group = ‘Highs & Lows MTF’)

//Weekly

show_pwhl = input(false, ‘Weekly’

  , inline = ‘weekly’

  , group = ‘Highs & Lows MTF’)

pwhl_style = input.string(‘⎯⎯⎯’, ”

  , options = [‘⎯⎯⎯’, ‘—-‘, ‘····’]

  , inline = ‘weekly’

  , group = ‘Highs & Lows MTF’)

pwhl_css = input(#2157f3, ”

  , inline = ‘weekly’

  , group = ‘Highs & Lows MTF’)

//Monthly

show_pmhl = input(false, ‘Monthly’

  , inline = ‘monthly’

  , group = ‘Highs & Lows MTF’)

pmhl_style = input.string(‘⎯⎯⎯’, ”

  , options = [‘⎯⎯⎯’, ‘—-‘, ‘····’]

  , inline = ‘monthly’

  , group = ‘Highs & Lows MTF’)

pmhl_css = input(#2157f3, ”

  , inline = ‘monthly’

  , group = ‘Highs & Lows MTF’)

//—————————————-}

//Premium/Discount zones

//—————————————-{

show_sd = input(false, ‘Premium/Discount Zones’

  , group = ‘Premium & Discount Zones’

  , tooltip = PED_ZONES)

premium_css = input.color(#f23645, ‘Premium Zone’

  , group = ‘Premium & Discount Zones’)

eq_css = input.color(#b2b5be, ‘Equilibrium Zone’

  , group = ‘Premium & Discount Zones’)

discount_css = input.color(#089981, ‘Discount Zone’

  , group = ‘Premium & Discount Zones’)

//—————————————————————————–}

//Functions

//—————————————————————————–{

n = bar_index

atr = ta.atr(200)

cmean_range = ta.cum(high – low) / n

//HL Output function

hl() => [high, low]

//Get ohlc values function

get_ohlc()=> [close[1], open[1], high, low, high[2], low[2]]

//Display Structure function

display_Structure(x, y, txt, css, dashed, down, lbl_size)=>

    structure_line = line.new(x, y, n, y

      , color = css

      , style = dashed ? line.style_dashed : line.style_solid)

    structure_lbl = label.new(int(math.avg(x, n)), y, txt

      , color = TRANSP_CSS

      , textcolor = css

      , style = down ? label.style_label_down : label.style_label_up

      , size = lbl_size)

    if mode == ‘Present’

        line.delete(structure_line[1])

        label.delete(structure_lbl[1])

//Swings detection/measurements

swings(len)=>

    var os = 0

    upper = ta.highest(len)

    lower = ta.lowest(len)

    os := high[len] > upper ? 0 : low[len] < lower ? 1 : os[1]

    top = os == 0 and os[1] != 0 ? high[len] : 0

    btm = os == 1 and os[1] != 1 ? low[len] : 0

    [top, btm]

//Order block coordinates function

ob_coord(use_max, loc, target_top, target_btm, target_left, target_type)=>

    min = 99999999.

    max = 0.

    idx = 1

    ob_threshold = ob_filter == ‘Atr’ ? atr : cmean_range

    //Search for highest/lowest high within the structure interval and get range

    if use_max

        for i = 1 to (n – loc)-1

            if (high[i] – low[i]) < ob_threshold[i] * 2

                max := math.max(high[i], max)

                min := max == high[i] ? low[i] : min

                idx := max == high[i] ? i : idx

    else

        for i = 1 to (n – loc)-1

            if (high[i] – low[i]) < ob_threshold[i] * 2

                min := math.min(low[i], min)

                max := min == low[i] ? high[i] : max

                idx := min == low[i] ? i : idx

    array.unshift(target_top, max)

    array.unshift(target_btm, min)

    array.unshift(target_left, time[idx])

    array.unshift(target_type, use_max ? -1 : 1)

//Set order blocks

display_ob(boxes, target_top, target_btm, target_left, target_type, show_last, swing, size)=>

    for i = 0 to math.min(show_last-1, size-1)

        get_box = array.get(boxes, i)

        box.set_lefttop(get_box, array.get(target_left, i), array.get(target_top, i))

        box.set_rightbottom(get_box, array.get(target_left, i), array.get(target_btm, i))

        box.set_extend(get_box, extend.right)

        color css = na

        if swing

            if style == ‘Monochrome’

                css := array.get(target_type, i) == 1 ? color.new(#b2b5be, 80) : color.new(#5d606b, 80)

                border_css = array.get(target_type, i) == 1 ? #b2b5be : #5d606b

                box.set_border_color(get_box, border_css)

            else

                css := array.get(target_type, i) == 1 ? bull_ob_css : bear_ob_css

                box.set_border_color(get_box, css)

            box.set_bgcolor(get_box, css)

        else

            if style == ‘Monochrome’

                css := array.get(target_type, i) == 1 ? color.new(#b2b5be, 80) : color.new(#5d606b, 80)

            else

                css := array.get(target_type, i) == 1 ? ibull_ob_css : ibear_ob_css

            box.set_border_color(get_box, css)

            box.set_bgcolor(get_box, css)

//Line Style function

get_line_style(style) =>

    out = switch style

        ‘⎯⎯⎯’  => line.style_solid

        ‘—-‘ => line.style_dashed

        ‘····’ => line.style_dotted

//Set line/labels function for previous high/lows

phl(h, l, tf, css)=>

    var line high_line = line.new(na,na,na,na

      , xloc = xloc.bar_time

      , color = css

      , style = get_line_style(pdhl_style))

    var label high_lbl = label.new(na,na

      , xloc = xloc.bar_time

      , text = str.format(‘P{0}H’, tf)

      , color = TRANSP_CSS

      , textcolor = css

      , size = size.small

      , style = label.style_label_left)

    var line low_line = line.new(na,na,na,na

      , xloc = xloc.bar_time

      , color = css

      , style = get_line_style(pdhl_style))

    var label low_lbl = label.new(na,na

      , xloc = xloc.bar_time

      , text = str.format(‘P{0}L’, tf)

      , color = TRANSP_CSS

      , textcolor = css

      , size = size.small

      , style = label.style_label_left)

    hy = ta.valuewhen(h != h[1], h, 1)

    hx = ta.valuewhen(h == high, time, 1)

    ly = ta.valuewhen(l != l[1], l, 1)

    lx = ta.valuewhen(l == low, time, 1)

    if barstate.islast

        ext = time + (time – time[1])*20

        //High

        line.set_xy1(high_line, hx, hy)

        line.set_xy2(high_line, ext, hy)

        label.set_xy(high_lbl, ext, hy)

        //Low

        line.set_xy1(low_line, lx, ly)

        line.set_xy2(low_line, ext, ly)

        label.set_xy(low_lbl, ext, ly)

//—————————————————————————–}

//Global variables

//—————————————————————————–{

var trend = 0, var itrend = 0

var top_y = 0., var top_x = 0

var btm_y = 0., var btm_x = 0

var itop_y = 0., var itop_x = 0

var ibtm_y = 0., var ibtm_x = 0

var trail_up = high, var trail_dn = low

var trail_up_x = 0,  var trail_dn_x = 0

var top_cross = true,  var btm_cross = true

var itop_cross = true, var ibtm_cross = true

var txt_top = ”,  var txt_btm = ”

//Alerts

bull_choch_alert = false

bull_bos_alert   = false

bear_choch_alert = false

bear_bos_alert   = false

bull_ichoch_alert = false

bull_ibos_alert   = false

bear_ichoch_alert = false

bear_ibos_alert   = false

bull_iob_break = false

bear_iob_break = false

bull_ob_break = false

bear_ob_break = false

eqh_alert = false

eql_alert = false

//Structure colors

var bull_css = style == ‘Monochrome’ ? #b2b5be

  : swing_bull_css

var bear_css = style == ‘Monochrome’ ? #b2b5be

  : swing_bear_css

var ibull_css = style == ‘Monochrome’ ? #b2b5be

  : swing_ibull_css

var ibear_css = style == ‘Monochrome’ ? #b2b5be

  : swing_ibear_css

//Labels size

var internal_structure_lbl_size = internal_structure_size == ‘Tiny’

  ? size.tiny

  : internal_structure_size == ‘Small’

  ? size.small

  : size.normal

var swing_structure_lbl_size = swing_structure_size == ‘Tiny’

  ? size.tiny

  : swing_structure_size == ‘Small’

  ? size.small

  : size.normal

var eqhl_lbl_size = eq_size == ‘Tiny’

  ? size.tiny

  : eq_size == ‘Small’

  ? size.small

  : size.normal

//Swings

[top, btm] = swings(length)

[itop, ibtm] = swings(5)

//—————————————————————————–}

//Pivot High

//—————————————————————————–{

var line extend_top = na

var label extend_top_lbl = label.new(na, na

  , color = TRANSP_CSS

  , textcolor = bear_css

  , style = label.style_label_down

  , size = size.tiny)

if top

    top_cross := true

    txt_top := top > top_y ? ‘HH’ : ‘LH’

    if show_swings

        top_lbl = label.new(n-length, top, txt_top

          , color = TRANSP_CSS

          , textcolor = bear_css

          , style = label.style_label_down

          , size = swing_structure_lbl_size)

        if mode == ‘Present’

            label.delete(top_lbl[1])

    //Extend recent top to last bar

    line.delete(extend_top[1])

    extend_top := line.new(n-length, top, n, top

      , color = bear_css)

    top_y := top

    top_x := n – length

    trail_up := top

    trail_up_x := n – length

if itop

    itop_cross := true

    itop_y := itop

    itop_x := n – 5

//Trailing maximum

trail_up := math.max(high, trail_up)

trail_up_x := trail_up == high ? n : trail_up_x

//Set top extension label/line

if barstate.islast and show_hl_swings

    line.set_xy1(extend_top, trail_up_x, trail_up)

    line.set_xy2(extend_top, n + 20, trail_up)

    label.set_x(extend_top_lbl, n + 20)

    label.set_y(extend_top_lbl, trail_up)

    label.set_text(extend_top_lbl, trend < 0 ? ‘Strong High’ : ‘Weak High’)

//—————————————————————————–}

//Pivot Low

//—————————————————————————–{

var line extend_btm = na

var label extend_btm_lbl = label.new(na, na

  , color = TRANSP_CSS

  , textcolor = bull_css

  , style = label.style_label_up

  , size = size.tiny)

if btm

    btm_cross := true

    txt_btm := btm < btm_y ? ‘LL’ : ‘HL’

    if show_swings

        btm_lbl = label.new(n – length, btm, txt_btm

          , color = TRANSP_CSS

          , textcolor = bull_css

          , style = label.style_label_up

          , size = swing_structure_lbl_size)

        if mode == ‘Present’

            label.delete(btm_lbl[1])

    //Extend recent btm to last bar

    line.delete(extend_btm[1])

    extend_btm := line.new(n – length, btm, n, btm

      , color = bull_css)

    btm_y := btm

    btm_x := n-length

    trail_dn := btm

    trail_dn_x := n-length

if ibtm

    ibtm_cross := true

    ibtm_y := ibtm

    ibtm_x := n – 5

//Trailing minimum

trail_dn := math.min(low, trail_dn)

trail_dn_x := trail_dn == low ? n : trail_dn_x

//Set btm extension label/line

if barstate.islast and show_hl_swings

    line.set_xy1(extend_btm, trail_dn_x, trail_dn)

    line.set_xy2(extend_btm, n + 20, trail_dn)

    label.set_x(extend_btm_lbl, n + 20)

    label.set_y(extend_btm_lbl, trail_dn)

    label.set_text(extend_btm_lbl, trend > 0 ? ‘Strong Low’ : ‘Weak Low’)

//—————————————————————————–}

//Order Blocks Arrays

//—————————————————————————–{

var iob_top = array.new_float(0)

var iob_btm = array.new_float(0)

var iob_left = array.new_int(0)

var iob_type = array.new_int(0)

var ob_top = array.new_float(0)

var ob_btm = array.new_float(0)

var ob_left = array.new_int(0)

var ob_type = array.new_int(0)

//—————————————————————————–}

//Pivot High BOS/CHoCH

//—————————————————————————–{

//Filtering

var bull_concordant = true

if ifilter_confluence

    bull_concordant := high – math.max(close, open) > math.min(close, open – low)

//Detect internal bullish Structure

if ta.crossover(close, itop_y) and itop_cross and top_y != itop_y and bull_concordant

    bool choch = na

    if itrend < 0

        choch := true

        bull_ichoch_alert := true

    else

        bull_ibos_alert := true

    txt = choch ? ‘CHoCH’ : ‘BOS’

    if show_internals

        if show_ibull == ‘All’ or (show_ibull == ‘BOS’ and not choch) or (show_ibull == ‘CHoCH’ and choch)

            display_Structure(itop_x, itop_y, txt, ibull_css, true, true, internal_structure_lbl_size)

    itop_cross := false

    itrend := 1

    //Internal Order Block

    if show_iob

        ob_coord(false, itop_x, iob_top, iob_btm, iob_left, iob_type)

//Detect bullish Structure

if ta.crossover(close, top_y) and top_cross

    bool choch = na

    if trend < 0

        choch := true

        bull_choch_alert := true

    else

        bull_bos_alert := true

    txt = choch ? ‘CHoCH’ : ‘BOS’

    if show_Structure

        if show_bull == ‘All’ or (show_bull == ‘BOS’ and not choch) or (show_bull == ‘CHoCH’ and choch)

            display_Structure(top_x, top_y, txt, bull_css, false, true, swing_structure_lbl_size)

    //Order Block

    if show_ob

        ob_coord(false, top_x, ob_top, ob_btm, ob_left, ob_type)

    top_cross := false

    trend := 1

//—————————————————————————–}

//Pivot Low BOS/CHoCH

//—————————————————————————–{

var bear_concordant = true

if ifilter_confluence

    bear_concordant := high – math.max(close, open) < math.min(close, open – low)

//Detect internal bearish Structure

if ta.crossunder(close, ibtm_y) and ibtm_cross and btm_y != ibtm_y and bear_concordant

    bool choch = false

    if itrend > 0

        choch := true

        bear_ichoch_alert := true

    else

        bear_ibos_alert := true

    txt = choch ? ‘CHoCH’ : ‘BOS’

    if show_internals

        if show_ibear == ‘All’ or (show_ibear == ‘BOS’ and not choch) or (show_ibear == ‘CHoCH’ and choch)

            display_Structure(ibtm_x, ibtm_y, txt, ibear_css, true, false, internal_structure_lbl_size)

    ibtm_cross := false

    itrend := -1

    //Internal Order Block

    if show_iob

        ob_coord(true, ibtm_x, iob_top, iob_btm, iob_left, iob_type)

//Detect bearish Structure

if ta.crossunder(close, btm_y) and btm_cross

    bool choch = na

    if trend > 0

        choch := true

        bear_choch_alert := true

    else

        bear_bos_alert := true

    txt = choch ? ‘CHoCH’ : ‘BOS’

    if show_Structure

        if show_bear == ‘All’ or (show_bear == ‘BOS’ and not choch) or (show_bear == ‘CHoCH’ and choch)

            display_Structure(btm_x, btm_y, txt, bear_css, false, false, swing_structure_lbl_size)

    //Order Block

    if show_ob

        ob_coord(true, btm_x, ob_top, ob_btm, ob_left, ob_type)

    btm_cross := false

    trend := -1

//—————————————————————————–}

//Order Blocks

//—————————————————————————–{

//Set order blocks

var iob_boxes = array.new_box(0)

var ob_boxes = array.new_box(0)

//Delete internal order blocks box coordinates if top/bottom is broken

for element in iob_type

    index = array.indexof(iob_type, element)

    if close < array.get(iob_btm, index) and element == 1

        array.remove(iob_top, index)

        array.remove(iob_btm, index)

        array.remove(iob_left, index)

        array.remove(iob_type, index)

        bull_iob_break := true

    else if close > array.get(iob_top, index) and element == -1

        array.remove(iob_top, index)

        array.remove(iob_btm, index)

        array.remove(iob_left, index)

        array.remove(iob_type, index)

        bear_iob_break := true

//Delete internal order blocks box coordinates if top/bottom is broken

for element in ob_type

    index = array.indexof(ob_type, element)

    if close < array.get(ob_btm, index) and element == 1

        array.remove(ob_top, index)

        array.remove(ob_btm, index)

        array.remove(ob_left, index)

        array.remove(ob_type, index)

        bull_ob_break := true

    else if close > array.get(ob_top, index) and element == -1

        array.remove(ob_top, index)

        array.remove(ob_btm, index)

        array.remove(ob_left, index)

        array.remove(ob_type, index)

        bear_ob_break := true

iob_size = array.size(iob_type)

ob_size = array.size(ob_type)

if barstate.isfirst

    if show_iob

        for i = 0 to iob_showlast-1

            array.push(iob_boxes, box.new(na,na,na,na, xloc = xloc.bar_time))

    if show_ob

        for i = 0 to ob_showlast-1

            array.push(ob_boxes, box.new(na,na,na,na, xloc = xloc.bar_time))

if iob_size > 0

    if barstate.islast

        display_ob(iob_boxes, iob_top, iob_btm, iob_left, iob_type, iob_showlast, false, iob_size)

if ob_size > 0

    if barstate.islast

        display_ob(ob_boxes, ob_top, ob_btm, ob_left, ob_type, ob_showlast, true, ob_size)

//—————————————————————————–}

//EQH/EQL

//—————————————————————————–{

var eq_prev_top = 0.

var eq_top_x = 0

var eq_prev_btm = 0.

var eq_btm_x = 0

if show_eq

    eq_top = ta.pivothigh(eq_len, eq_len)

    eq_btm = ta.pivotlow(eq_len, eq_len)

    if eq_top

        max = math.max(eq_top, eq_prev_top)

        min = math.min(eq_top, eq_prev_top)

        if max < min + atr * eq_threshold

            eqh_line = line.new(eq_top_x, eq_prev_top, n-eq_len, eq_top

              , color = bear_css

              , style = line.style_dotted)

            eqh_lbl = label.new(int(math.avg(n-eq_len, eq_top_x)), eq_top, ‘EQH’

              , color = #00000000

              , textcolor = bear_css

              , style = label.style_label_down

              , size = eqhl_lbl_size)

            if mode == ‘Present’

                line.delete(eqh_line[1])

                label.delete(eqh_lbl[1])

            eqh_alert := true

        eq_prev_top := eq_top

        eq_top_x := n-eq_len

    if eq_btm

        max = math.max(eq_btm, eq_prev_btm)

        min = math.min(eq_btm, eq_prev_btm)

        if min > max – atr * eq_threshold

            eql_line = line.new(eq_btm_x, eq_prev_btm, n-eq_len, eq_btm

              , color = bull_css

              , style = line.style_dotted)

            eql_lbl = label.new(int(math.avg(n-eq_len, eq_btm_x)), eq_btm, ‘EQL’

              , color = #00000000

              , textcolor = bull_css

              , style = label.style_label_up

              , size = eqhl_lbl_size)

            eql_alert := true

            if mode == ‘Present’

                line.delete(eql_line[1])

                label.delete(eql_lbl[1])

        eq_prev_btm := eq_btm

        eq_btm_x := n-eq_len

//—————————————————————————–}

//Fair Value Gaps

//—————————————————————————–{

var bullish_fvg_max = array.new_box(0)

var bullish_fvg_min = array.new_box(0)

var bearish_fvg_max = array.new_box(0)

var bearish_fvg_min = array.new_box(0)

float bullish_fvg_avg = na

float bearish_fvg_avg = na

bullish_fvg_cnd = false

bearish_fvg_cnd = false

[src_c1, src_o1, src_h, src_l, src_h2, src_l2] =

  request.security(syminfo.tickerid, fvg_tf, get_ohlc())

if show_fvg

    delta_per = (src_c1 – src_o1) / src_o1 * 100

    change_tf = timeframe.change(fvg_tf)

    threshold = fvg_auto ? ta.cum(math.abs(change_tf ? delta_per : 0)) / n * 2

      : 0

    //FVG conditions

    bullish_fvg_cnd := src_l > src_h2

      and src_c1 > src_h2

      and delta_per > threshold

      and change_tf

    bearish_fvg_cnd := src_h < src_l2

      and src_c1 < src_l2

      and -delta_per > threshold

      and change_tf

    //FVG Areas

    if bullish_fvg_cnd

        array.unshift(bullish_fvg_max, box.new(n-1, src_l, n + fvg_extend, math.avg(src_l, src_h2)

          , border_color = bull_fvg_css

          , bgcolor = bull_fvg_css))

        array.unshift(bullish_fvg_min, box.new(n-1, math.avg(src_l, src_h2), n + fvg_extend, src_h2

          , border_color = bull_fvg_css

          , bgcolor = bull_fvg_css))

    if bearish_fvg_cnd

        array.unshift(bearish_fvg_max, box.new(n-1, src_h, n + fvg_extend, math.avg(src_h, src_l2)

          , border_color = bear_fvg_css

          , bgcolor = bear_fvg_css))

        array.unshift(bearish_fvg_min, box.new(n-1, math.avg(src_h, src_l2), n + fvg_extend, src_l2

          , border_color = bear_fvg_css

          , bgcolor = bear_fvg_css))

    for bx in bullish_fvg_min

        if low < box.get_bottom(bx)

            box.delete(bx)

            box.delete(array.get(bullish_fvg_max, array.indexof(bullish_fvg_min, bx)))

    for bx in bearish_fvg_max

        if high > box.get_top(bx)

            box.delete(bx)

            box.delete(array.get(bearish_fvg_min, array.indexof(bearish_fvg_max, bx)))

//—————————————————————————–}

//Previous day/week high/lows

//—————————————————————————–{

//Daily high/low

[pdh, pdl] = request.security(syminfo.tickerid, ‘D’, hl()

  , lookahead = barmerge.lookahead_on)

//Weekly high/low

[pwh, pwl] = request.security(syminfo.tickerid, ‘W’, hl()

  , lookahead = barmerge.lookahead_on)

//Monthly high/low

[pmh, pml] = request.security(syminfo.tickerid, ‘M’, hl()

  , lookahead = barmerge.lookahead_on)

//Display Daily

if show_pdhl

    phl(pdh, pdl, ‘D’, pdhl_css)

//Display Weekly

if show_pwhl

    phl(pwh, pwl, ‘W’, pwhl_css)

//Display Monthly

if show_pmhl

    phl(pmh, pml, ‘M’, pmhl_css)

//—————————————————————————–}

//Premium/Discount/Equilibrium zones

//—————————————————————————–{

var premium = box.new(na, na, na, na

  , bgcolor = color.new(premium_css, 80)

  , border_color = na)

var premium_lbl = label.new(na, na

  , text = ‘Premium’

  , color = TRANSP_CSS

  , textcolor = premium_css

  , style = label.style_label_down

  , size = size.small)

var eq = box.new(na, na, na, na

  , bgcolor = color.rgb(120, 123, 134, 80)

  , border_color = na)

var eq_lbl = label.new(na, na

  , text = ‘Equilibrium’

  , color = TRANSP_CSS

  , textcolor = eq_css

  , style = label.style_label_left

  , size = size.small)

var discount = box.new(na, na, na, na

  , bgcolor = color.new(discount_css, 80)

  , border_color = na)

var discount_lbl = label.new(na, na

  , text = ‘Discount’

  , color = TRANSP_CSS

  , textcolor = discount_css

  , style = label.style_label_up

  , size = size.small)

//Show Premium/Discount Areas

if barstate.islast and show_sd

    avg = math.avg(trail_up, trail_dn)

    box.set_lefttop(premium, math.max(top_x, btm_x), trail_up)

    box.set_rightbottom(premium, n, .95 * trail_up + .05 * trail_dn)

    label.set_xy(premium_lbl, int(math.avg(math.max(top_x, btm_x), n)), trail_up)

    box.set_lefttop(eq, math.max(top_x, btm_x), .525 * trail_up + .475*trail_dn)

    box.set_rightbottom(eq, n, .525 * trail_dn + .475 * trail_up)

    label.set_xy(eq_lbl, n, avg)

    box.set_lefttop(discount, math.max(top_x, btm_x), .95 * trail_dn + .05 * trail_up)

    box.set_rightbottom(discount, n, trail_dn)

    label.set_xy(discount_lbl, int(math.avg(math.max(top_x, btm_x), n)), trail_dn)

//—————————————————————————–}

//Trend

//—————————————————————————–{

var color trend_css = na

if show_trend

    if style == ‘Colored’

        trend_css := itrend == 1 ? bull_css : bear_css

    else if style == ‘Monochrome’

        trend_css := itrend == 1 ? #b2b5be : #5d606b

plotcandle(open, high, low, close

  , color = trend_css

  , wickcolor = trend_css

  , bordercolor = trend_css

  , editable = false)

//—————————————————————————–}

//Alerts

//—————————————————————————–{

//Internal Structure

alertcondition(bull_ibos_alert, ‘Internal Bullish BOS’, ‘Internal Bullish BOS formed’)

alertcondition(bull_ichoch_alert, ‘Internal Bullish CHoCH’, ‘Internal Bullish CHoCH formed’)

alertcondition(bear_ibos_alert, ‘Internal Bearish BOS’, ‘Internal Bearish BOS formed’)

alertcondition(bear_ichoch_alert, ‘Internal Bearish CHoCH’, ‘Internal Bearish CHoCH formed’)

//Swing Structure

alertcondition(bull_bos_alert, ‘Bullish BOS’, ‘Internal Bullish BOS formed’)

alertcondition(bull_choch_alert, ‘Bullish CHoCH’, ‘Internal Bullish CHoCH formed’)

alertcondition(bear_bos_alert, ‘Bearish BOS’, ‘Bearish BOS formed’)

alertcondition(bear_choch_alert, ‘Bearish CHoCH’, ‘Bearish CHoCH formed’)

//order Blocks

alertcondition(bull_iob_break, ‘Bullish Internal OB Breakout’, ‘Price broke bullish internal OB’)

alertcondition(bear_iob_break, ‘Bearish Internal OB Breakout’, ‘Price broke bearish internal OB’)

alertcondition(bull_ob_break, ‘Bullish Swing OB Breakout’, ‘Price broke bullish swing OB’)

alertcondition(bear_ob_break, ‘Bearish Swing OB Breakout’, ‘Price broke bearish swing OB’)

//EQH/EQL

alertcondition(eqh_alert, ‘Equal Highs’, ‘Equal highs detected’)

alertcondition(eql_alert, ‘Equal Lows’, ‘Equal lows detected’)

//FVG

alertcondition(bullish_fvg_cnd, ‘Bullish FVG’, ‘Bullish FVG formed’)

alertcondition(bearish_fvg_cnd, ‘Bearish FVG’, ‘Bearish FVG formed’)

//—————————————————————————–}

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

مقالات مرتبط

برای ترید آماده اید؟