یکی از سوالاتی که ممکن است بعد از ورود به بورس در ذهنتان شکل بگیرد، این است که چگونه از میان تعداد زیادی نماد موجود در بازار، سهمی مناسب برای خرید انتخاب کنیم. در بخش اول مقاله آشنایی با فیلترنویسی، توضیح دادیم که برای انتخاب سهمی مناسب، میتوان از فیلترنویسی استفاده کرد.
همچنین تا حدودی توضیح دادیم که فرایند فیلترنویسی در سایت Tsetmc چگونه انجام میشود. علاوهبر این در رابطه با عملگرها، نحوهی نوشتن فیلتر، تنظیمات و قالب نمایش دیدهبان نیز صحبت کردیم. اگر بخش اول را هنوز مطالعه نکردید، مطلب آشنایی با فیلترنویسی بخش اول را مطالعه کنید.
همانطور که در مقاله قبل گفتیم، استفاده از فیلترنویسی مثل استفاده کردن از یک صافی برای جداسازی ناخالصیها است. به اینصورت که ما یک سری دستوراتی را در قسمت فیلترنویسی سایت Tsetmc.ir وارد میکنیم و طی فرایندی، سیستم از میان سهمهای موجود، سهامی را که ویژگیهای دستور مورد نظر ما را دارد، بهطور مجزا به ما نشان میدهد.
برای نوشتن دستورات مورد نظرمان ابتدا وارد دیدهبان و سپس وارد بخش فیلترنویسی میشویم، با انتخاب فیلتر جدید میتوانیم دستورات مورد نظرمان را وارد کنیم. اما قبل از نوشتن فیلتر جدید میتوانیم تغییراتی را در قالب نمایش ایجاد کنیم تا ستونهای مد نظر ما هم نشان داده شوند.
ساخت یک فیلد یا ستون جدید
برای اضافه کردن یک ستون جدید و شخصیسازی صفحه نمایش در سایت، ابتدا وارد بخش قالب نمایش میشویم. سپس گزینه ساخت قالب را انتخاب میکنیم. بهتر است هرکدام از این مراحل را با ما پیش بروید. بعد از انتخاب گزینه ساخت قالب، صفحهای به شکل زیر باز میشود.
همانطور که میبینید، در ستون Title که به معنی عنوان هم هست. میتوانید نام ستونهایی را که دوست دارید در جدول ببینید، وارد کنید.
در ستون Data میتوانید مشخص کنید که زیرِ عنوانهایی که انتخاب کردید، چه اطلاعاتی قرار بگیرد. همانطور که در جدول زیر میبینید، ما خواستیم که دیدهبانمان تنها ۸ ستون به ما نشان دهد. دقت کنید که اگر خواستید تعداد بیشتری ستون به شما نمایش داده شود، باید عدد بالای جدول را نیز تغییر دهید.
برای مثال ما میخواهیم یک قالب شخصی بسازیم و به دیدهبان سه ستون قیمت پایانی، آخرین قیمت و حجم مبنا را اضافه کنیم حتی میتوانیم برخی ستونها را حذف کنیم. نام ستون قیمت پایانی را pc و دادههایی که میخواهیم در این ستون نمایش داده شود را از قسمت data انتخاب کنیم. میبینید که روبهروی ستونی که اسمش را حجم مبنا گذاشتیم خانهای به اسمcfield0 قرار گرفته است. دلیل این نامگذاری این است که دادههایی که میخواهیم در این ستون بگیرد بهطور پیشفرض در قسمت data وجود ندارد و ما میخواهیم دستوراتی خاص برای این خانه در قسمت فیلترنویسی وارد کنیم.
بعد از وارد کردن اطلاعات مد نظرمان «ذخیره قالب شخصی» را حتما بزنید. بعد از ذخیره قالب شخصی به قسمت فیلترنویسی میرویم و دادهای که میخواهیم در خانه cfield0 نمایش داده شود را مینویسیم. اعتبار فیلتر جدید را میسنجیم اگر خطایی نداشت ثبت را میزنیم.
سپس صفحه زیر باز میشود. شما میتوانید اطلاعات فیلتر شده را بهصورت زیر ببینید.
تا این قسمت تنها با بخشی ساده از فیلتر اطللاعاتمان آشنا شدید. در ادامه راجعبه نوشتن دستورات پیچیدهتر صحبت خواهیم کرد.
همانطور که در مقاله قبل اشاره کردیم دو قالب کلی برای فیلترنویسی وجود دارد، یک قالب ساده و دیگری قالب کدنویسی.
قالب ساده
قالب ساده، برای نوشتن دستورات ساده است. در این روش شما می توانید از فیلدهای اطلاعاتی، عملگرها و توابع پیشساخته استفاده کنید. هر فیلتر نیز میتواند از تعدادی شرط تشکیل شود که با عملگرهای and , or و... از هم جدا میشوند.
برای ایجاد یک قالب ساده، روی گزینه فیلتر جدید کلیک میکنیم. بعد از انتخاب فیلتر شماره صفر، دستور مورد نظر را وارد کرده و سپس گزینه اعتبارسنجی را انتخاب میکنیم. در این بخش کد و دستوری که وارد کردیم مورد بررسی قرار میگیرد و اگر مشکلی در دستور ما وجود نداشت با عبارت عدم وجود خطا مواجه میشویم. اگر دستور وارد شده درست بود میتوانید با زدن دکمه ثبت، سهامی که مشخصات دستور شما را داشت مشاهده کنید.
قالب کدنویسی
در این روش علاوه بر مواردی که در بخش قالب ساده مینوشتید، میتوانید برنامه خود را بنویسید. در این برنامه میتوانید توابع جدید بسازید، شرط جدیدی اعمال کنید و... . قالب کلی کدنویسی بهصورت زیر است.
true==function()
{
//------------------محل تعریف توابع شما-----------------------
//------------------محل تعریف برنامه شما---------------------
}()
برای نوشتن یک دستور جدید، ابتدا این قالب را از قسمت راهنما سایت کپی کرده و در قسمت فیلترنویسی جایگذاری میکنیم، تا بتوانیم بدون هیچ اشتباهی دستور مورد نظر را بدهیم، میشود این قالب را کپی هم نکرد و بهطور حفظی آن را نوشت، اما احتمال خطا در این روش بیشتر است. برنامه شما میبایست دو مقدار true و یا false را برگرداند. در صورت برگشت مقدار true یعنی نماد مورد نظر در دیدهبان نمایش داده شود و مقدار false یعنی نماد نمایش داده نشود. برای نوشتن یک دستور خاص ابتدا باید توابع خود را تعریف کنید. سپس میتوانید از آن توابع در برنامه خود استفاده کنید. با شرح یک مثال قالب فوق را بهتر توضیح میدهیم.
فرض کنید میخواهید دستوری به سیستم بدهید، که سهامی را که قیمت پایانی و آخرین قیمتش بیشتر از ۱۰۰۰ باشد را به شما نشان دهد. با توجه به جمله بالا میفهمیم یک سهم در صورتی به ما نشان داده میشود که دو شرط در آن برقرار باشد.
آخرین قیمت (PL) آن بزرگتر از ۱۰۰۰ باشد.
قیمت پایانیش (PC)نیز از ۱۰۰۰ بزرگتر باشد.
اگر این دو شرط با هم برقرار بود سهم را به من نشان بده، اگر یکیش برقرار نبود، سهم را نشان نده.
در ادامه سعی میکنیم مواردی را که در نوشتن فیلترهایی بهتر به ما کمک میکنند را توضیح دهیم.
اگر بخواهیم یک متغیر را در فیلتر مشخص کنیم و سپس دستوراتی در ارتباط با آن متغیر وارد سیستم کنیم از کلمه Var استفاده میکنیم. این سه حرف از کلمه انگلیسی Variable به معنای متغیر گرفته شده است. برای مثال میخواهیم تعریف کنیم و یک دستور ساده به سیستم بدهیم. فرض کنید بخواهیم بگوییم که متغیر X برابر است با یک عدد مشخص، مثلا هفت. برای تعریف این عبارت در قسمت فیلترنویسی سایت دستور زیر را وارد میکنیم.
;Var x = 7
در مقاله قبل عملگرها را بهصورت کلی معرفی کردیم. در این مقاله انواع آنها را به تفکیک معرفی میکنیم. در شکل زیر انواع مختلف عملگرهایی که امکان استفاده در سایت را دارند، میبینید.
انواع عملگرها
عملگرهای محاسباتی
همانطور که میبینید پنج عملگر اول جدول صفحه بعد، یعنی جمع، تفریق، ضرب، تقسیم و باقیمانده تقسیم از عملگرهای محاسباتی هستند که میتوان از آنها برای نوشتن فیلترهای مختلف استفاده کرد.
برای مثال اگر بخواهید دستوری بدهید تا سیستم، سهمهایی که مجموع قیمت پایانی دیروز و امروزشان بیشتر از ۱۰۰۰ ریال باشد، را به شما نشان دهد؛ به این صورت مینویسیم.
(py) + (pl) > 1000
و یا اگر بخواهیم بگوییم که ارزش معاملات را تقسیم بر حجم معاملات کن و به من نمایش بده، دستور را بهشکل زیر مینویسیم.
(tval) / (tno)
عملگرهای منطقی
همانطور که در جدول بالا میبینید، تنها سه نوع عملگر منطقی و، یا و نقیض در این نوع فیلترنویسی کاربرد دارد.
برای اینکه به سیستم بگوییم، سهمهایی را که آخرین قیمت (PL) آنها و قیمت پایانیشان (PC) بیشتر از ۱۰۰۰ باشد را به من نشان بده، دستور را مثل دستور زیر مینویسیم.
(pl) > 1000 && (pc)>1000
توجه داشته باشید که هنگام استفاده از دو عملگر منطقی «و» و «یا» بین دو جمله، باید از دو علامت && و || استفاده کرد.
مثال: به دستور زیر توجه کنید، این دستور چه فرمانی به سیستم میدهد؟
! ( (pl) - (py) > 100)
(pl) - (py)، این قسمت از دستور بالا، میگوید که ابتدا از آخرین قیمت امروز، قیمت دیروز سهم را کم کن؛ اگر بزرگتر از ۱۰۰ بود نام سهم را به ما نشان بده. تا این قسمت تنها توضیحات داخل پرانتز را گفتیم. اگر بخواهیم این توضیحات را کامل کنیم. با توجه به علامت تعجبی که بیرون پرانتز قرار دارد و بیانگر مفهوم نقض است، میتوانیم بگوییم که این علامت اطلاعات داخل پرانتز را نقض میکند و میگوید اگر تفاضل قیمت امروز و قیمت دیروز بیشتر از ۱۰۰ واحد بود، آن سهم را به من نشان نده.
عملگرهای رابطهای
آخرین دسته از عملگرها، عملگرهای رابطهای هستند که انواع آنها را در جدول بالا میبینید. عملگرهایی مانند مساوی، کوچکتر، بزرگتر، کوچکتر مساوی، بزرگتر مساوی و مخالف از عملگرهای پرکاربرد رابطهای هستند.
همانطور که در استفاده از دو عملگر منطقی «و» و «یا» گفتیم، برای استفاده از عملکرد رابطهای مساوی نیز باید از دو علامت مساوی بهصورت پشتسر هم استفاده کرد.
برای مثال اگر بخواهیم به سیستم دستور دهیم، سهمهایی که آخرین قیمتشان با قیمت پایانی برابر است را به ما نشان بده، بهشکل زیر عمل میکنیم.
(pl) == (pc)
اگر بخواهیم بگوییم سهمهایی را که تفاضل قیمت دیروزشان از آخرین قیمت امروز بزرگتر یا مساوی، ۱۰۰ باشد را به ما نشان بده باید دستور زیر بهکار بریم.
(pl) - (py) >= 100
در آخرین مثال این بخش، علامت مخالف و نحوه بهکار بردن آن را در یک دستور توضیح میدهیم. مثلا بخواهیم به سیستم دستور بدهیم که سهمهایی که آخرین قیمتشان با قیمت پایانی برابر نیست را به من نشان بده، عبارتی مانند زیر مینویسیم.
(pl) != (pc)

هنگام فیلترنویسی به تقدم عملگرها دقت کنید، هنگام نوشتن یک دستور اولویت با ضرب و تقسیم است. بعد از آن نوبت به جمع و تفریق میرسد. میتوانید برای راحتی کار از پرانتز استفاده کنید.
انواع توابع
توابع از پیش آماده شده در سایت Tsetmc محدود است. قصد داریم در ادامه چندتا از این توابع را معرفی کنیم.
توضیح | تابع |
---|---|
تابع قدر مطلق x | Math.abs(x) |
ایکس را به نزدیکترین عدد صحیح بیشتر از خود گرد میکند. | Math.ceil(x) |
این تابع e را به توان ایکس میرساند. | Math.exp(x) |
ایکس را به نزدیکترین عدد صحیح کمتر از خود گرد میکند. | Math.floor(x) |
لگاریتم ایکس بر پایه e را نشان میدهد. | Math.log(x) |
بزرگترین عدد در متغیرهای ورودی که وارد میکنیم را نشان میدهد. | Math.max(x,y,z,.....,n) |
کوچکترین عدد در متغیرهای ورودی که وارد میکنیم را نشان میدهد. | Math.min(x,y,z,.....,n) |
ایکس را به توان y میرساند. | Math.pow(x,y) |
ایکس را به نزدیکترین عدد صحیح گرد میکند. | Math.round(x) |
جذر ایکس را به ما نشان میدهد. | Math.sqrt(x) |
اولین تابع از پیش آماده در سایت که در جدول بالا هم آن را میبینید، تابع قدر مطلق (Math.abs(x است. این تابع دستور میدهد که قدر مطلق، عددی که بجای ایکس قرار دارد را به من نشان بده. ما میتوانیم بجای ایکس هر عبارت دیگری مثل یک معادله قرار دهیم.
تابع قدرمطلق را نمیتوان جزء توابع پرکاربرد دانست. اما در این قسمت نحوه نوشتن و وارد کردن اطلاعات به درون آن را توضیح میدهیم تا با روند کلی آشنا شوید.
ابتدا قالب کلی فیلترنویسی را از سایت کپی میکنیم. توجه داشته باشید که مثال زیر یک فیلتر نیست و تنها نحوه نوشتن و تعریف تابع را نشان میدهد.
(cfield0)= math.abs(x)
برای تمامی فرمولهای موجود در جدول بالا به همین صورت و در همین قالب، فرمولها را تعریف میکنیم.
در قسمت اول مقاله گفتیم که برای ایجاد ستون مورد نظر در قالب نمایش، اگر محتوایی که میخواهیم در آن ستون نشان داده شود، بهطور پیشفرض در آن قسمت تعریف نشده باشد گزینه cfield0 را انتخاب میکنیم.
بعد وارد قسمت فیلترنویسی میشویم و به تعریف اطلاعاتی که میخواهیم در آن خانه داده شود میپردازیم. در مثال بالا ما میگوییم قدر مطلق عدد منفی دو را مثبت کن، سپس مثبت شده آن را در cfield0 نمایش بده.
ممکن است شما بخواهید تابعی را معرفی کنید که در سایت تعریف نشده است. راهکار چیست؟
همانطور که گفتیم برای اینکه دیدهبان اطلاعات خاصی را به ما نشان دهد، ابتدا وارد قالب نمایش میشویم و ستونهای مدنظرمان را انتخاب میکنیم. توجه داشته باشید که شما تنها میتوانید ۳ ستون جدید که در سیستم تعریف نشده را تعریف کنید. بعد از ایجاد تغییرات مورد نظرمان وارد قسمت فیلترنویسی میشویم و فیلترمان را تعریف میکنیم.
در این قسمت میخواهیم نحوه تعریف یک تابع را به شما توضیح دهیم.
تعریف تابع
برای جلوگیری از ایجاد اشتباه باز هم میتوانید، قالب کدنویسی را از سایت کپی و در این قسمت جایگذاری کنید. میتوانید به صورت جدا هم بنویسید.
فرض کنید میخواهیم تابعی را تعریف کنیم که طی ۲۱ روز گذشته، میانگین کمترین قیمت را پیدا کند و سپس آن را نشان دهد. ابتدا وارد ساخت قالب میشویم
در مثال زیر ابتدا یک تابع تعریف میشود که کمترین قیمت ۲۱ روز را حساب می کند و سپس از آن تابع در کد استفاده می شود:
true==function()
{
var MinPrice=function(){
var min=[ih][0].PriceMin;
var ipos;
for(ipos=0;ipos<21;ipos++)
if(min>[ih][ipos].PriceMin)
min=[ih][ipos].PriceMin;
return min;
};
if((pl)<MinPrice())
{
return true;
}
else
{
return false;
}
}()
در مثال بالا دیدید که ابتدا تابع را تعریف کردیم. بعد از بیان اسم تابع، از طریق var به توضیح متغیرها پرداختیم. متغیرها از صفر شروع میشوند و تا روز ۲۱ ام، یک روز یک روز به آنها اضافه میشود.
(++for(ipos=0 ; ipos<=21 ; ipos در این قسمت میگوییم متغیر i از صفر شروع شود و تا روز ۲۱ ادامه پیدا کند و یک روز یک روز به آن اضافه شود.
در ادامه تعریف میکنیم که اگر قیمت آخرین معامله کمتر از قیمت تابع باشد آن سهم را به ما نشان بده، اگر بیشتر باشد آن سهم را نمایش نده.
حال به قسمت تعریف برنامه رسیدیم، در این قسمت تعیین میکنیم که در ستونهایمان، که در بخش قالب نمایش آنها را مشخص میکنیم چه چیزی نشان داده شود.
در ادامه نمونهای از فیلترهای پرکاربرد در ارتباط با صف خرید را میبینید، سعی کنید برای یادگیری بیشتر خودتان این فیلترها را بنویسید و با اینجا چک کنید. همچنین میتوانید با توجه به این عبارات، همین فرمولها برای صف فروش بنویسید.
سهمهایی را نشان بده که در آستانه صف خرید هستند.
(po1)<= (tmax) && (po1)>= (tmax)-1 && (pd1)<(tmax)
سهمهایی که صف خریدشان کم حجم است را نشان بده.
(pd1) == (tmax) && (qd1)>=0.2*(bvol) && (qd1)<=(bvol)
سهمهایی که فردا احتمالا صف خرید هستند را نشان بده.
(tno)>50&&(tvol)>(bvol)&&(bvol)<=4000000&&(plp)>=(pcp)+1.5&&(eps)>0
در فیلترنویسی تعریف برنامه کار راحتی است. اما تعریف یک تابع میتواند کمی دشوار باشد. قبل از اینکه شروع به تعریف یک تابع کنید، بهتر است دستوراتی را که میخواهید بدهید، ابتدا روی کاغذ نوشته و سپس آن را به زبان کامپیوتر برگردانید.
نظرات ارزشمند شما
لطفا اگر این مقاله برایتان مفید بود، سوال و یا نظری درباره آن داشتید، در انتهای همین صفحه نظر خود را ثبت بفرمایید.
سلام ممنون از شما
در برخی ازکدها ترتیب و تعداد پرانتز ها به چه صورت است ؟
چون در یک خط کد ترکیبی چندین پرانتز در ابتدا یا انتها درج میشه، در حالی که یک تکه از کد نیازی به پرانتز بیشتر نداره
به عنوان مثال:
ct).Buy_I_Volume)/((ct).Buy_CountI))*(pc))/(((ct).Sell_I_Volume)/(((ct).Sell_CountI))*(pc))>2))))
سلام . وقت بخیر. من میخوام فیلتری بنویسم که صف فروش در حال جمع شدن را نشون بده. تا مرحله تشخیص صف فروش رفتم. ولی نمی تونم حجم صف فروش را ذخیره کنم تا بتونم چند دقیه بعد مقایسه کنم ببینم کم شده یا نه؟ امکان اینکه بعد ار تعریف فیلتر حجم صف تو یه فیلد ذخیره بشه هست؟ ممنون میشم جواب بدین
سلام
فیلتری که دنبالش هستید رنج مثبت هست که تو دوره آموزش داده شده. فایل متنی فیلترها هم بین جلسه ۱۰ و ۱۱ برای دانلود قرار داده شده.
اما درسایت tsetmc قابلیت سیو کردن فیلتر وجود ندارد. برای اطمینان بیشتر فایل متنی فیلتر را در نوت پد کامپیوتر خودتان ذخیره کنید.
با سلام.آیا امکان ساخت قالب برای هرفیلتر به صورت جدا وجود دارد؟گاهی اوقات هر فیلتر قالب خاص خود را نیاز دارد برای نمایش.چگونه می توان برای هر فیلتر قالب نمایش مخصوص به همان فیلتر را ایجاد و ذخیره کرد تا هنگام اجرای آن فیلتر با قالب مخصوص خودش نمایش داده شود؟ لطفاً کمک کنید
سلام و درود
ممنون از سوال خوبتون
متاسفانه در سایت tsetmc تنها یک قالب شخصی میتوانید درست کنید.برای اینکار از منوی دیده بان بازار گزینه قالب نمایش را انتخاب کنید و از انتهای منوی باز شده گزینه ساخت قالب را بزنید.
سلام
من میخوام در یک سلول چندین عدد محاسبه شده را زیر هم دیگه با رنگهای مختلف بنویسم
می دونم چنین چیزی ممکنه و بعضیا انجام دادن
چطور ممکنه اینکار؟ دستورش چیه؟
من تفاوت بین بودن علامت نقیض و نبودنش متوجه نشدم. مثل این قسمت مقاله که معنای هر دو حالتش یکیه: ! ( (pl) – (py) > 100) (pl) – (py)، این قسمت از دستور بالا، میگوید که ابتدا از آخرین قیمت امروز، قیمت دیروز سهم را کم کن؛ اگر بزرگتر از ۱۰۰ بود نام سهم را به ما نشان بده. تا این قسمت تنها توضیحات داخل پرانتز را گفتیم. اگر بخواهیم این توضیحات را کامل کنیم. با توجه به علامت تعجبی که بیرون پرانتز قرار دارد و بیانگر مفهوم نقض است، میتوانیم بگوییم که این علامت اطلاعات داخل پرانتز را… ادامه مطلب »
سلام
خیر. این عبارت با علامت ! به ما میگوید که اگر حاصل تفاضل >۱۰۰ نباشد، به ما نمایش بده.
در این مورد میتوانیم به جای <100 ! از علامت <100 استفاده کنیم. اما کاربرد آن در جایی است که مثلا میخواهیم بگوییم که حاصل تفاضل فوق صفر نباشد.
مثلا:
(pl-py =0)!