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

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

مرحله دوم: جمعبندی و شمارش با بلاک CommonMath+In
حالا که خروجی شرطی را داریم (یک یا صفر)، باید آن را برای یک بازه زمانی مشخص جمع بزنیم. برای این کار از ابزار CommonMath+In استفاده میکنیم. این بلاک کارهای عمومی ریاضی را انجام میدهد و میتوانیم روی ورودی آن عملیات جمع را اعمال کنیم.
ما خروجی بلاک شرطی (که همان ۱ و ۰ها هستند) را به ورودی این بلاک متصل میکنیم و نوع محاسبه را روی «جمع» قرار میدهیم. سپس بازه زمانی (پریود) را مشخص میکنیم. مثلاً اگر بگوییم برای ۱۰ روز، این بلاک تعداد دفعاتی که شرط برقرار بوده را در ۱۰ روز گذشته به ما نشان میدهد. در نهایت خروجی عددی را به بلاک خروجی فیلتر متصل میکنیم تا تعداد روزهای مثبت را ببینیم.

مدیریت بازههای زمانی پیچیدهتر با ابزارهای تاریخ
تا اینجا یاد گرفتیم چطور یک بازه زمانی ثابت (مثل ۱۰ روز) را بشماریم. اما گاهی اوقات نیاز داریم بازههای زمانی پیچیدهتری را تعریف کنیم، مثلاً «یک ماه تقویمی» یا «ماه مهر». برای این کار از بلاکهای تعداد کندل و تاریخ تا تاریخ استفاده میکنیم.

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

- از بلاک تعداد کندل در دسته تاریخ و ساعت استفاده میکنیم.
- تاریخ شروع را روی یک ماه قبل (مثلاً آبان) و تاریخ پایان را روی امروز تنظیم میکنیم.
- خروجی این بلاک، تعداد روزهای معاملاتی باز شده در آن بازه زمانی است.
- این خروجی را به جای عدد ثابت، در بخش پریودِ بلاک CommonMath+In قرار میدهیم.
با این کار، سیستم به صورت خودکار تعداد روزهای باز بودن نماد در آن ماه را محاسبه کرده و فقط در روزهای معاملاتی، شرط را بررسی و شمارش میکند.
مثال دوم: شمارش در یک ماه خاص (تاریخ تا تاریخ)
حالا فرض کنید میخواهیم تمام حسابوکتاب را صرفاً برای ماه «مهر» انجام دهیم، نه یک ماه گذشته از امروز. در این حالت ابزار تاریخ تا تاریخ به کمک ما میآید:

- ابتدا با استفاده از بلاک تاریخ تا تاریخ، بازه زمانی را مشخص میکنیم (مثلاً از اول مهر تا آخر مهر). خروجی این بلاک تعداد روزهای معاملاتی در آن ماه خاص است (مثلاً ۲۲ روز).
- این عدد را به عنوان پریود در نظر میگیریم.
- اما چون میخواهیم این محاسبه برای تاریخ گذشته (مهر) باشد و نه امروز، باید یک «برگشت به عقب» تعریف کنیم. از بلاک تعداد کندل استفاده میکنیم تا فاصله زمانی از امروز تا پایان مهر را محاسبه کنیم.
- این فاصله زمانی را به بخش برگشت به عقب (Backshift) در تنظیمات فیلتر اعمال میکنیم.
با این ترکیب هوشمندانه، شما میتوانید دقیقاً مشخص کنید که فیلتر شما در چه بازه زمانی خاصی (مثلاً کل ماه مهر) اجرا شود و نتایج را بر اساس آن بازه به دست آورید.

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