دستور العمل ایجاد ستون و فیلتر با رابط گرافیکی

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

نویسنده: آپشن بازتاریخ انتشار: 1405/02/01آخرین به‌روزرسانی: 1405/05/2516 دقیقه مطالعه
اشتراک‌گذاری:

یک فرمول خوب معمولاً چند بار در روز نیاز به دستکاری دارد — حداقل حجم، آستانهٔ دلتا، روشن و خاموش کردن کارمزد. اگر برای هر تغییر باید کد را باز کنید، همان فرمول عملاً بلااستفاده می‌شود.

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

1. تنظیمات (Settings)

هر خانواده از ثابت‌ها قاعدهٔ نام‌گذاری خودش را دارد؛ این یکی مخصوص ثابت‌هایی است که یک محاسبه را روشن یا خاموش می‌کنند.

چرا اسم متغیر اهمیت دارد آپشن‌باز کد شما را اجرا می‌کند، اما نمی‌داند کدام عدد را می‌خواهید در حین معامله دست بزنید اسم، تنها راه اعلام این خواسته است پیشوند یعنی: این ثابت، پیچِ من است بقیهٔ متغیرها بخشی از محاسبه‌اند و دست‌نخورده می‌مانند همین جداسازی است که پنل را کوتاه و قابل استفاده نگه می‌دارد
آپشن‌باز کد را اجرا می‌کند اما نمی‌داند کدام عدد را می‌خواهید در حین معامله دست بزنید — اسم، تنها راه اعلام این خواسته است.
چهار خانواده، چهار کار متفاوت SETTING_ محاسبه را روشن یا خاموش می‌کند FILTER_ ردیف‌ها را کم می‌کند SHOW_ بخشی از خروجی را نشان می‌دهد SORT_ ترتیب نتایج را می‌چیند اشتباه گرفتنشان خطا نمی‌دهد؛ فقط پیچ در جای غلط ظاهر می‌شود
چهار خانواده چهار کار متفاوت می‌کنند — و اشتباه گرفتنشان خطا نمی‌دهد، فقط پیچ در جای غلط ظاهر می‌شود.

قوانین تعریف تنظیمات در رابط کاربری

  • پیشوند SETTING_ الزامی است
  • نام متغیر باید با حروف بزرگ باشد
  • مقدار متغیر فقط boolean (true/false)
  • توضیحات به صورت کامنت کنار متغیر

مثال‌های کاربردی

// ❌ نادرست - در UI نمایش داده نمی‌شوند
const useYTM = false;
const ShowPricePoints = true;

// ✅ درست - در UI نمایش داده می‌شوند
const SETTING_YTM = false;           // محاسبه بازده سالانه
const SETTING_PRICE_POINTS = true;   // نمایش نقاط قیمتی

2. فیلترها (Filters)

نوع مقدار، شکل کنترل را تعیین می‌کند true / false تیک روشن/خاموش 10 جعبهٔ عدد 'profit' // [ ... ] فهرست کشویی پس تغییر مقدار پیش‌فرض، گاهی کنترل را هم عوض می‌کند یک ثابتِ عددی که به true تغییر کند، دیگر جعبهٔ عدد نیست و آستانه‌ای که تنظیم کرده بودید از پنل ناپدید می‌شود
نوع مقدار شکل کنترل را می‌سازد، پس تغییر مقدار پیش‌فرض گاهی کنترل را هم عوض می‌کند — و آستانهٔ قبلی از پنل ناپدید می‌شود.
اسم غلط، خطا نمی‌دهد const minReturn = 10; فرمول درست کار می‌کند اما هیچ کنترلی نمی‌سازد const FILTER_MIN_RETURN = 10; همان محاسبه به‌علاوهٔ یک جعبهٔ عدد هیچ پیام خطایی در کار نیست خروجی هر دو یکی است و فرمول ذخیره می‌شود تنها نشانه، نبودنِ ⚙️ در سرستون است و نبودنِ یک چیز، سخت‌تر از بودنِ یک خطا دیده می‌شود
اسم غلط خطا نمی‌دهد و خروجی هم عوض نمی‌شود — تنها نشانه، نبودنِ ⚙️ در سرستون است، و نبودن یک چیز سخت‌تر از بودنِ یک خطا دیده می‌شود.

قوانین تعریف فیلترها

  • پیشوند FILTER_ الزامی است
  • نام متغیر باید با حروف بزرگ باشد
  • مقدار متغیر می‌تواند boolean یا number باشد
  • توضیحات به صورت کامنت کنار متغیر

مثال‌های کاربردی

// ❌ نادرست - در UI نمایش داده نمی‌شوند
const minReturn = 10;
const showInResults = true;

// ✅ درست - در UI نمایش داده می‌شوند
const FILTER_MIN_RETURN = 10;        // حداقل سود
const FILTER_SHOW = true;            // فیلتر در نمایش خروجی
const FILTER_PRICE_ZONE = 2;         // محدوده قیمتی [0 = همه] [1 = زیر اعمال اول]

3. گزینه‌های نمایش (Show Options)

کامنت کنار متغیر، برچسبِ پنل است const SHOW_PNL_INFO = true; // نمایش اطلاعات سود و زیان نمایش اطلاعات سود و زیان بدون کامنت، همان نام بزرگ لاتین در پنل می‌نشیند که برای خودتان قابل خواندن است و برای بقیه نه کامنت اینجا توضیح کد نیست — بخشی از رابط کاربری است
کامنت کنار متغیر مستقیم در پنل می‌نشیند — اینجا کامنت توضیح کد نیست، بخشی از رابط کاربری است.

قوانین تعریف گزینه‌های نمایش

  • پیشوند SHOW_ الزامی است
  • نام متغیر باید با حروف بزرگ باشد
  • مقدار متغیر فقط boolean (true/false)
  • توضیحات به صورت کامنت کنار متغیر

مثال‌های کاربردی

// ❌ نادرست - در UI نمایش داده نمی‌شوند
const showPnL = true;
const DisplayProbability = false;

// ✅ درست - در UI نمایش داده می‌شوند
const SHOW_PNL_INFO = true;          // نمایش اطلاعات سود و زیان
const SHOW_PROBABILITY = true;        // نمایش احتمال موفقیت
const SHOW_PRICE_POINTS = true;       // نمایش نقاط قیمتی

4. مرتب‌سازی نتایج (Sorting)

مرتب‌سازی، دو ثابت می‌خواهد SORT_BY بر اساس چه چیزی 'profit' SORT_DIR از کدام سر 'asc' | 'desc' سود ماهیانه : profit ضرر : loss کامنتِ داخل قلاب، همین جفت‌های برچسب و مقدار را می‌سازد بدون آن، ثابت هست ولی انتخابی برای عوض کردنش نیست
مرتب‌سازی دو ثابت می‌خواهد و کامنتِ داخل قلاب گزینه‌های فهرست را می‌سازد — بدون آن، ثابت هست ولی انتخابی برای عوض کردنش نیست.

برای استفاده از سیستم مرتب‌سازی، دو متغیر اصلی زیر باید تعریف شوند:

1. فیلد مرتب‌سازی (SORT_BY)

const SORT_BY = 'profit';    // [سود ماهیانه:profit] [نسبت سود به ضرر:risk_reward] [ضرر:loss] [موقعیت فعلی:current] [احتمال موفقیت:probability]

2. جهت مرتب‌سازی (SORT_DIR)

const SORT_DIR = 'desc';     // [صعودی:asc] [نزولی:desc]
  • asc: مرتب‌سازی صعودی (از کوچک به بزرگ)
  • desc: مرتب‌سازی نزولی (از بزرگ به کوچک)

5. نمایش خروجی

مسیر ساخت یک ردیف خروجی output هر بخش زیر کلید خودش displayOrder ترتیب نمایش finalOutput رشتهٔ نهایی ردیف items.push({ probability, output: finalOutput.join('') }) هر ردیف در همین سه گام ساخته می‌شود و بعد کنار بقیه می‌نشیند مرتب‌سازی بعد از پر شدنِ کل فهرست انجام می‌شود، نه حین ساخت
هر ردیف در سه گام ساخته می‌شود و بعد کنار بقیه می‌نشیند — مرتب‌سازی بعد از پر شدنِ کل فهرست انجام می‌شود، نه حین ساخت.
هر کلیدِ خروجی باید متغیر SHOW_ خودش را داشته باشد if (eval(key) === true) finalOutput.push(output[key]) SHOW_PNL_INFO هم در پنل تیک دارد هم در خروجی چاپ می‌شود PNL_INFO کلید در خروجی هست ولی هیچ‌وقت چاپ نمی‌شود دروازه، وجودِ همان نام به‌عنوان یک متغیر است پس یک غلط تایپی در کلید، آن بخش را بی‌سروصدا حذف می‌کند و بقیهٔ ردیف کاملاً درست ساخته می‌شود
دروازهٔ چاپ، وجودِ همان نام به‌عنوان متغیر است — یک غلط تایپی در کلید، آن بخش را بی‌سروصدا حذف می‌کند و بقیهٔ ردیف درست ساخته می‌شود.
یک فرمول، دو نقش if (FILTER_RESULT === true) { ... } else { ... } به‌عنوان فیلتر خروجی یک درست/غلط است و ردیف می‌ماند یا می‌رود به‌عنوان ستون خروجی متنِ قالب‌بندی‌شده است و در سلول نشان داده می‌شود همان محاسبه دو بار نوشته نمی‌شود یک ثابت تصمیم می‌گیرد که نتیجه غربال شود یا نمایش داده
همان محاسبه دو بار نوشته نمی‌شود — یک ثابت تصمیم می‌گیرد که نتیجه غربال شود یا نمایش داده.

برای نمایش نتایج، باید یک آبجکت با نام output ایجاد کنید که شامل تمام بخش‌های تعریف شده در SHOW_   و خروجی هایی که وابستگی به تنظیمات ندارند باشد.

5.1. ساختار پایه خروجی

// تعریف آبجکت خروجی
const output = {
base: showDetail(writeOption.namad, namadNo(writeOption.namad))
};

// اضافه کردن محاسبات به آبجکت
output["SHOW_PNL_INFO"] = "محاسبات سود و زیان";
output["SHOW_CAP_COVERATE"] = "اطلاعات پوشش سرمایه";
output["SHOW_CAPITAL_INFO"] = "اطلاعات سرمایه";

5.2. ترتیب نمایش خروجی

آرایه displayOrder برای کنترل ترتیب نمایش اطلاعات استفاده می‌شود و به صورت خودکار مقداردهی می‌شود.
const displayOrder = [
'SHOW_PNL_INFO',
'SHOW_CAP_COVERATE',
'SHOW_CAPITAL_INFO',
// ... سایر موارد
];

5.3. ساخت خروجی نهایی

  1. ایجاد آرایه خروجی با مقدار پایه
  2. اضافه کردن سایر مقادیر بر اساس ترتیب نمایش
  3. اضافه کردن آیتم به لیست نتایج

// ساخت خروجی نهایی
const finalOutput = [output.base];
displayOrder.forEach(key => {
if (eval(key) === true) {
finalOutput.push(output[key]);
}
});

// اضافه کردن به لیست نتایج
items.push({
probability,
output: finalOutput.join('')
});

5.4. نمایش نتایج نهایی

// نمایش خروجی با در نظر گرفتن فیلترها
if (FILTER_RESULT === true) {
isFilterMatched;
} else {
sortAndFormatResults(items, SORT_BY, SORT_DIR, false);
}

تابع sortAndFormatResults

این تابع برای مرتب‌سازی و قالب‌بندی نتایج جهت نمایش استفاده می‌شود.

پارامترها

پارامتر نوع توضیحات پیش‌فرض
items آرایه آرایه‌ای از آیتم‌ها که هر کدام شامل output و مقدار مرتب‌سازی هستند -
sortBy رشته فیلدی که مرتب‌سازی بر اساس آن انجام می‌شود -
sortDir رشته جهت مرتب‌سازی ('asc' یا 'desc') -
displayInline boolean نمایش افقی یا عمودی نتایج false

نکات مهم:

  • تمام کلیدهای استفاده شده در output باید در بخش "گزینه‌های نمایش" تعریف شده باشند
  • مقادیر displayOrder به صورت خودکار مدیریت می‌شوند
  • فقط مواردی که SHOW_ آنها true است در خروجی نمایش داده می‌شوند

مقالات مرتبط

ستون محاسباتی در دیده‌بان | ساخت ستون با فرمول‌نویسی و مثال

چطور در دیده‌بان آپشن‌باز ستون محاسباتی بسازید: از دکمه فرمول‌نویسی تا نوع ستون، return، افزودن به جدول، و چند مثال عملی (اسپرد، ارزش ذاتی، فاصله تا اعمال، دلتا).

دیده‌بان اختیار معامله

راهنمای دیده‌بان اختیار معامله — فیلتر، ستون سفارشی، فرمول‌نویسی و اتصال به نمودار استراتژی.

استراتژی‌های اختیار معامله در دیده‌بان آپشن‌باز | فهرست کامل، افزودن و تحلیل سود و زیان

فهرست کامل استراتژی‌های اختیار معامله در دیده‌بان آپشن‌باز — کاوردکال، اسپرد، استرادل، باکس و … — همراه با راهنمای تصویری افزودن ستون، تنظیم فیلترها و باز کردن نمودار سود و زیان.

پیاده‌سازی کاوردکال در دیده‌بان آپشن‌باز

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

مدیریت خروجی و فیلتر فرمول | راهنمای تنظیمات ویژوال دیده‌بان

آموزش گام‌به‌گام طراحی تنظیمات ویژوال: آیکن تنظیمات، کنترل‌های عدد، تیک، لیست کشویی، چندانتخابی، مرتب‌سازی و ترتیب چیدمان ستون‌ها.

ایجاد فیلدهای شخصی و دسترسی به آنها در فرمول‌نویسی

آموزش ساخت پرتفوی اختصاصی، تعریف فیلدهای شخصی (تعداد، قیمت خرید/فروش، یادداشت) و دسترسی پویا به آن‌ها در فرمول‌ها و ستون‌های دیده‌بان.

فیلتر هوشمند قراردادهای اختیار معامله با شرایط بهینه معاملاتی

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

راهنمای دستیار هوش مصنوعی آپشن‌باز | فرمول‌نویسی دیده‌بان داخل خود اپ

دستیار هوش مصنوعی آپشن‌باز کجاست، چطور کنار ادیتور فرمول‌نویسی باز می‌شود، چه فرقی با هوش مصنوعی بیرونی دارد و چه کاری از آن برنمی‌آید — با پنج قاعدهٔ پرسیدن و چک‌لیست پرامپت.

دیدگاه‌ها و پرسش‌ها

اگر سوال یا ابهامی در رابطه با این مطلب دارید، همین‌جا بپرسید؛ کارشناسان ما پاسخ می‌دهند.

تجربه یا نکته‌ای دارید؟ نوشتنش به بقیهٔ کاربران هم کمک می‌کند.

پرسش‌ها و نظرات کاربران

هنوز پرسشی ثبت نشده — شما اولین نفر باشید!

سوال یا نظرتان را در فرم بالا بنویسید؛ پاسخی که می‌گیرید برای کاربران بعدی هم می‌ماند.