متغیرهای پیشرفتهٔ فیلترنویسی؛ جعبهابزار کامل
فراتر از pl و tvol: متغیرهای کمترشناختهٔ دیدهبان، توابع کمکی و فیلدهای ترکیبی — مرجعی که همیشه کنارت میماند
در سطح دو این مسیر با فیلترنویسیِ مقدماتی آشنا شدی: چند شرط ساده مثل قیمت مثبت یا حجم بالای میانگین. حالا وقت جعبهابزار کامل است. این درس، مرجع متغیرهای دیدهبان بازار را برایت باز میکند: خانوادهٔ قیمتی، خانوادهٔ حجمی، سطر اول حامی (سفارشات صف)، فیلدهای حقیقی-حقوقی، و آرایههای چندروزه که به گذشتهٔ نماد دسترسی میدهند. یک قرارداد صادقانه هم از همینجا امضا کنیم: نام هر فیلد را موقع استفاده از راهنمای خودِ دیدهبان چک میکنیم، چون این سرویس در طول زمان فیلدهایی اضافه و کم کرده — ما منطق میآموزیم، نه حفظکردن فهرستی که ممکن است فردا عوض شود.
نقشهٔ کلی؛ پنج خانوادهٔ متغیر در دیدهبان
دیدهبان بازارِ سایت TSETMC یک موتور جاوااسکریپت کوچک است که کد تو را روی دادههای لحظهایِ چندصد نماد اجرا میکند و نمادهایی را نگه میدارد که شرطت را پاس کنند. دادههایی که میتوانی شرط بگذاری، در پنج خانوادهٔ منطقی دستهبندی میشوند: قیمتهای امروز (آخرین، پایانی، اولین، بیشترین، کمترین و مرزهای مجاز)، حجم و ارزش امروز، سطر اول حامی (قیمت و حجم و تعدادِ بهترین سفارش خرید و فروش)، تفکیک حقیقی/حقوقی (خانوادهٔ ct) و دادههای چندروزه (آرایههای تاریخی و میانگینهای آماده).
این دستهبندی، فقط برای مرتبنمودن نیست؛ راه یادگیری توست. هر ایدهٔ معاملاتی که داری، معمولاً به یکی از این پنج خانواده اشاره میکند: «قیمت به کجا خورده؟» (خانوادهٔ ۱)، «پشتش پول بوده؟» (خانوادهٔ ۲)، «صف چه کیفیتی دارد؟» (خانوادهٔ ۳)، «کی خریده؟» (خانوادهٔ ۴) و «نسبت به گذشته چه شده؟» (خانوادهٔ ۵). وقتی ذهنت این ترجمه را بلد شود، از «کپی فیلتر از کانالها» به «نوشتن فیلتر برای ایدهٔ خودم» مهاجرت میکنی — هدف اصلی این فصل.
یک نکتهٔ اجرایی مهم: فیلترها را در بخش «دیدهبان بازار» با دکمهٔ ساخت فیلتر جدید میسازی و هر فیلتر میتواند نام دلخواه داشته باشد. راهنمای کامل متغیرها هم در خود سایت، دکمهٔ «راهنما» کنار صفحهٔ فیلترنویسی است — هرجا در این درسها شک کردی، همانجا نام دقیق فیلد را چک کن؛ این همان عادتی است که در کل این سطح تکرار میکنیم.
مرور نکات این بخش
- دیدهبان = اجرای کد تو روی دادهٔ لحظهای همهٔ نمادها
- پنج خانواده: قیمت امروز | حجم/ارزش امروز | سطر اول حامی | حقیقی-حقوقی (ct) | دادهٔ چندروزه
- ترجمهٔ ایده به خانواده: کجا خورده؟ چهقدر پول؟ چه صفی؟ کی خریده؟ نسبت به گذشته؟
- هدف فصل: از کپیکردن فیلتر به ساختن فیلتر برای ایدهٔ شخصی
- مرجع نام دقیق فیلدها: دکمهٔ راهنمای خود دیدهبان — همیشه
نکته طلایی
برای خودت یک فایل «دیکشنری فیلتر» بساز: هر متغیری که یاد گرفتی را با یک جملهٔ کاربرد و یک مثال عددی ثبت کن. این دفتر، سه ماه بعد که اسم فیلدی یادت رفت، ناجیات میشود.
خانوادهٔ قیمتی؛ از آخرین قیمت تا مرزهای مجاز
ستون فقرات فیلترهای قیمتی اینها هستند: (pl) آخرین قیمت معامله، (pc) قیمت پایانی (میانگین موزون روز)، (pf) اولین قیمت روز، (py) قیمت پایانی دیروز. کنارشان، تغییرات محاسبهشده: (plc) و (plp) مبلغ و درصدِ تغییر آخرین قیمت نسبت به دیروز، (pcc) و (pcp) مبلغ و درصدِ تغییر قیمت پایانی. این جفتها ظریفاند: صفِ خریدِ لحظهای ممکن است (plp) را مثبت سنگین نشان دهد در حالی که (pcp) هنوز کمرمق است — همان تفاوتِ تیکِ آخر و میانگینِ روز که در درس شکست دیدی.
خانوادهٔ بازهٔ روز: (pmin) و (pmax) کمترین و بیشترین قیمت امروز و دو مرزِ مقرراتی (tmin) و (tmax) یعنی کف و سقف مجاز امروز (پایانیِ دیروز ضربدر ضرایب دامنهٔ نوسان). جفت (tmin)/(tmax) یکی از کاربردیترینها در بورساند چون مبنای تشخیص صفاند: وقتی (pl) با (tmax) برابر شود یعنی قیمت به سقف مجاز خورده. در ادامهٔ فصل با همین جفت، فیلترهای صف میسازیم.
و دو فیلد شناسایی: (l18) نام/نماد سهم (مثل «شپنا») و (l30) نام کامل شرکت (مثل «پتروشیمی نوری»). کاربرد اصلیشان غربال متنی است — مثلاً کنار هر فیلتر، نمادهایی که کالاییاند را با شرط نام کنار بگذاری، یا فقط گروه خاصی را نگه داری. چون کاربردشان رشتهای است (نه عددی)، این دو معمولاً با توابعی مثل indexOf همراه میشوند که در درس منطق ترکیبی میبینیم.
مرور نکات این بخش
- (pl) آخرین | (pc) پایانی | (pf) اولین | (py) پایانی دیروز
- (plc)/(plp) تغییر مبلغ و درصدِ آخرین؛ (pcc)/(pcp) تغییر مبلغ و درصدِ پایانی
- (pmin)/(pmax) بازهٔ امروز؛ (tmin)/(tmax) کف و سقف مجازِ دامنهٔ نوسان
- برابری (pl) با (tmax) = برخورد به سقف مجاز؛ مبنای تشخیص صف
- (l18) نماد سهم و (l30) نام شرکت — برای شرطهای متنی و غربال گروهی
نکته طلایی
هر وقت فیلتری بر پایهٔ (plp) نوشتی، همیشه از خودت بپرس «پایانی هم تأییدش میکند؟» و در ذهنت نسخهٔ (pcp) آن را هم بساز؛ تفاوت این دو، مرز میان نمایش و واقعیت در بورس ایران است.
خانوادهٔ حجم و ارزش؛ (tno)، (tvol)، (tval)، حجم مبنا و چند فیلد شناسنامه
سه متغیر کلیدی سلامت معاملات: (tno) تعداد معاملات امروز، (tvol) حجم معاملات (تعداد برگهٔ دستبهدستشده) و (tval) ارزش معاملات امروز — به ریال. این سه با هم میگویند بازارِ نماد «زنده» است یا نه: ۱۰ میلیون برگه در ۵۰ معامله یعنی چند بازیگر بزرگ، همان حجم در ۵٬۰۰۰ معامله یعنی بازارِ واقعاً عمومی. در درس اول گفتیم حجمِ ریالیِ معنا دارد؛ اینجا (tval) همان عدد طلایی است — و چون ریالی است، برای تبدیل ذهنی به تومان یک صفر کم کن (مثلاً tval برابر ۳۰٬۰۰۰٬۰۰۰٬۰۰۰ یعنی ۳ میلیارد تومان گردش).
دو فیلد «شناسنامهٔ شرکت» هم اینجایند: (z) تعداد کل سهام شرکت و (mv) ارزش بازار شرکت. از (z) برای نسبتگیری استفاده میکنیم — مثلاً چند درصدِ کل سهامِ شرکت امروز دستبهدست شده: (tvol) تقسیم بر (z). این نسبتِ چرخش، در فیلتر «شناور کم» درس بعد لازم میشود. (eps) سود هر سهم و (pe) نسبت قیمت به سود هم گاهی برای غربال بنیادیِ سریع داخل فیلتر به کار میروند — هرچند کار اصلی این دو، مال کدال است نه دیدهبان.
و (bvol) حجم مبنا: حدِ حجمی که سامانه برای اثرگذاری کامل بر قیمت پایانی لازم میبیند. کاربرد فیلتریاش ظریف است: صف خریدی که حجم سرخطش چند برابر حجم مبناست، از صفِ «سست» جداسازی میشود. عدد دقیق حجم مبنا برای هر نماد متفاوت و در صفحهٔ خود نماد دیده میشود — در فیلتر، (bvol) همان عددِ همان نماد را برمیگرداند و مقایسههای نسبت به آن خودکار معتبر میشوند.
مرور نکات این بخش
- (tno) تعداد معامله | (tvol) حجم (برگه) | (tval) ارزش معاملات به ریال
- همان حجم در تفاوت تعداد معامله = بازیگر نهادی در برابر بازار عمومی
- (z) تعداد کل سهام و (mv) ارزش بازار؛ نسبت tvol/z = چرخش روزانهٔ سهام
- (eps) و (pe) برای غربال سریع بنیادی داخل فیلتر
- (bvol) حجم مبنا؛ مبنای سنجش کیفیت صف و اثرگذاری حجم
نکته طلایی
عدد tval را همیشه در ذهن به تومان برگردان و با آستانهٔ شخصیات (مثلاً ۲ میلیارد تومان) مقایسه کن؛ این عادت ساده، تو را از معامله در نمادهای «بهظاهر پرحجم و باطناً خالی» نگه میدارد.
سطر اول حامی؛ رادیوی زندهٔ صف
پنجتایی که شاید کمتر از همه بشناسی و بیش از همه به کار نوسانگیر بیاید: (pd1) بهترین قیمت خرید درجشده (سرخط خرید)، (qd1) حجم خرید درجشده روی آن قیمت و (zd1) تعداد خریدارانی که در آن صف ایستادهاند؛ و قرینهٔ فروش: (po1) سرخط فروش، (qo1) حجم فروش سرخط و (zo1) تعداد فروشندههای سرخط. به اینها «سطر اول حامی» میگویند — عکسِ لحظهایِ زاویهٔ صف.
قدرت این خانواده در ترکیبهای آنهاست: (pd1) مساوی (tmax) یعنی سرخط خرید روی سقف مجاز است — یعنی صف خرید واقعی. (qd1) تقسیم بر (zd1) یعنی میانگین حجم سفارش هر خریدارِ سرخط؛ صفی که ۵۰۰ خریدار با مجموع حجم ۱ میلیون برگه ساختهاند با صفی که ۳ خریدارِ سنگین همان حجم را ساختهاند، دو حکایت متفاوتاند. و نسبت (qd1) به (qo1) در نمادِ نزدیک سقف، یعنی جنگ واقعیِ دیوار خریدار و فروشنده — همان چیزی که در سطح دو «تابلوخوانی صف» نامیدیم، اینبار قابل کدشدن.
یک هشدار مهم: این اعداد لحظهای و متلاشیاند — با یک معامله یا یک پالس، سرخط میپرد و اعداد عوض میشوند. برای همین فیلترهای سطر اول را دو جور استفاده میکنیم: یا عکسالعملی (همین حالا ببین و تصمیم بگیر) یا بهعنوان تیکِ تأیید کنار شروط پایدارتر (حجم روز، روند). فیلتری که تمام هویتش به سرخطِ لحظهای باشد، در بکتست — درس بعد — اعتبار ندارد چون خروجیاش هر دقیقه عوض میشود.
مرور نکات این بخش
- (pd1)/(qd1)/(zd1): قیمت، حجم و تعداد خریدارانِ سرخط صف خرید
- (po1)/(qo1)/(zo1): همان سه، برای سمت فروش
- (pd1)==(tmax) = صف خرید واقعی؛ (po1)==(tmin) = صف فروش واقعی
- (qd1)/(zd1) = میانگین سفارش هر خریدار سرخط — کیفیت صف، نه فقط طولش
- اعداد سرخط لحظهایاند؛ همیشه کنار شروط پایدارتر بیاور
نکته طلایی
طول صف (تعداد نفرات) را با حجم سرخط با هم بخوان؛ صفِ بلندِ کمحجم در بورس، معمولاً صفِ «بلیت رایگان» است که با اولین فشار، خالی میشود.
خانوادهٔ ct؛ حقیقی و حقوقی، هشت فیلد طلایی
دیدهبان، تفکیک کامل خرید و فروش حقیقی/حقوقی هر نماد را هم در اختیار فیلتر میگذارد. هشت فیلد خانوادهٔ (ct): (ct).Buy_I_Volume و (ct).Sell_I_Volume حجم خرید و فروشِ اشخاص حقیقی؛ (ct).Buy_N_Volume و (ct).Sell_N_Volume حجم خرید و فروش اشخاص حقوقی؛ و چهار فیلد تعداد نفرات: (ct).Buy_CountI و (ct).Buy_CountN تعداد خریداران حقیقی و حقوقی، (ct).Sell_CountI و (ct).Sell_CountN تعداد فروشندگان حقیقی و حقوقی. پسوند I برای حقیقی (Individual) و N برای حقوقی است — این قراردادِ نامگذاری را یکبار برای همیشه حفظ کن.
جادوی واقعی در تقسیم اینهاست: سرانهٔ خرید حقیقی = (ct).Buy_I_Volume تقسیم بر (ct).Buy_CountI یعنی بهطور میانگین هر حقیقی چند برگه خریده. همین برای فروش و برای حقوقیها. این نسبتها — که در سطح دو بهصورت مفهومی آموختی — اینجا به چند حرف کد تبدیل میشوند و کل فیلترهای «قدرت خریدار» درس بعد از همین تقسیمها ساخته میشوند. ترکیب با قیمت هم ساده است: حاصلضرب حجم در قیمت، سرانه را به تومان میآورد.
دو شاخص مشتقِ معروف هم یادت باشد: خالص خرید حقیقی = (ct).Buy_I_Volume منهای (ct).Sell_I_Volume (در برگه؛ با ضرب در قیمت به تومان میآید) و نسبت حقیقی به کل = حجم خرید حقیقی تقسیم بر (tvol) که میگوید چند درصدِ خرید امروز را آدمها زدهاند. هر دو در درس فیلترهای آماده با کد کامل میآیند. و همان قرارداد صادقانهٔ ابتدای درس: این هشت نام فیلد را موقع استفاده از راهنمای دیدهبان چک کن — ساختار منطقیشان همین میماند، اما املا و نسخهها را مرجع رسمی تأیید میکند.
مرور نکات این بخش
- هشت فیلد ct: خرید/فروش × حقیقی/حقوقی × حجم/تعداد
- پسوند I = حقیقی، پسوند N = حقوقی
- سرانهٔ خرید حقیقی = (ct).Buy_I_Volume ÷ (ct).Buy_CountI — آجر بنایی فیلترهای قدرت خریدار
- خالص خرید حقیقی = Buy_I_Volume − Sell_I_Volume (برگه؛ × قیمت = تومان)
- سهم حقیقی از خرید = (ct).Buy_I_Volume ÷ (tvol)
نکته طلایی
سرانهها را همیشه در دو طرف ببین: سرانهٔ خرید حقیقی تنها وقتی معنا دارد که در برابر سرانهٔ فروش حقیقی و سرانهٔ حقوقیها قرار بگیرد؛ عددِ تنها در تابلوخوانی، مثل شاهدِ تنها در دادگاه است.
خانوادهٔ چندروزه؛ [ih] و میانگینهای آماده
تا اینجا همهچیز «امروز» بود. برای شرطهای تاریخی دو ابزار داری. اول، میانگینهای آماده: [is5] میانگین حجم معاملات سه ماه گذشتهٔ نماد و [is6] میانگین حجم دوازده ماه گذشته — مشهورترین جفتِ شرطهای حجمی که با آنها میگویی «حجم امروز دستکم سه برابر میانگین سهماهه باشد». آشنا به نظر میرسد؟ درست است — همان فیلتر حجمِ غیرعادی سطح دو، اینبار با اسم واقعی متغیرهایش. [is7] هم رتبهٔ حجمی نماد را میدهد و برای رتبهبندی فیلترهای بزرگتر به کار میرود.
دوم، آرایهٔ تاریخی [ih]: با اندیس، به دادهٔ روزهای قبل دسترسی داری — مثلاً [ih][1].PClosing قیمت پایانی دیروز، [ih][3].PriceMin کمترین قیمت سه روزِ کاری قبل، [ih][n].QTotTran5J حجم معاملات n روز قبل و [ih][n].ZTotTran تعداد معاملات آن روز. اندیس صفر امروز است و هر گام، یک روزِ معاملاتی. با همین آرایه است که میتوانی بگویی «قیمت امروز حداکثر پنج درصد بالاتر از کمینهٔ حدود یکماهه باشد» — فیلتر کف ماهانه درس بعد، دقیقاً همین است.
و یک خبر خوب برای محاسبات: توابع ریاضی جاوااسکریپت مثل Math.min و Math.max در فیلترها کار میکنند؛ یعنی کمینهٔ چند روزِ دلخواه را میتوانی با یک خط دربیاوری و شرطت را روی «حداقلِ بازهٔ اخیر» بگذاری. نام دقیق فیلدهای [ih] را — مثل همیشه — از راهنمای خود دیدهبان بردار؛ ساختار ثابت است (آرایه + نام فیلد روزانه) اما مرجع نهایی، همان دکمهٔ راهنماست. تمرین این درس: سه متغیر از هر خانواده را انتخاب کن و برای هرکدام یک جملهٔ «ایدهٔ معاملاتی» بنویس که با آن قابلکدشدن باشد.
مرور نکات این بخش
- [is5] میانگین حجم ۳ ماه | [is6] میانگین حجم ۱۲ ماه — ستون شرطهای حجمی
- [ih][n]: دسترسی به دادهٔ روزهای قبل؛ اندیس ۰ = امروز
- [ih][n].PClosing پایانیِ n روز قبل | [ih][n].PriceMin کف همان روز | QTotTran5J حجم آن روز
- Math.min و Math.max در فیلترها قابل استفادهاند
- تمرین: سه متغیر از هر خانواده + یک ایدهٔ قابلکد برای هرکدام
نکته طلایی
آرایهٔ [ih] را دفترچهٔ خاطرات نماد بدان: هر شرطی که با «مقایسه با گذشته» شروع میشود — کف ماهانه، جهش نسبت به دیروز، هموارسازی چندروزه — کلیدش همینجاست.
آنچه در این درس یاد گرفتی
- پنج خانوادهٔ متغیر: قیمت امروز، حجم/ارزش امروز، سطر اول حامی، حقیقی-حقوقی (ct)، دادهٔ چندروزه
- قیمت: (pl)/(pc)/(pf)/(py) + تغییرات (plp)/(pcp) + مرزهای مجاز (tmin)/(tmax) که کلید تشخیص صفاند
- حجم: (tno)/(tvol)/(tval — ریالی) + (z) و (mv) و (bvol)؛ نسبت tvol/z چرخش روزانه میدهد
- سطر اول حامی: (pd1)/(qd1)/(zd1) خرید و (po1)/(qo1)/(zo1) فروش — رادیوی لحظهای صف
- هشت فیلد ct با پسوند I (حقیقی) و N (حقوقی)؛ سرانه = حجم ÷ تعداد نفرات
- دادهٔ چندروزه: میانگینهای آماده [is5]/[is6] + آرایهٔ [ih][n] + توابع Math
- قرارداد همیشگی: نام دقیق هر فیلد را موقع استفاده از راهنمای خود دیدهبان چک کن
مرور سریع نکات طلایی
قبل از کوییز، نکتههای مهم را از حفظ بگو — بعد کارت را برگردان.
کوییز درس
۵ سوال کوتاه برای تثبیت یادگیری — بعد از هر پاسخ، توضیح را میبینی.
ادامهٔ مسیر دنیای بورس
سه بازار، یک آکادمی — بقیهٔ دنیاهای تریدپرو