آموزش فیلترنویسی در سامانه tsetmc (بخش دوم)

نویسنده :تیم محتوا
انتشار :1400/10/21
زمان مطالعه :8 دقیقه
دسته‌بندی :تجزیه و تحلیل
آموزش فیلترنویسی در سامانه tsetmc (بخش دوم)

همانطور که در مقاله «آموزش فیلترنویسی در سامانه tsetmc» توضیح دادیم، برای نوشتن و اجرا کردن فیلترها در سایت tsetmc نیاز به انجام تنظیمات اولیه‌­ای است که در مقاله بخش اول به آن‌ها پرداخته شد. در این مقاله قصد داریم تا نحوه کدنویسی و تبدیل دستورات مد نظر به کد فیلتر را آموزش دهیم. در قسمت قبل گفتیم که برای نوشتن فیلتر ابتدا باید به بخش دیده‌بان بازار رفته و سپس به بخش فیلتر مراجعه کرد. سپس باید قسمت فیلتر 0 را کلیک کنید. اکنون در بخش شرط می‌توانید فیلتر مورد نظر خود را بنویسید.

قالب و فرمت فیلترها

در دو قالب ساده و قالب کدنویسی می­‌توان شرایط مورد نظر برای نمایش نمادهای سهام را تبدیل به کد کرد. در ادامه هر یک از این دو قالب معرفی می­‌شوند.

قالب ساده

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

3 < (pcp) - (plp)

این فیلتر در قسمت شرط به صورت زیر نمایش داده می‌شود:

در فیلتر زیر علاوه بر شرط بالا، حجم معامله شده از حجم مبنا بیشتر است.

(bvol) < (tvol) &&  < (pcp) - (plp)

قالب کدنویسی

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

 

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

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

عملگرها

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

عملگر

توضیح

مثال

   +  

              جمع              

             (pf) + (pl) > 1000             

-

تفریق

(pl) - (pc) > 100

*

ضرب

(pc) * (tvol)

/

تقسیم

(tval) / (tvol)

%

باقیمانده تقسیم

(tno) % 10

&&

و

(pl) > 1000 && (pf)>1000

||

یا

(pl) > 1000 || (pc)>1000

!

نقیض

! ( (pl) - (pc) > 100)

==

مساوی

(pl) == (py)

>

بزرگتر

(pl) - (pc) > 100

<

کوچکتر

(pl) - (pc) < 100

>=

بزرگتر و مساوی

(pl) - (pc) >= 100

<=

کوچکتر و مساوی

(pl) - (pc) <= 100

!=

مخالف

(pf) != (pc) 

 

توابع از پیش آماده

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

توضیح

تابع

قدرمطلق عدد x را برمی گرداند.

Math.abs(x)

x را رو به بالا رند می­ کند.

Math.ceil(x)

مقدار نمایی x را برمی­ گرداند.

Math.exp(x)

x را رو به پایین رند می­ کند.

Math.floor(x)

لگاریتم عدد x را بر می­ گرداند.

Math.log(x)

بیشترین مقدار بین اعداد x,y,z,...,n را بر می­ گرداند.       

       Math.max(x,y,z,...,n)      

کمترین مقدار بین اعداد x,y,z,...,n را بر می­ گرداند.

Math.min(x,y,z,...,n)

مقدار x به توان y را بر می­ گرداند.

Math.pow(x,y)

عدد x را به نزدیک­ترین عدد صحیح روند می­ کند.

Math.round(x)

جذر عدد x را بر می­ گرداند.

Math.sqrt(x)

 

در ادامه فیلتری آورده شده است که از توابع از پیش ساخته استفاده می‌­کند. این فیلتر سهم‌هایی را نشان می‌دهد که قیمت پایانی آنها با کمترین قیمت پایانی 60 روز اخیر حداکثر 30 درصد اختلاف دارد. 

فیلدهای ساده قابل استفاده

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

فیلد 

 توضیح

فیلد

توضیح

    (l18)      

نماد

(pd1)

قیمت خرید - سطر اول

(l30)

نام

(zd1)

تعداد خریدار - سطر اول

(tno)

تعداد معاملات

(qd1)

حجم خرید- سطر اول

(tvol)

حجم معاملات

(po1)

قیمت فروش - سطر اول

(tval)

ارزش معاملات

(zo1)

تعداد فروشنده - سطر اول

(py)

قیمت دیروز

(qo1)

حجم فروش- سطر اول

(pf)

اولین قیمت

(pd2)

قیمت خرید - سطر دوم

(pmin)

کمترین قیمت

(zd2)

تعداد خریدار - سطر دوم

(pmax)

بیشترین قیمت

(qd2)

حجم خرید- سطر دوم

(pl)

آخرین قیمت

(po2)

قیمت فروش - سطر دوم

(plc)

تغییر آخرین قیمت

(zo2)

تعداد فروشنده - سطر دوم

(plp)

درصد تغییر آخرین قیمت

(qo2)

حجم فروش- سطر دوم

(pc)

قیمت پایانی

(pd3)

قیمت خرید - سطر سوم

(pcc)

تغییر قیمت پایانی

(zd3)

تعداد خریدار - سطر سوم

(pcp)

درصد تغییر قیمت پایانی

(qd3)

حجم خرید- سطر سوم

(eps)

eps

(po3)

قیمت فروش - سطر سوم

(pe)

p/e

(zo3)

تعداد فروشنده - سطر سوم

(tmin)

آستانه مجاز پایین

(qo3)

حجم فروش- سطر سوم

(tmax)

آستانه مجاز بالا

(bvol)

حجم مبنا

(z)

تعداد سهام

(cs)

گروه صنعت

(mv)

ارزش بازار

 

 

 

اطلاعات حقیقی و حقوقی

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

توضیح

فیلد

            تعداد خریدار حقیقی           

           (ct).Buy_CountI           

تعداد خریدار حقوقی

(ct).Buy_CountN

حجم خرید حقیقی

(ct).Buy_I_Volume 

حجم خرید حقوقی

(ct).Buy_N_Volume

تعداد فروشنده حقیقی

(ct).Sell_CountI

تعداد فروشنده حقوقی

(ct).Sell_CountN

حجم فروش حقیقی

(ct).Sell_I_Volume

حجم فروش حقوقی

(ct).Sell_N_Volume

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

فیلدهای مربوط به سابقه قیمت‌­ها و معاملات

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

فیلد

توضیح

[ih]

اطلاعات سابقه معاملات

[ih][n]

اطلاعات n روز قبل

[ih][n].PClosing 

قیمت پایانی در n روز قبل

[ih][n].PDrCotVal

قیمت آخرین معامله در n روز قبل

[ih][n].ZTotTran 

تعداد معاملات در n روز قبل

[ih][n].QTotTran5J 

حجم معاملات در n روز قبل

[ih][n].QTotCap 

ارزش معاملات در n روز قبل

[ih][n].PriceMin

کمترین قیمت در n روز قبل

[ih][n].PriceMax 

بیشترین قیمت در n روز قبل

       [ih][n].PriceYesterday       

        قیمت روز قبل در n روز قبل        

[ih][n].PriceFirst

اولین قیمت در n روز قبل

 

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

 

فیلتر بالا سهم‌هایی را نشان می‌­دهد که حجم معاملات امروز آن بیشتر از دو برابر میانگین حجم معاملات 20 روز گذشته بوده است. در این فیلتر از دستورات حلقه IF و for استفاده شده است. 

کلام آخر

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