آموزش فیلترنویسی پیشرفته: محاسبه دقیق درصد اصلاح در بازار بورس
در این مقاله میخواهیم به سراغ یکی از مباحث جذاب و کاربردی در فیلترنویسی برویم: محاسبه میزان اصلاح قیمت. فرض کنید در بازار بورس یک موج جنبشی صعودی داشتهایم و قیمت وارد فاز اصلاحی شده است. سوال اینجاست که این اصلاح چقدر از موج قبلی را تعدیل کرده است؟ آیا به سطوح مهم فیبوناچی رسیده یا خیر؟
بیایید با یک مثال ساده شروع کنیم. فرض کنید قیمت از ۲۰۰ هزار تومان به ۳۰۰ هزار تومان رسیده (۱۰۰ هزار تومان رشد). حالا قیمت از ۳۰۰ هزار تومان به ۲۵۰ هزار تومان برگشته (۵۰ هزار تومان اصلاح). به سادگی میتوان گفت ۵۰ درصد اصلاح صورت گرفته است. اما پیادهسازی این منطق در نرمافزارهای تحلیل تکنیکال و استفاده از اندیکاتورها نیازمند دقت و رعایت نکات خاصی است که در ادامه به آنها میپردازیم.

۱. انتخاب ابزار مناسب: استفاده از زیگزاگ برای شناسایی سقف و کف
برای محاسبه دقیق، ما نیاز داریم تا دادههای سقف و کف موج قبلی را استخراج کنیم. بهترین ابزار برای این کار، اندیکاتور زیگزاگ است. اما یک نکته فنی مهم وجود دارد: استفاده مستقیم و مکرر از بلاک زیگزاگ میتواند فایل فیلتر را بسیار سنگین کند و باعث خطا در اجرا شود.
راه حل چیست؟ ما باید یک بلاک بیس از زیگزاگ ایجاد کنیم و سایر بخشهای فیلتر را از این بلاک اصلی فراخوانی کنیم. تنظیمات را روی حالت پیشفرض میگذاریم و فقط یک برگشت به عقب را در نظر میگیریم. نام این بلاک را «بیس» میگذاریم تا در ادامه از آن استفاده کنیم.

۲. تعیین شرایط اولیه و فیلتر کردن موجهای معتبر
قبل از محاسبه، باید مطمئن شویم که شرایط برای بررسی اصلاح وجود دارد:
- وضعیت زیگزاگ: باید مطمئن شویم که زیگزاگ ما مثبت است (یعنی آخرین نقطه یک سقف است).
- موج جنبشی: هر اصلاحی ارزش بررسی ندارد. باید موج صعودی قبلی به اندازه کافی بزرگ بوده باشد. ما شرط میگذاریم که رشد موج حداقل ۳۰ درصد باشد (قیمت ماکزیمم تقسیم بر مینیمم باید بزرگتر یا مساوی ۱.۳ باشد).
- موقعیت قیمت: قیمت فعلی باید بین سقف و کف موج قرار داشته باشد (از سقف پایینتر و از کف بالاتر).
۳. چالش محاسبه کف قیمت در بازه زمانی متغیر
اینجا به یک نکته فنی بسیار مهم میرسیم. وقتی قیمت اصلاح میکند، ممکن است در حال حاضر کف قیمت نباشد و کمی بالاتر رفته باشد. برای محاسبه دقیق، باید کف قیمت در این موج اصلاحی را پیدا کنیم. برای این کار از تابع CommonMath برای یافتن کمترین قیمت (Min) استفاده میکنیم.

اما این تابع نیاز به یک بازه زمانی (پریود) دارد. ما نمیدانیم از سقف تا کف چند کندل فاصله دارد. راه حل این است که فاصله زمانی (تعداد کندلها) را محاسبه کرده و به عنوان ورودی به تابع Min بدهیم.
نکته حیاتی برای جلوگیری از خطا: تابع Min در اشتراکهای حرفهای حداکثر ۱۵۰ کندل را پردازش میکند. اگر فاصله موج بیشتر از ۱۵۰ کندل باشد، خطا میدهد. برای حل این مشکل، باید خروجی تعداد کندلها را با استفاده از تابع Min محدود به عدد ۱۵۰ کنیم. این کار تضمین میکند که هیچگاه عددی بزرگتر از ۱۵۰ به تابع ارسال نشود و خطای نرمافزاری رخ ندهد.

۴. محاسبه درصد اصلاح (روش حسابی)
حالا که کف و سقف را داریم، محاسبه درصد اصلاح ساده است:

- اختلاف سقف تا کف (میزان رشد موج).
- اختلاف سقف تا قیمت فعلی (میزان اصلاح).
- نسبت دادن این دو به یکدیگر.
در نهایت، ما به دنبال نمادهایی هستیم که اصلاح آنها در بازه استاندارد فیبوناچی (مثلاً بین ۳۸.۲ تا ۷۸.۶ درصد) قرار دارد. همچنین شرط میگذاریم که قیمت فعلی با کف محاسبه شده فاصله زیادی نداشته باشد (مثلاً کمتر از ۵ درصد).
۵. محاسبه اصلاح به صورت لگاریتمی
گاهی اوقات محاسبه درصد اصلاح به صورت لگاریتمی دقیقتر است. برای این کار نیاز به یک بلاک فرمولنویس داریم. نکته کلیدی در اینجا ترتیب ورودیهاست.

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

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