گاهی اوقات معاملهگران نیاز دارند که اطلاعات اختصاصی خود (مانند تعداد قراردادهای خریداریشده، قیمت سرخط معامله شخصی، تاریخ ورود یا یادداشتهای تحلیل) را روی نمادهای مختلف دیدهبان ثبت کرده و سود و زیان شخصی خود را به صورت زنده رصد کنند. در این مقاله یاد میگیرید که چطور با استفاده از ابزار «تابع عمومی» در بخش فرمولنویسی پلتفرم، یک بانک اطلاعاتی شخصی (پرتفوی انتخابی) بسازید و از متغیرهای آن در محاسبات ستونها و فیلترها استفاده کنید.
چگونه در دیدهبان آپشنباز اجرا میشود؟
برای ساخت و مدیریت فیلدهای شخصی خود، گامهای زیر را دنبال کنید:
تابع عمومی یکبار نوشته میشود و از هر ستون و فیلتری صدا زده میشود — یعنی یک کتابخانهٔ مشترک دارید، نه عبارتی تکستونی.گام دوم و سوم هر دو از یک منبع میخوانند — با عوض کردن سبد، هیچکدام را دست نمیزنید، فقط تابع عمومی را.
در بالای جدول دیدهبان روی دکمهٔ فرمولنویسی کلیک کنید؛
در پنجرهٔ باز شده، روی زبانهٔ «توابع عمومی (توابع شخصی)» کلیک کنید؛
تابع دلخواه خود (مانند تابع پرتفوی که در ادامه معرفی میشود) را در این بخش تعریف کرده و ذخیره کنید. توابعی که در این بخش نوشته میشوند، در تمام ستونها و فیلترهای شخصی شما قابل فراخوانی هستند.
گام اول: ساخت بانک اطلاعاتی شخصی (تابع پرتفوی)
ابتدا کدی برای ذخیره اطلاعات قراردادهایمان ایجاد میکنیم. فرض کنید ما 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 : 'نماد در سبد شخصی نیست';
با این سیستم فوقالعاده منعطف، شما میتوانید به جای نوشتن چندین کدهای مجزا برای هر نماد، تمام دادههای سبدتان را در یک لوکیشن متمرکز (توابع عمومی) نگه دارید و ستونهایی کاملاً داینامیک و سفارشی روی داراییهای خود پیادهسازی کنید.
اگر سوال یا ابهامی در رابطه با این مطلب دارید، همینجا بپرسید؛ کارشناسان ما پاسخ میدهند.
تجربه یا نکتهای دارید؟ نوشتنش به بقیهٔ کاربران هم کمک میکند.
پرسشها و نظرات کاربران
4 پیام
شیوا
22 تیر 1405 - 19:08
فیلد شخصی را ساختم ولی در فرمول به آن دسترسی ندارم. مشکل از کجاست؟
پشتیبانیپاسخ
24 تیر 1405 - 08:04
چهار علت رایج دارد و به همین ترتیب بررسی کنید — بیشتر موارد با اولی حل میشود:
۱. نام دقیق یکی نیست. نام فیلد باید عیناً همان چیزی باشد که ساختهاید — فاصله، نیمفاصله و بزرگی و کوچکی حروف مهماند. کپی کردن نام از خودِ پنل، مطمئنتر از تایپ کردن است.
۲. برای آن نماد مقداری ثبت نشده. فیلد شخصی فقط برای ردیفهایی مقدار دارد که خودتان پر کردهاید؛ برای بقیه خالی برمیگردد و محاسبهٔ بعدی رویش بیمعنا میشود.
۳. خالی را مثل صفر حساب کردهاید. این دو یکی نیستند. پیش از هر محاسبهای وجود مقدار را شرط کنید، وگرنه نتیجه بیصدا غلط میشود.
۴. فیلتری خروجی را حذف کرده. اگر ستون هیچ ردیفی ندارد، شاید محاسبه درست است و فیلتر همه را انداخته بیرون. آستانهها را موقتاً باز کنید و دوباره اجرا کنید.
آزمون سریع برای تشخیص: فقط خودِ فیلد را بدون هیچ محاسبهای برگردانید. اگر مقدار دیدید مشکل در محاسبه است، و اگر ندیدید در نام یا در نبود داده.
داوود
24 اردیبهشت 1405 - 19:12
این فیلدهای شخصی کجا ذخیره میشوند؟ اگر مرورگر را عوض کنم از دست میروند؟
پشتیبانیپاسخ
25 اردیبهشت 1405 - 12:18
این مهمترین سؤال عملی دربارهٔ هر دادهای است که خودتان وارد میکنید، و جوابش رفتار شما را عوض میکند.
دو قاعده که بیخطر است بر اساسشان عمل کنید:
فرض کنید داده به حساب کاربریتان گره خورده، نه به مرورگر. یعنی پیش از هر کار جدی وارد حساب شوید، نه اینکه بهعنوان مهمان چیزی بسازید و بعد انتظار داشته باشید بماند.
پیش از هر تغییر بزرگ، خروجی بگیرید. فرمول و فیلدهای شخصی حاصل وقت شمایند و بازسازیشان از صفر گران است. امکان پشتیبانگیری برای همین هست: راهنمای بکآپ و بازیابی
و یک نکتهٔ جداگانه که اغلب با هم اشتباه گرفته میشود: فیلد شخصی جای ثبت معامله نیست. اگر میخواهید سود و زیان واقعی با کارمزد و تاریخ نگه دارید، ابزارش جداست: راهنمای پرتفوی آپشنباز