گاهی اوقات معاملهگران نیاز دارند که اطلاعات اختصاصی خود (مانند تعداد قراردادهای خریداریشده، قیمت سرخط معامله شخصی، تاریخ ورود یا یادداشتهای تحلیل) را روی نمادهای مختلف دیدهبان ثبت کرده و سود و زیان شخصی خود را به صورت زنده رصد کنند. در این مقاله یاد میگیرید که چطور با استفاده از ابزار «تابع عمومی» در بخش فرمولنویسی پلتفرم، یک بانک اطلاعاتی شخصی (پرتفوی انتخابی) بسازید و از متغیرهای آن در محاسبات ستونها و فیلترها استفاده کنید.
چگونه در دیدهبان آپشنباز اجرا میشود؟
برای ساخت و مدیریت فیلدهای شخصی خود، گامهای زیر را دنبال کنید:
تابع عمومی یکبار نوشته میشود و از هر ستون و فیلتری صدا زده میشود — یعنی یک کتابخانهٔ مشترک دارید، نه عبارتی تکستونی.گام دوم و سوم هر دو از یک منبع میخوانند — با عوض کردن سبد، هیچکدام را دست نمیزنید، فقط تابع عمومی را.
در بالای جدول دیدهبان روی دکمهٔ فرمولنویسی کلیک کنید؛
در پنجرهٔ باز شده، روی زبانهٔ «توابع عمومی (توابع شخصی)» کلیک کنید؛
تابع دلخواه خود (مانند تابع پرتفوی که در ادامه معرفی میشود) را در این بخش تعریف کرده و ذخیره کنید. توابعی که در این بخش نوشته میشوند، در تمام ستونها و فیلترهای شخصی شما قابل فراخوانی هستند.
گام اول: ساخت بانک اطلاعاتی شخصی (تابع پرتفوی)
ابتدا کدی برای ذخیره اطلاعات قراردادهایمان ایجاد میکنیم. فرض کنید ما 10 قرارداد از «ضهرم1226» را با قیمت 8,000 ریال خریدهایم (موقعیت خرید یا Sale: false) و 5 قرارداد از «ضهرم1218» را به قیمت 16,000 ریال فروختهایم (موقعیت فروش تعهدی یا Sale: true). برای ثبت این اطلاعات، کد زیر را در بخش «توابع عمومی» قرار دهید:
تابع نمادِ همان ردیف را میبیند و دادهٔ خودتان را برمیگرداند — و برای نمادهایی که در سبدتان نیستند، هیچ.قیمت زنده است ولی سبد نه — بعد از هر معامله تابع را دستی بهروز کنید، وگرنه ستون با اطمینان سود موقعیتی را نشان میدهد که ندارید.
function myPortfo() {
// ایجاد یک شیء یا آبجکت برای بازگرداندن مقادیر شخصی
let data = {};
// انتخاب بر اساس نام نماد جاری در هر سطر دیدهبان
switch(option.namad) {
case "ضهرم1226":
data.isShort = false; // موقعیت خرید (Long)
data.count = 10; // تعداد موقعیت
data.buyPrice = 8000; // قیمت خرید اولیه (ریال)
data.note = 'ورود بر اساس شکست مقاومت شاخص هموزن';
return data;
case "ضهرم1218":
data.isShort = true; // موقعیت فروش تعهدی (Short)
data.count = 5; // تعداد موقعیت
data.sellPrice = 16000; // قیمت فروش اولیه (ریال)
data.note = 'آربیتراژ زمانی و پوشش ریسک موقعیت خرید دیگیری';
return data;
default:
return null; // برای نمادهایی که در سبد ما نیستند مقدار خالی برمیگردانیم
}
}
گام دوم: محاسبه سود و زیان لحظهای پرتفوی شخصی
حالا میخواهیم بر اساس دادههای ذخیره شده در تابع عمومی، سود و زیان لحظهای خود را در قالب یک ستون جدید در جدول دیدهبان محاسبه کنیم.
بیشتر ردیفهای جدول در سبد شما نیستند، پس خروجی خالی قاعده است نه استثنا — و بدون بررسی، عددی بیمعنا شبیه داده به نظر میرسد.خرید و فروش دو فرمول جدا دارند، و هر دو در تعداد و اندازهٔ قرارداد ضرب میشوند — بدون آن، عدد هزار برابر کوچکتر و همچنان معقول به نظر میرسد.
یک ستون جدید بسازید (بخش ساخت ستون) و نام آن را «سود/زیان سبد» بگذارید. کد زیر را در بخش فرمول ادیتور بنویسید:
let port = myPortfo(); // فراخوانی تابع عمومی که قبلاً ساختیم
let pnlValue = '';
if (port !== null) {
if (!port.isShort) {
// سود موقعیت خرید = (قیمت آخرین معامله - قیمت خرید اولیه) * تعداد * اندازه قرارداد
pnlValue = (option.ti.lastPrice - port.buyPrice) * port.count * option.size;
} else {
// سود موقعیت فروش = (قیمت فروش اولیه - قیمت آخرین معامله) * تعداد * اندازه قرارداد
pnlValue = (port.sellPrice - option.ti.lastPrice) * port.count * option.size;
}
}
// نمایش مقدار سود یا زیان (ریال)
pnlValue;
گام سوم: نمایش یادداشت شخصی در تولتیپ ستون
برای اینکه هنگام قرار دادن ماوس روی سود/زیان هر نماد در دیدهبان، یادداشت شخصی که برای آن ثبت کرده بودید به عنوان تولتیپ (توضیحات شناور) نمایش داده شود، کادر فرمول «توضیحات (Tooltip)» را در تنظیمات ستون به این شکل بنویسید:
عدد میگوید الان کجایید و یادداشت میگوید چرا وارد شدید — و همان دومی است که موقع تصمیم خروج به کار میآید.ارزش تابع عمومی کمتر نوشتنِ کد نیست — این است که وقتی چیزی عوض شد، فقط یک جا را عوض میکنید.
let port = myPortfo();
port ? port.note : 'نماد در سبد شخصی نیست';
با این سیستم فوقالعاده منعطف، شما میتوانید به جای نوشتن چندین کدهای مجزا برای هر نماد، تمام دادههای سبدتان را در یک لوکیشن متمرکز (توابع عمومی) نگه دارید و ستونهایی کاملاً داینامیک و سفارشی روی داراییهای خود پیادهسازی کنید.