وقتی در کد فرمول یا استراتژی خود پارامترهای ویژوال تعریف میکنید، کنار نام ستون یا فیلتر شما در جدول دیدهبان آیکن ⚙️ تنظیمات (مدیریت خروجی و فیلتر) ظاهر میشود. این قابلیت به کاربران اجازه میدهد بدون نیاز به ویرایش کد جاوااسکریپت، مقادیر عددی، تیکها، لیستهای انتخابی و نحوهٔ مرتبسازی را بهصورت کاملاً تعاملی و ویژوال تغییر دهند.
توضیح مختصر و ایدهٔ اصلی
موتور فرمولنویسی دیدهبان از روی ثابتهای تعریفشده با حروف بزرگ و کامنتهای جلوی آنها تشخیص میدهد که چه کنترلی در پنجرهٔ تنظیمات ظاهر شود. با تغییر مقادیر در پنجرهٔ ویژوال، مقدار آن ثابتها مستقیماً درون کد ذخیره شدهٔ شما بهروزرسانی میشود.
آیکن تنظیمات وقتی میآید که هر دو شرط باشند: نام با حروف بزرگ و زیرخط، و یک کامنت فارسی جلوی همان خط که برچسب کنترل میشود.
شروع سریع با یک مثال ساده: حداقل حجم معاملات
برای آشنایی سریع، فرمول زیر را در دیدهبان به عنوان ستون ذخیره کنید و سپس روی آیکن ⚙️ ستون کلیک کنید:
تغییر مقدار در پنجرهٔ ویژوال، همان ثابت را درون کد ذخیرهشدهٔ شما بازنویسی میکند — تنظیمات جایی جدا از کد نگهداری نمیشود.
const FILTER_MIN_VOLUME = 100; // حداقل حجم
const FILTER_RESULT = false;
const FILTER_SHOW = true;
let vol = option.ti.volume;
// اگر فرمول به عنوان فیلتر ردیف فعال باشد:
if (FILTER_RESULT) return vol >= FILTER_MIN_VOLUME;
// نمایش مقدار ستون:
return vol;
این مثال چطور کار میکند؟
طراحی کنترل عددی: متغیر const FILTER_MIN_VOLUME = 100; در تب فیلترها یک جعبه ورودی عدد با برچسب «حداقل حجم» ایجاد میکند. با تغییر عدد در پنجره، مقدار این متغیر در لحظه تغییر کرده و محاسبات جدول بهروز میشود.
سوئیچ نتایج (FILTER_RESULT): این متغیر یک سوئیچ سیستمی است. وقتی کاربر در پنجره تنظیمات سوئیچ فیلتر را روشن کند، مقدار FILTER_RESULT به true تبدیل شده و فرمول به عنوان فیلتر ردیفهای جدول عمل میکند (قراردادهای با حجم کمتر از حداقل مشخص شده را حذف میکند).
سوئیچ نمایش سلول (FILTER_SHOW): وقتی فیلتر غیرفعال است اما میخواهید ردیفهایی که شرط را ندارند خانه ستونشان خالی بماند، با ترکیب این سوئیچ میتوانید نمایش سلول را کنترل کنید.
1) چطور آیکن تنظیمات در سرستون ظاهر شود؟
سیستم زمانی متوجه نیاز به تنظیمات ویژوال میشود که حداقل یکی از متغیرهای خود را با حروف بزرگ و زیرخط تعریف کرده و یک کامنت فارسی در جلوی آن نوشته باشید. پیشوندهای مجاز عبارتند از:
سه پیشوند سه بخش پنجرهاند: FILTER_ فیلترها، SHOW_ نمایش و چیدمان، SETTING_ محاسبات. پیشوند جای کنترل را میگوید، نه نوعش را.
FILTER_... → کنترل را در بخش فیلترها قرار میدهد.
SHOW_... → کنترل را در بخش نمایش و چیدمان قرار میدهد.
SETTING_... → کنترل را در بخش محاسبات و تنظیمات قرار میدهد.
const FILTER_MIN_VOLUME = 100; // حداقل حجم ✅ آیکن تنظیمات ظاهر میشود
const filter_min_volume = 100; // ❌ حروف کوچک — سیستم نادیده میگیرد
const SORT_BY = 'volume'; // ❌ مرتبسازی بهتنهایی آیکن تنظیمات را نمیآورد
2) ورودی عددی (Number Input)
اگر مقدار اولیه متغیر یک عدد باشد، یک کنترل ورودی عددی ساخته میشود. همچنین اگر مقدار اولیه خالی باشد ('') اما در نام متغیر کلماتی نظیر MIN، MAX، DISTANCE، PERCENT، FEE یا STRIKE وجود داشته باشد، سیستم بهطور هوشمند آن را ورودی عددی در نظر میگیرد.
نوع کنترل هیچجا اعلام نمیشود: از مقدار اولیه (عدد، بولین، رشته) و از کامنت (براکت، multi، title) استنتاج میشود.
اگر مقدار اولیه یک متغیر برابر با true یا false باشد (و گزینهای درون براکت در کامنت نباشد)، یک دکمهٔ تیک روشن/خاموش برای آن ساخته میشود.
const SHOW_VOLUME = true; // نمایش حجم در خروجی
const SETTING_FEE = false; // اعمال کارمزد معاملات در محاسبات
4) سوئیچهای ویژه فیلتر (System Switches)
دو متغیر با نامهای دقیق زیر، به جای تیک معمولی، به شکل سوئیچ زیبا و اختصاصی فیلتر نمایش داده میشوند:
FILTER_RESULT ردیفهای نامعتبر را از جدول حذف میکند؛ FILTER_SHOW ردیف را نگه میدارد و فقط سلولش را خالی میگذارد.
FILTER_RESULT — سوئیچ فیلتر اصلی. روشن کردن این سوئیچ در پنجره تنظیمات، فرمول شما را مستقیماً به لیست فیلترهای فعال کل جدول اضافه میکند تا ردیفهای نامعتبر را حذف کند.
FILTER_SHOW — سوئیچ نمایش خروجی. این سوئیچ نشان میدهد که آیا ستون خروجی برای ردیفهایی که در شرط فیلتر صدق نکردهاند همچنان مقدار نمایش دهد یا خیر.
const FILTER_RESULT = false; // نتایج (سوئیچ فیلتر اصلی)
const FILTER_SHOW = true; // فیلتر در نمایش خروجی
5) لیست کشویی تکانتخابی (Dropdown Select)
برای ایجاد منوی کشویی، گزینههای انتخابی را داخل براکت [] در بخش کامنت خط بنویسید. به دو روش میتوانید گزینهها را تعریف کنید:
در براکت، شکل مقدار=برچسب کد را انگلیسی و پایدار نگه میدارد و منو را فارسی؛ یک براکت خالی هم گزینهٔ «بدون فیلتر» میسازد.
فقط مقدار: مقدار انتخاب شده با خود متن گزینه یکی خواهد بود.
رابطه مقدار=برچسب: مقدار ذخیره شده در کد با برچسب فارسی نمایش داده شده در منو متفاوت خواهد بود (روش پیشنهادی برای طراحی زیبا).
// روش اول: مقدار و برچسب یکسان هستند
const FILTER_STATE = 'OTM'; // وضعیت [ITM][OTM][ATM]
// روش دوم (بهتر): مقدار انگلیسی در کد ذخیره میشود، برچسب فارسی نمایش داده میشود
const SETTING_UA_PRICE = 'ask'; // مبنای قیمت [ask=سر خط عرضه] [last=آخرین معامله] [end=قیمت پایانی]
6) گزینه خالی یا پیشفرض در لیست (Empty/Default Option)
اگر بخواهید گزینهای به عنوان «بدون فیلتر» یا «همه» داشته باشید که مقدار خالی '' یا صفر را به کد بفرستد، کافی است یک براکت خالی [] در لیست گزینهها قرار دهید. سیستم آن را با برچسب خط تیره «-» نمایش میدهد.
اگر میخواهید کاربر بتواند همزمان چند گزینه را تیک بزند، کلمه کلیدی multi را در کامنت بنویسید. مقدار ذخیره شده در کد به صورت یک رشته متنی خواهد بود که گزینهها با ویرگول انگلیسی از هم جدا شدهاند (مثلاً '1,3'). در منطق فرمول باید این رشته را تفکیک کنید:
مقدار چندانتخابی یک رشتهٔ متنی با ویرگول است، نه آرایه — باید در کد تفکیکش کنید وگرنه هر مقایسهای نادرست میشود.
const FILTER_ZONES = '1,2'; // محدوده قیمتی multi [1=زیر اعمال] [2=بین اعمال] [3=بالای سربهسر]
// روش تفکیک و چک کردن در کد جاوااسکریپت:
const activeZones = String(FILTER_ZONES).split(',').map(z => z.trim()).filter(Boolean);
const isZoneValid = activeZones.length === 0 || activeZones.includes(String(myCurrentZone));
8) جعبه متن آزاد (Free Text Input)
اگر مقدار متغیر رشتهای باشد اما هیچ گزینهای درون براکت [] در کامنت تعریف نشده باشد، یک کادر ورود متن ساده برای کاربر ایجاد میشود (مثلاً برای ورود دستی یک نماد یا یک مقدار دلخواه).
const SETTING_TARGET_NAMAD = ''; // نماد پایه هدف
9) توضیحات راهنمای شناور (Tooltip)
اگر مایلید در پنجره تنظیمات تعاملی، توضیح کوچکی برای هر پارامتر نشان داده شود تا کاربر کاربرد آن را بداند، از کلمه کلیدی title=... در کامنت استفاده کنید. با نگه داشتن ماوس روی برچسب، این راهنما ظاهر میشود.
const FILTER_BE_DISTANCE = ''; // فاصله تا سربهسر title=عدد مثبت: قیمت سهم بالاتر از سربهسر است
10) لینک راهنمای اختصاصی بالای پنجره (Guide Link)
اگر فرمول شما پیچیده است و تمایل دارید یک لینک راهنمای جامع (مثلاً یکی از مقالات دانشنامه آپشنباز) را به آن متصل کنید، عبارت //link=آدرس_لینک را در خط اول یا دوم کد فرمول بنویسید. دکمهٔ «راهنما» در بالای پنجره ویژوال ظاهر خواهد شد.
//link=/pedia/راهنمای-فرمول-نویسی-استراتژی-آماده-دیده-بان-آپشن-226
const FILTER_MIN_VOLUME = 100; // حداقل حجم معاملات
11) مرتبسازی پیشرفته (SORT_BY / SORT_DIR)
برای فرمولهای پیشرفته یا استراتژیهایی که چندین خروجی را در یک خانهٔ جدول مرتب و چاپ میکنند (با استفاده از تابع سیستمی sortAndFormatResults)، میتوانید متغیرهای زیر را بنویسید تا مرتبسازی در پنجره تعاملی قابل تنظیم باشد:
SORT_BY و SORT_DIR بهتنهایی آیکن تنظیمات را نمیآورند — یک ثابت دیگر لازم است، حتی اگر مقدارش صفر باشد و کاری نکند.
SORT_BY — مشخص میکند کدام ویژگی عددی مبنای مرتبسازی ردیفها قرار گیرد (گزینهها را در براکت بنویسید).
SORT_DIR — جهت مرتبسازی را تعیین میکند: asc صعودی یا desc نزولی.
12) چیدمان، تیک نمایش و ترتیب کشیدنی (Display Order)
اگر فرمول شما بخشهای مختلفی را در خروجی نشان میدهد (مثلاً حجم، تلاطم ضمنی IV، ارزش ذاتی و غیره)، میتوانید برای هر بخش یک تیک نمایش با پیشوند SHOW_... بگذارید. با اضافه کردن آرایهٔ displayOrder به کد، کاربران میتوانند در تب «نمایش و چیدمان» ترتیب ستونها را با کشیدن و رها کردن (Drag & Drop) جابهجا کنند!
const SHOW_VOLUME = true; // نمایش حجم معاملات
const SHOW_IV = true; // نمایش تلاطم ضمنی (IV)
const SHOW_INTRINSIC = true;// نمایش ارزش ذاتی
// ترتیب اولیه چیدمان (این آرایه با کشیدن و رها کردن در پنجره بهطور خودکار ویرایش میشود):
const displayOrder = [
'SHOW_VOLUME',
'SHOW_IV',
'SHOW_INTRINSIC'
];
// ساخت بخشهای مختلف خروجی:
const segments = {
SHOW_VOLUME: SHOW_VOLUME ? `حجم: ${option.ti.volume}` : '',
SHOW_IV: SHOW_IV ? `تلاطم: ${option.iv ?? '-'}` : '',
SHOW_INTRINSIC: SHOW_INTRINSIC ? `ارزش ذاتی: ${Math.max(0, ua.ti.lastPrice - option.strike)}` : '',
};
// چسباندن بخشها به یکدیگر با ترتیب مشخص شده:
return joinDisplaySegments(segments, displayOrder, ' | ');
13) مثال جامع و کاربردی ترکیبی
در نهایت، نمونه زیر یک فرمول کامل و واقعی است که تمامی مفاهیم بالا را به صورت یکجا پیادهسازی کرده است. میتوانید آن را مستقیماً کپی و استفاده کنید:
جمعبندی: طراحی تنظیمات ویژوال در دیدهبان بسیار ساده است. کافیست متغیرهای خود را با نامهای بزرگ مانند FILTER_، SHOW_ یا SETTING_ معرفی کرده و در کامنت خط آنها، برچسب فارسی، براکتهای انتخاب [مقدار=برچسب] و کلمات کلیدی نظیر multi یا title= را بکار ببرید تا زیباترین و کارآمدترین ابزار کنترلی را در اختیار داشته باشید.
اگر سوال یا ابهامی در رابطه با این مطلب دارید، همینجا بپرسید؛ کارشناسان ما پاسخ میدهند.
تجربه یا نکتهای دارید؟ نوشتنش به بقیهٔ کاربران هم کمک میکند.
پرسشها و نظرات کاربران
۲ پیام
امیررضا گل میرزائی
07 دی 1404 - 23:37
سلام وقت بخیر
میخواستم در یک نگاه آپشن هائی که هم حجم بالای 2000 دارن و هم اینکه بالای 10 درصد نسبت به روز قبل افزایش داشتن را ببینم .
ممنون میشم راهنمایی بفرمایید .
تشکر
پشتیبانیپاسخ
27 تیر 1405 - 18:29
با فیلتر ستون در دیدهبان، بدون فرمول:
1. روی سرستون «حجم معاملات» آیکن فیلتر → عملگر «بیشتر از» → مقدار `2000`
2. روی سرستون «٪ تغییر آخرین» آیکن فیلتر → عملگر «بیشتر از» → مقدار `10`
هر دو همزمان با منطق AND اعمال میشوند و خروجی همان قراردادهایی است که حجم بالای ۲۰۰۰ دارند و نسبت به دیروز بیش از ۱۰٪ رشد کردهاند.
اگر منظورتان تغییر قیمت پایانی است، بهجای مورد ۲ از ستون «٪ تغییر پایانی» استفاده کنید. فیلترها را بعداً از chipهای «فیلترهای کاربر» هم میتوانید ویرایش یا حذف کنید.