ستون محاسباتی نمودار استراتژی | فرمول نویسی روی موقعیت ها

ساخت ستون دلخواه در جدول موقعیت‌های نمودار استراتژی آپشن‌باز: فیلدهای position و strategy، بیش از 50 مثال آماده شامل جمع و تفریق بین سطرها با positions، قیمت خریدار/فروشنده بر اساس جهت موقعیت، یونانی‌ها، سربه‌سر و بازده روی وجه تضمین.

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

جدول موقعیت‌های نمودار استراتژی ستون‌های ثابتی دارد — نماد، تعداد، اعمال، قیمت، دلتا، روز، وجه تضمین و خالص. این‌ها برای اکثر کارها کافی‌اند، تا روزی که به عددی نیاز پیدا کنید که آن‌جا نیست: مثلاً گامای هر لگ، یا سهم هر موقعیت از کل پول درگیر.

ستون محاسباتی برای همین است: با یک فرمول کوتاه، ستون خودتان را به همان جدول اضافه می‌کنید. این راهنما می‌گوید دکمه‌اش کجاست، فرمول به چه چیزهایی دسترسی دارد، و خروجی چطور در سلول می‌نشیند.

فهرست مطالب

این مقاله به شما یاد می‌دهد چطور در نمودار سود و زیان استراتژی ستون دلخواه خودتان را بسازید: ستونی که هر چه لازم دارید — گاما، سربه‌سر، بازده روی وجه تضمین، سهم هر لگ از ریسک — را برای تک‌تک موقعیت‌ها حساب می‌کند و کنار بقیهٔ ستون‌ها می‌نشیند.

1 — شروع

2 — چه چیزی در اختیار دارید

3 — مثال‌ها

4 — تنظیم و مدیریت

5 — ریز‌ه‌کاری‌ها

ستون محاسباتی چیست و چه دردی را دوا می‌کند؟

جدول موقعیت‌های نمودار استراتژی ستون‌های ثابتی دارد: نماد، تعداد، اعمال، قیمت، دلتا، روز، IV، وجه تضمین، آفست و خالص. این‌ها برای اکثر کارها کافی‌اند — تا روزی که به عددی نیاز پیدا کنید که آن‌جا نیست.

چرا کپی کردن در اکسل جواب نمی‌دهد اکسل اعداد را کپی می‌کنید حساب می‌کنید و فردا از اول ستون محاسباتی یک بار فرمول می‌نویسید کنار بقیهٔ ستون‌ها می‌نشیند با هر تیک بازار تازه می‌شود تفاوت اصلی، سرعت محاسبه نیست این است که عدد هیچ‌وقت کهنه نمی‌شود محاسبه‌ای که باید دستی تازه شود، معمولاً تازه نمی‌شود
تفاوت اصلی سرعت محاسبه نیست — این است که عدد هیچ‌وقت کهنه نمی‌شود، و محاسبه‌ای که باید دستی تازه شود معمولاً تازه نمی‌شود.
یک فرمول، به‌ازای هر سطر یک بار فرمولی که یک بار نوشته‌اید خرید کال position.count * position.price نتیجهٔ خودش فروش کال position.count * position.price نتیجهٔ خودش نماد پایه position.count * position.price نتیجهٔ خودش پس در فرمول همیشه «همین سطر» هستید — نه کل جدول
فرمول برای هر سطر جداگانه اجرا می‌شود — پس وقتی می‌نویسیدش، همیشه داخل «همین سطر» هستید، نه بالای کل جدول.

مثلاً می‌خواهید گامای هر لگ را ببینید. یا بدانید هر موقعیت چند درصد از کل پول درگیر استراتژی را گرفته است. یا فاصلهٔ قیمت پایه تا سربه‌سر همان لگ را. تا امروز راهش این بود که اعداد را کپی کنید و در اکسل حساب کنید؛ و فردا که قیمت‌ها تکان خورد، دوباره از اول.

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

اگر با فرمول‌نویسی دیده‌بان آشنا هستید، 90٪ راه را آمده‌اید. موتور، توابع و ساختار دقیقاً همان است؛ فقط دو آبجکت تازه اضافه شده که به اطلاعات موقعیت و استراتژی دسترسی می‌دهند. اگر آشنا نیستید نگران نباشید — همین مقاله از صفر شروع می‌کند و راهنمای کامل فرمول‌نویسی هم همیشه یک کلیک فاصله دارد.

کجاست؟ دکمهٔ «ساخت ستون»

به صفحهٔ نمودار سود/زیان و ساخت استراتژی بروید. بالای جدول موقعیت‌ها، در همان ردیفی که دکمه‌های «جدید»، «ذخیره»، «اشتراک» و ستون‌ها هستند، دکمهٔ «ساخت ستون» را می‌بینید.

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

با کلیک روی آن پنجرهٔ «ساخت و مدیریت ستون محاسباتی» باز می‌شود که سه بخش دارد:

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

میان‌بر: روی عنوان یک ستون محاسباتی در جدول راست‌کلیک کنید تا همان ستون مستقیم برای ویرایش باز شود. همان ژستی که در نسخهٔ قدیمی آپشن‌باز بود.

اولین ستون شما در یک دقیقه

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

  1. روی ساخت ستون کلیک کنید.
  2. در کادر نام ستون بنویسید: ارزش موقعیت
  3. در کادر فرمول این خط را بنویسید:
    position.count * position.price * strategy.size
  4. روی ذخیره بزنید.

همین. ستون تازه بلافاصله در جدول ظاهر می‌شود — درست بعد از ستون «نماد» — و برای هر سطر عدد خودش را نشان می‌دهد. لازم نیست چیز دیگری روشن کنید؛ ستونِ تازه‌ساخته خودکار به جدول اضافه می‌شود.

زیر کادر فرمول یک نوار وضعیت هست: تا وقتی فرمول درست باشد می‌گوید «فرمول بدون خطا اجرا می‌شود»، و اگر جایی را اشتباه بنویسید همان‌جا پیام خطا را نشان می‌دهد — قبل از اینکه ذخیره کنید.

پنج قاعدهٔ نوشتن فرمول

قبل از رفتن سراغ مثال‌ها، این پنج قاعده را یک‌بار بخوانید؛ بعد از آن هر مثالی در این مقاله برایتان روشن است. فرمول‌ها به زبان جاوااسکریپت نوشته می‌شوند، ولی برای استفاده از آن‌ها لازم نیست برنامه‌نویس باشید — کپی‌کردن یک مثال و عوض‌کردن یک اسم فیلد، کار اکثر آدم‌ها را راه می‌اندازد.

یک خط یا چند خط — قاعده فرق می‌کند یک خطی position.count * position.price همان حاصل در سلول می‌نشیند چند خطی return value * strategy.size; باید صریح بگویید کدام مقدار به‌محض اینکه فرمول دو خط شد، بدون return چیزی نمایش نمی‌دهد ولی این را همان لحظه زیر کادر می‌گوید نه بعد از ذخیره و نه به شکل یک سلول خالی در جدول که فهمیدنش هفته‌ها طول بکشد
فرمول دوخطی بدون return چیزی نمایش نمی‌دهد — و این را همان لحظه زیر کادر می‌گوید، نه به شکل یک سلول خالی در جدول.
محافظ، پیش از تقسیم if (!paid) return '—'; بدون محافظ Infinity · NaN یا خطای خواندن از چیزی که نیست با محافظ یک خط تیره در سلول و بقیهٔ ستون سالم هر جا مخرج دارید یا نتیجهٔ یک جستجو را می‌خوانید اول راه فرار بگذارید — یک سطرِ خراب، کل ستون را بی‌اعتبار می‌کند
هر جا مخرج دارید یا نتیجهٔ یک جستجو را می‌خوانید، اول راه فرار بگذارید — یک سطرِ خراب، کل ستون را بی‌اعتبار می‌کند.

قاعدهٔ 1 — فرمول یک‌خطی return نمی‌خواهد

position.count * position.price

یک عبارت ساده بنویسید؛ همان حاصل در سلول می‌نشیند. هر چهار آبجکت (option ، ua ، position ، strategy) را می‌توانید آزادانه با هم ترکیب کنید.

قاعدهٔ 2 — فرمول چندخطی حتماً return می‌خواهد

let value = position.count * position.price; return value * strategy.size;

به‌محض اینکه فرمول دو خط شد، باید صریحاً بگویید کدام مقدار نمایش داده شود. اگر return را جا بیندازید، همان زیر کادر پیام «return ندارد» می‌گیرید — یعنی هنوز ذخیره نکرده، خبردار می‌شوید.

قاعدهٔ 3 — متغیر بسازید تا فرمول خوانا بماند

let paid = position.price * position.count * strategy.size; let profit = position.offsetPL; return roundNumber(profit / paid * 100, 1) + '٪';

با let هر محاسبهٔ میانی را یک اسم بدهید. فرمولی که سه ماه بعد هم بفهمید چه می‌کند، فرمول بهتری است — و موقع عیب‌یابی خیلی راحت‌تر است.

قاعدهٔ 4 — شرط با علامت سؤال: «اگر … وگرنه …»

position.buy ? 'خرید' : 'فروش'

این الگوی سه‌بخشی — اول شرط، بعد علامت سؤال و حالتی که شرط برقرار است، بعد دونقطه و حالت دیگر — ستون‌فقرات نصف مثال‌های این مقاله است. همین یک خط، پرکاربردترین الگوی ستون محاسباتی است: یک کار برای سطرهای خرید، کار دیگری برای سطرهای فروش. برای شرط‌های تودرتو هم می‌توانید پشت سر هم بیاورید یا از if استفاده کنید:

if (position.type === 'ua') return '—'; if (position.buy) return 'پرداختی'; return 'دریافتی';

قاعدهٔ 5 — قبل از تقسیم و قبل از خواندن چیزی که ممکن است نباشد، محافظ بگذارید

let paid = position.price * position.count; if (!paid) return '—'; return roundNumber(position.offsetPL / paid * 100, 1) + '٪';

دو خطای رایج با همین یک خط از بین می‌روند: تقسیم بر صفر (که Infinity یا NaN می‌سازد) و خواندن فیلد از چیزی که پیدا نشده. قاعدهٔ کلی: هر جا مخرج دارید یا نتیجهٔ یک جستجو را می‌خوانید، اول با if (!x) return '—'; راه فرار بگذارید.

توابع کمکی که مدام تکرار می‌شوند: roundNumber(n, decimals) گرد می‌کند، commaSeparator(n) عدد را سه‌رقم‌سه‌رقم جدا می‌کند، calcBS() یونانی‌ها را می‌دهد و style(value, color) خروجی را رنگی می‌کند. فهرست کامل توابع در راهنمای فرمول‌نویسی و در تب «راهنما»ی همین پنجره است.

چهار آبجکت: option ، ua ، position ، strategy

وقتی فرمول شما برای یک سطر اجرا می‌شود، چهار آبجکت در اختیارتان است:

چهار آبجکت، سه گسترهٔ متفاوت strategy برای همهٔ سطرها یکسان position همین سطر — قیمتی که شما زده‌اید option قرارداد همین سطر در بازار ua نماد پایه برای «سهم من از کل»، مخرج همیشه از strategy می‌آید
چهار آبجکت سه گسترهٔ متفاوت دارند — برای «سهم من از کل»، مخرج همیشه از strategy می‌آید چون تنها همان برای همهٔ سطرها یکسان است.
دو قیمت که به هم شبیه‌اند و یکی نیستند option.ti.lastPrice قیمت زندهٔ بازار با هر معامله عوض می‌شود به شما ربطی ندارد position.price قیمتی که شما زده‌اید یعنی قیمت ورود واقعی ثابت می‌ماند اکثر محاسبات سود و زیان به دومی نیاز دارند اگر اولی را بگذارید، ستون خطا نمی‌دهد فقط عددی نشان می‌دهد که سود شما نیست — و باورپذیر هم هست
اکثر محاسبات سود و زیان به position.price نیاز دارند — با قیمت زنده، ستون خطا نمی‌دهد، فقط عددی نشان می‌دهد که سود شما نیست.
آبجکت‌های در دسترس در ستون محاسباتی استراتژی
آبجکتچه چیزی است
optionاطلاعات قرارداد همین سطر: اعمال، سررسید، IV، وجه تضمین، اطلاعات معاملاتی (option.ti) و… . دقیقاً همان چیزی که در دیده‌بان دارید.
uaنماد پایهٔ همین قرارداد: نوسان تاریخی، IV Rank، اطلاعات معاملاتی (ua.ti) و…
positionتازه — خودِ سطر جدول: خرید یا فروش، تعداد، قیمت ورودی که شما زده‌اید، وجه تضمین، آفست و…
strategyتازه — کل استراتژی: قیمت پایه، اندازهٔ قرارداد، نرخ بهره، خالص و آفست کل

تفاوت مهم option و position را جدی بگیرید: option.ti.lastPrice قیمت زندهٔ بازار است، اما position.price قیمتی است که شما در جدول وارد کرده‌اید — یعنی قیمت ورود واقعی‌تان. اکثر محاسبات سود و زیان به دومی نیاز دارند.

فیلدهای position — سطر جاری

یک فیلد که در نسخهٔ قدیمی چیز دیگری برمی‌گرداند نسخهٔ قدیمی row.iv در راهنما: نوسان ضمنی در عمل: نرخ بهره نسخهٔ جدید position.iv واقعاً نوسان ضمنی همین سطر strategy.interestRate فرمول قدیمی که این خط را دارد، خطا نمی‌دهد چون هر دو عددند و هر دو کوچک‌اند فقط از آن به بعد، جواب غلط می‌دهد پس پیش از انتقال فرمول‌های قدیمی، همین یک خط را بازبینی کنید
فرمول قدیمی با این خط خطا نمی‌دهد — هر دو عددند و هر دو کوچک — فقط از آن به بعد جواب غلط می‌دهد.
فیلدهای آبجکت position
فیلدچیست
position.namadنماد همین سطر
position.typeنوع سطر: call ، put یا ua (نماد پایه)
position.buyاگر موقعیت خرید باشد true و اگر فروش باشد false
position.sideهمان buy به شکل متنی: 'buy' یا 'sell'
position.countتعداد قرارداد این سطر
position.priceقیمت ورود (پرمیوم) هر واحد — همان چیزی که در ستون «قیمت» زده‌اید
position.strikeقیمت اعمال؛ برای لگ نماد پایه صفر است
position.daysUntilMaturityروز تقویمی مانده تا سررسید همین لگ
position.tradeDaysUntilMaturityروز معاملاتی مانده تا سررسید؛ اگر زنجیره در دسترس نباشد null
position.ivنوسان ضمنی همین سطر بر حسب درصد (مثلاً 32.5)
position.deltaدلتای این لگ؛ برای نماد پایه 1
position.marginمبلغ وجه تضمین این سطر
position.blockاگر تیک وجه تضمین (بلوکه) روشن باشد true
position.activeاگر سطر در محاسبات نمودار فعال باشد true (تیک ابتدای سطر)
position.offsetPriceقیمت زندهٔ ستون آفست
position.netPriceخالص همین سطر — همان عددی که ستون «خالص» نشان می‌دهد
position.offsetPLسود/زیان آفست این سطر: (آفست − قیمت ورود) × تعداد × اندازه، با علامت جهت
position.sizeاندازهٔ قرارداد این لگ
position.idشناسهٔ داخلی سطر (برای کارهای پیشرفته)

یک تفاوت با نسخهٔ قدیمی که باید بدانید: در آپشن‌باز قدیمی فیلدی به نام row.iv وجود داشت که در راهنما «نوسان ضمنی» معرفی شده بود، ولی در عمل مقدار نرخ بهره را برمی‌گرداند. در نسخهٔ جدید این اشتباه اصلاح شده: position.iv واقعاً نوسان ضمنی همان سطر است و نرخ بهره در strategy.interestRate قرار دارد. اگر فرمول قدیمی دارید، این خط را حتماً بازبینی کنید.

فیلدهای strategy — کل استراتژی

فیلدهای آبجکت strategy
فیلدچیست
strategy.nameنام استراتژی
strategy.uaNamadنماد پایهٔ استراتژی
strategy.uaPriceقیمت نماد پایه در سازنده (همان کادر «سهم پایه»)
strategy.sizeاندازهٔ قرارداد
strategy.interestRateنرخ بهرهٔ بدون ریسک بر حسب درصد
strategy.tradingFeeوضعیت تیک «کارمزد معامله» — true یا false
strategy.exerciseFeeحالت کارمزد اعمال: 'none' ، 'all' یا 'itm-only'
strategy.maxDaysUntilMaturityبیشترین روز مانده تا سررسید بین لگ‌های فعال — سررسید عملی استراتژی
strategy.positionCountتعداد سطرهای فعال
strategy.netTotalخالص کل استراتژی — همان عددی که پای جدول می‌بینید
strategy.offsetTotalآفست ریالی کل استراتژی
strategy.offsetPercentدرصد آفست کل؛ اگر قابل محاسبه نباشد null

این مقادیر برای همهٔ سطرها یکسان‌اند؛ به همین خاطر برای «سهم من از کل» یا «درصدِ کل» عالی‌اند.

آرایهٔ positions — فرمول‌های تجمیعی

گاهی برای محاسبهٔ یک سطر، باید بقیهٔ سطرها را هم ببینید. آرایهٔ positions دقیقاً همین است: فهرست همهٔ سطرهای جدول، که هر عضوش همان ساختار position را دارد.

وقتی یک سطر باید بقیه را ببیند سطر جاری همهٔ سطرها positions positions.filter(p => p.active) همین است که «سهم این لگ از کل» را ممکن می‌کند
آرایهٔ positions فهرست همهٔ سطرهاست — همین است که محاسبهٔ «سهم این لگ از کل» را از داخل یک سطر ممکن می‌کند.
// تعداد کل سطرها (شامل غیرفعال‌ها) positions.length // فقط سطرهای فعال positions.filter(p => p.active) // مجموع دلتای وزنی استراتژی positions.reduce((s, p) => s + p.delta * p.count * (p.buy ? 1 : -1), 0)

تفاوت با فرمول‌نویسی دیده‌بان

موتور یکی است، ولی دو محیط از هم جدا نگه داشته شده‌اند و این عمدی است:

ستون‌ها جدا، توابع مشترک دیده‌بان position = strategy = null جدول استراتژی هر دو آبجکت در دسترس‌اند ستون‌ها بین این دو رد و بدل نمی‌شوند ولی توابع عمومی مشترک‌اند یک بار بنویسید، هر دو جا استفاده کنید اگر ستون‌ها مشترک بودند، فرمولی با position در دیده‌بان فقط خطا نشان می‌داد — جدایی برای همین است
ستون‌ها بین دو محیط رد و بدل نمی‌شوند چون position و strategy در دیده‌بان وجود ندارند — ولی توابع عمومی مشترک‌اند.
  • ستون‌هایی که اینجا می‌سازید فقط در جدول موقعیت‌های استراتژی دیده می‌شوند؛ در دیده‌بان ظاهر نمی‌شوند.
  • ستون‌های دیده‌بان هم اینجا در فهرست شما نمی‌آیند.
  • دلیلش ساده است: در دیده‌بان اصلاً «موقعیتی» وجود ندارد — آنجا position و strategy برابر null هستند. اگر ستون‌ها را قاطی می‌کردیم، فرمولی که به position.count اشاره دارد در دیده‌بان فقط خطا نشان می‌داد.

در عوض توابع عمومی (همان توابع دلخواهی که خودتان در دیده‌بان تعریف می‌کنید) بین هر دو محیط مشترک‌اند — یک بار بنویسید، هر دو جا استفاده کنید.

مثال‌های پایه

ارزش ریالی موقعیت

position.count * position.price * strategy.size

ساده‌ترین محاسبهٔ ممکن و در عین حال یکی از پرکاربردترین‌ها: هر لگ چقدر پول است.

سهم این لگ از کل خالص استراتژی

roundNumber(Math.abs(position.netPrice) / Math.abs(strategy.netTotal) * 100, 1) + '٪'

وقتی چهار لگ دارید، این ستون فوراً می‌گوید کدام‌شان سنگین‌ترین بخش معامله است.

جهت و تعداد به زبان آدمیزاد

(position.buy ? 'خرید ' : 'فروش ') + commaSeparator(position.count) + ' عدد'

ستون‌ها فقط عدد نیستند؛ هر رشتهٔ متنی هم قابل نمایش است.

فقط برای اختیارها، نه نماد پایه

position.type === 'ua' ? '—' : commaSeparator(position.strike - strategy.uaPrice)

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

پرداختی یا دریافتی؟

let cash = position.price * position.count * strategy.size; return (position.buy ? 'پرداخت ' : 'دریافت ') + commaSeparator(cash);

همان الگوی «اگر خرید … وگرنه …» روی یک عدد ریالی: خرید پول از جیب شما می‌برد و فروش به جیب شما می‌آورد.

فاصلهٔ پایه تا اعمال، به درصد

if (position.type === 'ua' || !strategy.uaPrice) return '—'; return roundNumber((position.strike - strategy.uaPrice) / strategy.uaPrice * 100, 1) + '٪';

عدد مثبت یعنی اعمال بالای قیمت پایه است. برای مقایسهٔ سریع لگ‌های چند نماد مختلف، درصد خیلی گویاتر از ریال است.

تعداد قرارداد بر حسب سهم

commaSeparator(position.count * position.size)

هر قرارداد چند سهم است؛ این ستون می‌گوید این لگ روی چند سهم پایه سوار است — برای تطبیق با موجودی پرتفوی.

قیمت زندهٔ تابلو: تقاضا، عرضه و جهت موقعیت

تا اینجا با position.price کار کردیم که قیمت ورود شماست. ولی صف‌های زندهٔ تابلو هم در دسترس‌اند: option.ti کل ردیف معاملاتی قرارداد را دارد و مهم‌ترین‌هایش این‌ها هستند:

قیمتِ درست، به جهت موقعیت بستگی دارد position.buy ? sellSide : buySide سطر خرید برای بستن باید بفروشید پس سرخط تقاضا مهم است سطر فروش برای بستن باید بخرید پس سرخط عرضه مهم است یک قیمت واحد برای هر دو سطر، خوش‌بینانه است چون همیشه سمتی از بازار را می‌گیرد که به نفعتان است
یک قیمت واحد برای سطرهای خرید و فروش خوش‌بینانه است — همیشه سمتی از بازار را می‌گیرد که به نفعتان است.
قیمت‌های زندهٔ در دسترس در فرمول
فیلدچیست
option.ti.buy1Priceقیمت خریدار — بهترین قیمت صف تقاضا (سطر اول خرید). قیمتی که همین حالا می‌توانید به آن بفروشید.
option.ti.sell1Priceقیمت فروشنده — بهترین قیمت صف عرضه (سطر اول فروش). قیمتی که همین حالا می‌توانید از آن بخرید.
option.ti.buy1Volume / sell1Volumeحجم همان سطر اول — یعنی چند قرارداد در آن قیمت آماده است.
option.ti.lastPriceآخرین قیمت معامله‌شده
option.ti.endPriceقیمت پایانی

تا پنج سطر عمق بازار هم هست (buy2Price تا sell5Price و حجم‌هایشان). همین فیلدها روی ua.ti برای نماد پایه هم کار می‌کنند.

اگر خرید است قیمت خریدار، اگر فروش است قیمت فروشنده

position.buy ? commaSeparator(option.ti.buy1Price) : commaSeparator(option.ti.sell1Price)

پرتکرارترین درخواست کاربران، و دقیقاً همان قاعدهٔ 4: یک شرط روی position.buy و دو فیلد متفاوت. این ستون در واقع قیمت بستن موقعیت را می‌دهد — یک موقعیت خرید را باید به صف تقاضا بفروشید و یک موقعیت فروش را از صف عرضه بخرید.

اگر امروز می‌خواستید همین لگ را باز کنید

position.buy ? commaSeparator(option.ti.sell1Price) : commaSeparator(option.ti.buy1Price)

دقیقاً برعکس مثال قبل. برای ورود باید سمت مقابل را بزنید: خرید از صف عرضه، فروش به صف تقاضا. مقایسهٔ این ستون با ستون «قیمت» می‌گوید امروز همان معامله چقدر گران‌تر یا ارزان‌تر تمام می‌شد.

سود/زیان اگر همین الان ببندید

let quote = position.buy ? option.ti.buy1Price : option.ti.sell1Price; if (!quote) return '—'; let sign = position.buy ? 1 : -1; return commaSeparator((quote - position.price) * position.count * strategy.size * sign);

شبیه ستون آمادهٔ آفست است، با یک تفاوت مهم: به‌جای قیمت آفست، قیمت واقعیِ سر صف را مبنا می‌گیرد. یعنی محافظه‌کارانه‌ترین برآورد از سود امروز شما.

اسپرد تقاضا/عرضه — این قرارداد چقدر نقدشونده است؟

let bid = option.ti.buy1Price; let ask = option.ti.sell1Price; if (!bid || !ask) return 'بدون صف'; return roundNumber((ask - bid) / ((ask + bid) / 2) * 100, 1) + '٪';

اسپرد پهن یعنی ورود و خروج گران تمام می‌شود. قبل از اینکه به یک استراتژی چندپایه دل ببندید، این ستون را یک نگاه بیندازید — گاهی سود روی کاغذ، کل اسپرد است.

آیا حجم سر صف برای من کافی است؟

let avail = position.buy ? option.ti.buy1Volume : option.ti.sell1Volume; return avail >= position.count ? style(commaSeparator(avail), 'green') : style(commaSeparator(avail), 'red', '', 'کمتر از تعداد موقعیت شماست');

حجم سمت مقابلِ همین سطر را با تعداد قرارداد شما می‌سنجد: سبز یعنی کل موقعیت در یک سفارش جا می‌شود، قرمز یعنی باید تکه‌تکه بزنید.

فقط برای دیدنِ این رنگ لازم نیست ستون بسازید: بَجِ حجمِ داخلِ فیلدهای قیمت و افست همین قضاوت را خودش رنگی می‌کند (ستون‌های جدول پوزیشن‌ها). این ستون وقتی می‌ارزد که بخواهید روی همین معیار مرتب‌سازی کنید، یا تعریفِ «کافی» را عوض کنید — مثلاً چند سطح اول صف را با هم جمع بزنید.

اختلاف قیمت ورود شما با تابلو

if (!option.ti.lastPrice) return '—'; return calcRateChange(position.price, option.ti.lastPrice) + '٪';

calcRateChange(a, b) درصد تغییر از a به b را می‌دهد (خودش گرد می‌کند). عدد مثبت یعنی قرارداد از زمان ورود شما گران‌تر شده — که برای لگ خرید خوب است و برای لگ فروش بد.

یک نکته دربارهٔ basePrice(): در دیده‌بان تابعی هست به نام basePrice(option) که قیمت را بر اساس «مبنای قیمت» تولبار برمی‌گرداند. در جدول استراتژی این تولبار وجود ندارد، بنابراین basePrice() همیشه آخرین قیمت را می‌دهد. اگر تقاضا یا عرضه می‌خواهید، همان‌طور که در مثال‌های بالا دیدید مستقیم option.ti.buy1Price یا option.ti.sell1Price را بنویسید.

یونانی‌ها: گاما، تتا، وگا

تابع calcBS() کل خروجی بلک‌شولز را می‌دهد: { bs, delta, gamma, vega, theta, rho, iv }. جدول استراتژی ستون دلتا دارد ولی بقیهٔ یونانی‌ها را ندارد — اینجا اضافه‌شان کنید.

گامای هر لگ

roundNumber(calcBS().gamma, 4)

گاما می‌گوید دلتای این لگ با حرکت پایه چقدر عوض می‌شود — برای فهمیدن اینکه کدام لگ پوشش شما را ناپایدار می‌کند.

تتای موقعیت (نه تک‌قرارداد)

roundNumber(calcBS().theta * position.count * (position.buy ? 1 : -1), 2)

نکتهٔ مهم: calcBS() یونانی یک قرارداد را می‌دهد. برای اینکه عدد به موقعیت شما مربوط شود باید در تعداد و جهت ضرب شود — فروش، تتا را برعکس می‌کند.

وگا با علامت درست

roundNumber(calcBS().vega * position.count * (position.buy ? 1 : -1), 2)

حساسیت این لگ به نوسان. جمع این ستون روی کل استراتژی می‌گوید شما خریدار نوسانید یا فروشندهٔ آن.

یونانی‌ها با IV دلخواه شما

roundNumber(calcBS({ volatility: position.iv }).gamma, 4)

اگر IV سطر را دستی عوض کرده باشید (برای سناریوسازی)، این شکل از فراخوانی همان عدد شما را مبنا می‌گیرد.

دلتای موقعیت به «سهم معادل»

commaSeparator(roundNumber( position.delta * position.count * position.size * (position.buy ? 1 : -1), 0))

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

دلتای ریالی — با یک درصد حرکت پایه چقدر جابه‌جا می‌شوم؟

let shares = position.delta * position.count * position.size * (position.buy ? 1 : -1); return commaSeparator(roundNumber(shares * strategy.uaPrice / 100, 0));

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

سربه‌سر و فاصله تا آن

سربه‌سر همین لگ

position.type === 'call' ? position.strike + position.price : position.type === 'put' ? position.strike - position.price : position.price

سربه‌سر هر لگ به‌تنهایی. (سربه‌سر کل استراتژی را خود نمودار نشان می‌دهد؛ این ستون برای تحلیل تک‌تک پاها مفید است.)

چند درصد تا سربه‌سر فاصله داریم؟

let be = position.type === 'call' ? position.strike + position.price : position.strike - position.price; return roundNumber((be - strategy.uaPrice) / strategy.uaPrice * 100, 1) + '٪';

فرمول چندخطی هم مجاز است — فقط یادتان باشد حتماً با return مقدار نهایی را برگردانید.

وضعیت ITM / OTM

option.state

خروجی ITM ، ATM یا OTM بر اساس قیمت زندهٔ پایه.

سود/زیان لحظه‌ای و آفست

سود/زیان آفست همین سطر

commaSeparator(position.offsetPL)

آماده و حاضر است: (قیمت آفست − قیمت ورود) × تعداد × اندازه، با علامت جهت. دربارهٔ مفهوم آفست بیشتر بخوانید.

درصد سود/زیان روی پول همین لگ

let paid = Math.abs(position.price * position.count * strategy.size); if (!paid) return '—'; return roundNumber(position.offsetPL / paid * 100, 1) + '٪';

همان بازده، ولی نسبت به پولی که روی همین لگ گذاشته‌اید — نه کل استراتژی.

ارزش ذاتی و ارزش زمانی

commaSeparator(intrinsic()) + ' + ' + commaSeparator(timeValue())

برای دیدن اینکه چقدر از پرمیوم فعلی، ارزش زمانیِ در حال آب‌شدن است.

وجه تضمین و بازده روی سرمایهٔ درگیر

وجه تضمین درگیر این سطر

position.block ? commaSeparator(position.margin * position.count) : '—'

فقط سطرهایی که تیک وجه تضمین دارند عدد نشان می‌دهند.

بازده روی وجه تضمین

if (!position.block || !position.margin) return '—'; let credit = position.price * position.count * strategy.size; let blocked = position.margin * position.count; return roundNumber(credit / blocked * 100, 1) + '٪';

برای استراتژی‌های فروش (کاوردکال، نیکد پوت و…) این عدد واقعی‌ترین معیار بازده است — چون سرمایهٔ درگیر شما وجه تضمین است، نه پرمیوم.

زمان: بازده ماهانه و روز معاملاتی

بازده ماهانه‌شده

let paid = Math.abs(position.price * position.count * strategy.size); if (!paid) return '—'; let pct = position.offsetPL / paid * 100; return roundNumber(monthlyProfit(pct, position.daysUntilMaturity), 1) + '٪';

یک سود 4٪ در 10 روز با یک سود 4٪ در 90 روز زمین تا آسمان فرق دارد. monthlyProfit هر دو را روی مبنای 30 روزه قابل مقایسه می‌کند.

روز معاملاتی به‌جای روز تقویمی

position.tradeDaysUntilMaturity ?? '—'

روزهایی که بازار واقعاً باز است. اگر زنجیره در دسترس نباشد (مثلاً لگ نماد پایه) خط تیره می‌آید.

تتای روزانه به ریال

commaSeparator(roundNumber(calcBS().theta * position.count * strategy.size * (position.buy ? 1 : -1), 0))

چند ریال در روز بابت گذر زمان می‌پردازید یا می‌گیرید.

جمع و تفریق بین سطرها با positions

این بخش جواب سؤالی است که زیاد پرسیده می‌شود: «چطور عدد یک سطر را از سطر دیگر کم یا با آن جمع کنم؟» کلیدش آرایهٔ positions است. دو راه دارید و هر دو را با مثال می‌بینیم:

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

پیدا کردن سطر بعدی و قبلی

هر سطر یک position.id یکتا دارد. با findIndex جای سطر جاری را پیدا کنید؛ از آنجا به بعد به همهٔ سطرها با شماره دسترسی دارید:

let i = positions.findIndex(p => p.id === position.id); let next = positions[i + 1]; // سطر بعدی let prev = positions[i - 1]; // سطر قبلی let first = positions[0]; // سطر اول جدول

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

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

let i = positions.findIndex(p => p.id === position.id); let next = positions[i + 1]; if (!next) return '—'; return commaSeparator(position.price - next.price);

همان «کم کردن مقدار یک ردیف از ردیف بعدی». در اسپردها این عدد یعنی خالص پرمیوم بین دو پا، و در جدول مرتب‌شده بر اساس اعمال، یک نگاه می‌گوید نردبان قیمتی شما چقدر تند است.

فاصلهٔ اعمال تا سطر بعدی — عرض اسپرد

let i = positions.findIndex(p => p.id === position.id); let next = positions[i + 1]; if (!next || position.type === 'ua' || next.type === 'ua') return '—'; return commaSeparator(Math.abs(next.strike - position.strike));

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

شمارهٔ سطر

positions.findIndex(p => p.id === position.id) + 1

ساده ولی به‌دردبخور: وقتی دربارهٔ یک استراتژی با کسی حرف می‌زنید، «پای 3» خیلی راحت‌تر از خواندن کل نام نماد است.

جمع زدن روی همهٔ سطرها

الگوی reduce همیشه یک شکل است: از صفر شروع کن، روی هر سطر چیزی به مجموع اضافه کن.

جمع کل یک ستون (چون پای جدول خالی است)

commaSeparator(positions.reduce((s, p) => s + p.netPrice, 0))

پای جدول برای ستون‌های محاسباتی عمداً خالی است؛ اگر جمع می‌خواهید خودتان بسازید. عدد در همهٔ سطرها یکسان تکرار می‌شود — که همان کاری است که یک سطر جمع می‌کند.

این سطر منهای مجموع بقیهٔ سطرها

let others = positions .filter(p => p.id !== position.id && p.active) .reduce((s, p) => s + p.netPrice, 0); return commaSeparator(position.netPrice - others);

با p.id !== position.id خودِ سطر جاری را کنار می‌گذارید. اگر جواب مثبت شد یعنی این یک پا سنگین‌تر از مجموع بقیهٔ استراتژی است.

مجموع فقط سطرهای خرید (یا فقط فروش)

let buys = positions .filter(p => p.buy && p.active) .reduce((s, p) => s + Math.abs(p.netPrice), 0); let sells = positions .filter(p => !p.buy && p.active) .reduce((s, p) => s + Math.abs(p.netPrice), 0); return commaSeparator(buys) + ' / ' + commaSeparator(sells);

پرداختی کل در برابر دریافتی کل. اختلاف این دو همان strategy.netTotal است — و این ستون نشان می‌دهد آن عدد از کجا آمده.

این لگ چند برابر بزرگ‌ترین لگ است؟

let max = Math.max(...positions.filter(p => p.active).map(p => Math.abs(p.netPrice))); if (!max) return '—'; return roundNumber(Math.abs(position.netPrice) / max, 2);

عدد 1 یعنی خودِ بزرگ‌ترین لگ. برای پیدا کردن سریع پای غالب در استراتژی‌های نامتقارن.

تعداد لگ‌های خرید و فروش

positions.filter(p => p.buy && p.active).length + ' خرید، ' + positions.filter(p => !p.buy && p.active).length + ' فروش'

ترکیب استراتژی در یک نگاه — مخصوصاً وقتی چند نسخه از یک ساختار را کنار هم می‌سنجید.

مثال‌های نسبتی

سهم این لگ از دلتای کل استراتژی

let total = positions .filter(p => p.active) .reduce((s, p) => s + Math.abs(p.delta * p.count), 0); if (!total) return '—'; return roundNumber(Math.abs(position.delta * position.count) / total * 100, 0) + '٪';

کدام لگ بیشترین جهت‌گیری را به استراتژی تحمیل می‌کند.

آیا این لگ نزدیک‌ترین سررسید است؟

let min = Math.min(...positions.filter(p => p.active).map(p => p.daysUntilMaturity)); return position.daysUntilMaturity === min ? 'نزدیک‌ترین' : '';

در استراتژی‌های تقویمی (کلندر) خیلی به کار می‌آید.

چند لگ روی همین اعمال داریم؟

positions.filter(p => p.strike === position.strike && p.active).length

برای پیدا کردن سریع پاهای هم‌اعمال در ساختارهای پیچیده مثل باترفلای و کاندور.

مثال کامل: خالص کل به قیمت زندهٔ تابلو

این یکی را جدا آورده‌ایم چون هم پرتکرار است و هم یک تلهٔ واقعی دارد. صورت مسئله: می‌خواهیم همان ستون «خالص» را داشته باشیم، ولی به‌جای قیمت ورود، قیمت زندهٔ سمت درست تابلو مبنا باشد — برای هر پا، همان قیمتی که با آن بسته می‌شود. یعنی جمعِ (تعداد × قیمت) روی همهٔ سطرها، با فروش منهای خرید.

تله را اول بدانید: اعضای آرایهٔ positions فقط اطلاعات خودِ سطر جدول را دارند — تعداد، قیمت ورود، جهت، اندازه، دلتا، آفست. داده‌های زندهٔ تابلو داخلشان نیست، پس چیزی مثل p.ti.buy1Price یا p.option.ti.buy1Price وجود ندارد و فرمول بی‌آنکه خطا بدهد صفر برمی‌گرداند. راه درست این است که داخل حلقه، قرارداد هر سطر را با نمادش دوباره پیدا کنید: getOptionByNamad(p.namad) برای اختیارها و getUaByNamad(p.namad) برای لگ نماد پایه.

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

خالص کل استراتژی به قیمت تابلو

let total = positions .filter(p => p.active) .reduce((sum, p) => { let m = p.type === 'ua' ? getUaByNamad(p.namad) : getOptionByNamad(p.namad); if (!m || !m.ti) return sum; let q = p.buy ? m.ti.buy1Price : m.ti.sell1Price; return sum + (p.buy ? -1 : 1) * q * p.count * p.size; }, 0); return commaSeparator(total);

سه نکتهٔ ریز که فرمول را درست نگه می‌دارند: (p.buy ? -1 : 1) همان «فروش منهای خرید» است و علامتش دقیقاً مثل ستون «خالص» درمی‌آید؛ داخل حلقه p.size بنویسید نه strategy.size — امروز هر دو یک عددند، ولی p.size اندازهٔ خودِ همان سطر است و اگر روزی سطرها اندازه‌های متفاوت داشته باشند فرمول‌تان بی‌سروصدا غلط نمی‌شود؛ و if (!m || !m.ti) return sum; باعث می‌شود یک نماد بی‌صف یا تایپ‌شدهٔ دستی کل جمع را خراب نکند. اگر ریال نمی‌خواهید و فقط «تعداد × قیمت» مدنظرتان است، * p.size را بردارید.

همان عدد، فقط روی سطر اول

let i = positions.findIndex(p => p.id === position.id); if (i > 0) return ''; let total = positions .filter(p => p.active) .reduce((sum, p) => { let m = p.type === 'ua' ? getUaByNamad(p.namad) : getOptionByNamad(p.namad); if (!m || !m.ti) return sum; let q = p.buy ? m.ti.buy1Price : m.ti.sell1Price; return sum + (p.buy ? -1 : 1) * q * p.count * p.size; }, 0); return commaSeparator(total);

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

نسخهٔ سطر‌به‌سطر همین محاسبه

let q = position.buy ? option.ti.buy1Price : option.ti.sell1Price; return commaSeparator((position.buy ? -1 : 1) * q * position.count * position.size);

اگر سهم هر پا از آن جمع را هم می‌خواهید. اینجا چون فقط با سطر جاری کار داریم، option.ti مستقیم در دسترس است و نیازی به جستجوی نماد نیست — کوتاه‌تر و سریع‌تر.

خروجی رنگی و شرطی

خروجی فرمول می‌تواند HTML باشد. دو تابع کمکی کار را ساده می‌کنند:

سود سبز، زیان قرمز

style(commaSeparator(position.offsetPL), position.offsetPL >= 0 ? 'green' : 'red')

style(value, color, bg, title, bold) یک span رنگی می‌سازد و می‌توانید برایش tooltip هم بگذارید.

رنگ بر اساس آستانه

colorCondition(roundNumber(calcBS().gamma, 4), 0.001, 'gray', 0.01, 'orange')

زیر حد پایین خاکستری، بالای حد بالا نارنجی — برای برجسته‌کردن لگ‌های پرگاما.

نشان ITM با پس‌زمینه

let st = option.state; return st === 'ITM' ? style(st, 'white', 'green', 'در سود است') : style(st, 'gray');

در یک نگاه معلوم می‌شود کدام پاها در سررسید اعمال می‌شوند.

رنگ بر اساس جهت موقعیت

let text = (position.buy ? 'خرید ' : 'فروش ') + commaSeparator(position.count); return style(text, position.buy ? 'green' : 'red', '', '', true);

پارامتر آخر style متن را پررنگ می‌کند. برای استراتژی‌های چندپایه، رنگی‌کردن جهت باعث می‌شود ساختار را از بالای جدول بخوانید نه اینکه سطر به سطر دنبالش بگردید.

نوار قیمت: پایه، اعمال و سربه‌سر روی یک خط

if (position.type === 'ua') return '—'; let be = position.type === 'call' ? position.strike + position.price : position.strike - position.price; return createPriceLine({ width: 180, currentPrice: strategy.uaPrice, points: [ { value: position.strike, color: 'purple', emoji: '▲', tooltip: 'اعمال' }, { value: be, color: 'green', emoji: '◆', tooltip: 'سربه‌سر' } ] });

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

پیشرفته: قرارداد دیگر، تابع عمومی

مقایسه با اعمال بعدی همان زنجیره

let next = optionSE(1); if (!next) return '—'; return commaSeparator(next.ti.sell1Price - option.ti.sell1Price);

تابع optionSE قرارداد هم‌گروه و هم‌سررسید با فاصلهٔ اعمال دلخواه را می‌دهد — برای دیدن اینکه رول‌کردن به اعمال بعدی چقدر خرج دارد.

قرارداد هم‌اعمالِ نوع مقابل

let other = optionSE(0, position.type === 'call' ? 'put' : 'call'); if (!other) return '—'; return commaSeparator(other.ti.lastPrice);

با optionSE(0, …) همان اعمال و همان سررسید را از نوع مقابل می‌گیرید — پایهٔ کار برای سنجیدن پاریتی کال و پوت یا پیدا کردن ساختار مصنوعی معادل.

قیمت زندهٔ یک نماد دلخواه

let base = getUaByNamad(strategy.uaNamad); return base ? commaSeparator(base.ti.lastPrice) : '—';

همهٔ توابع جستجوی دیده‌بان اینجا هم کار می‌کنند: getOptionByNamad ، getOptionsByChain ، optionSU و بقیه.

ارزان‌ترین قرارداد هم‌سررسید در زنجیره

let chain = getOptionsByChain(strategy.uaNamad, position.type, position.daysUntilMaturity); if (!chain || !chain.length) return '—'; let cheapest = chain.reduce((a, b) => (a.ti.sell1Price || Infinity) < (b.ti.sell1Price || Infinity) ? a : b); return cheapest.namad;

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

استفاده از تابع عمومی خودتان

myRiskScore()

اگر در فرمول‌نویسی دیده‌بان تابع عمومی تعریف کرده باشید، همین‌جا هم در دسترس است — و داخل آن تابع هم به position و strategy دسترسی دارید.

ظاهر ستون: رنگ، زمینه، تراز، توضیح

در پنجرهٔ ساخت ستون، بخش تاشوی «ظاهر ستون (رنگ و تراز)» این‌ها را می‌دهد:

  • رنگ متن و رنگ زمینه — با انتخابگر رنگ یا با تایپ مستقیم کد (مثل #0ea5e9).
  • تراز متن — چپ (پیش‌فرض، مناسب اعداد)، وسط یا راست (مناسب متن فارسی).
  • توضیح ستون — متنی که با نگه‌داشتن نشانگر روی عنوان ستون نمایش داده می‌شود. برای ستون‌هایی که فرمول‌شان بدیهی نیست، این را پر کنید؛ سه ماه بعد خودتان هم ممنون می‌شوید.

اگر رنگ را داخل فرمول با style() تعیین کنید، آن رنگ فقط روی همان مقدار اعمال می‌شود؛ تنظیم رنگ در این بخش کل ستون را رنگ می‌کند. برای جزئیات بیشتر دربارهٔ ابزارهای ویژوال، مقالهٔ تنظیمات ویژوال را ببینید.

جای ستون، خاموش/روشن و ترتیب

ستون محاسباتی دقیقاً مثل ستون‌های اصلی رفتار می‌کند. از پاپ‌آور ستون‌ها بالای جدول می‌توانید:

  • ستون را خاموش یا روشن کنید (کلید کنارش)؛
  • با گرفتن دستگیرهٔ کنار نامش، ترتیبش را عوض کنید — هر جای جدول که بخواهید.

ستون‌های محاسباتی در این فهرست با نشان fx مشخص شده‌اند تا از ستون‌های اصلی تفکیک شوند.

چند نکتهٔ رفتاری:

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

ستون‌های آماده

در تب «ستون‌های آماده» فهرستی از فرمول‌های آمادهٔ آپشن‌باز را می‌بینید. با زدن «افزودن به ستون‌ها» یک نسخهٔ کاملاً قابل ویرایش از آن فرمول در فهرست ستون‌های شما ساخته می‌شود و بلافاصله به جدول اضافه می‌گردد.

این بهترین راه برای یادگیری است: یک ستون آماده را اضافه کنید، به تب «ایجاد ستون» بروید و ببینید چطور نوشته شده — بعد دستکاری‌اش کنید تا دقیقاً همان چیزی شود که می‌خواهید. نسخهٔ شما مستقل است؛ تغییرات‌تان روی نسخهٔ اصلی اثری ندارد.

در حال حاضر این ستون‌ها آماده‌اند:

ستون‌های آمادهٔ سازندهٔ استراتژی
ستونچه چیزی نشان می‌دهد
قیمت بستن لگقیمت زندهٔ سمتی که با آن از موقعیت خارج می‌شوید: لگ خرید به صف تقاضا، لگ فروش از صف عرضه
سود/زیان بستناگر همین حالا این لگ را سر صف ببندید، چقدر سود یا زیان می‌کنید
خالص به قیمت روزجمع سطرهای فعال به قیمت زندهٔ سمت درست هر سطر، فروش منهای خرید
اسپرد تقاضا/عرضهفاصلهٔ عرضه و تقاضا به درصد؛ معیار نقدشوندگی قرارداد
کفایت حجم صفآیا حجم سر صف سمت مقابل برای کل موقعیت شما کافی است
گامای موقعیتگامای کل این لگ با علامت جهت؛ منفی یعنی فروشندهٔ گاما هستید
تتای روزانه (ریال)چند ریال در روز بابت گذر زمان می‌پردازید یا می‌گیرید
وگای موقعیت (ریال)به ازای هر یک درصد تغییر نوسان ضمنی، چند ریال کم یا زیاد می‌شوید
سهم از دلتای کلاین لگ چند درصد از جهت‌گیری کل استراتژی را ساخته است
وضعیت اعمالITM / ATM / OTM هر لگ، رنگی
ارزش ریالی موقعیتپول درگیر در همین لگ: تعداد × قیمت ورود × اندازه
سربه‌سر لگنقطهٔ سربه‌سر همین پا به‌تنهایی
بازده وجه تضمینپرمیوم دریافتی نسبت به وجه بلوکه‌شده؛ فقط برای پاهای فروش
بازده ماهانه‌شدهبازده این لگ روی مبنای 30 روزه، تا دوره‌های نابرابر قابل مقایسه شوند
ارزش ذاتی و زمانیپرمیوم فعلی را به دو تکه می‌شکند تا ببینید چقدرش در حال آب‌شدن است

نکته‌هایی که باید بدانید

  • پای جدول برای ستون‌های محاسباتی خالی است. عمدی است: فرمول شما ممکن است نسبت، درصد یا متن برگرداند و جمع‌زدن آن‌ها عددی می‌سازد که معنی ندارد. اگر جمع می‌خواهید، خودتان با positions.reduce(...) بسازید.
  • لگ نماد پایه قرارداد ندارد. برای سطرهای ua آبجکت option با مقادیر صفر پر می‌شود تا فرمول خطا ندهد. بهتر است خودتان با position.type === 'ua' شرط بگذارید.
  • نمادی که در تابلو نیست (مثلاً دستی تایپ شده) هم همین رفتار را دارد: فرمول اجرا می‌شود ولی داده‌های بازار صفرند.
  • اگر نمودار دوم را هم پر کرده باشید، آرایهٔ positions سطرهای هر دو جدول را با هم دارد. برای فرمول‌های تجمیعی این را در نظر بگیرید — در مقابل، strategy.netTotal همیشه خالص جدول اول است.
  • محاسبه با تأخیر کوتاه انجام می‌شود تا با هر تیک بازار جدول نلرزد. عدد شما حداکثر چند دهم ثانیه عقب‌تر از تابلو است.
  • فقط ستون‌های روشن محاسبه می‌شوند. ستون خاموش هیچ هزینه‌ای ندارد.
  • ستون‌ها با حساب کاربری شما همگام‌سازی می‌شوند — روی دستگاه دیگر هم همان ستون‌ها را دارید.
  • فرمول‌نویسی از امکانات اشتراک حرفه‌ای است؛ البته بیرون از ساعت بازار برای همه باز است.

خطاها و عیب‌یابی

اگر فرمول موقع اجرا به مشکل بخورد، همان سلول پیام خطا را نشان می‌دهد — نه کل ستون. رایج‌ترین‌ها:

خطاهای رایج و راه‌حل
نشانهعلت و راه‌حل
«return ندارد»فرمول چندخطی نوشته‌اید ولی آخرش return نگذاشته‌اید. فرمول تک‌خطی نیازی به return ندارد، چندخطی حتماً دارد.
سلول خالی یا «—»فرمول null یا رشتهٔ خالی برگردانده. معمولاً یعنی شرطی که گذاشته‌اید برای این سطر برقرار نیست.
Cannot read properties of nullروی نتیجهٔ یک جستجو (مثل optionSE) بدون بررسی، فیلد خوانده‌اید. اول if (!x) return '—'; بگذارید.
عدد خیلی بزرگ یا خیلی کوچکاحتمالاً ضرب در strategy.size را جا انداخته‌اید یا دوبار اعمال کرده‌اید. قیمت‌ها به‌ازای یک واحدند، نه یک قرارداد.
یونانی برعکس استجهت را در نظر نگرفته‌اید؛ برای موقعیت فروش باید در -1 ضرب شود.

سؤال‌های پرتکرار

ستونی که ساختم روی همهٔ استراتژی‌هایم می‌آید یا فقط همین یکی؟

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

اگر ستون را حذف کنم، استراتژی‌هایم چیزی از دست می‌دهند؟

نه. ستون محاسباتی فقط نمایش است و در محاسبات نمودار سود/زیان یا اعداد ذخیره‌شدهٔ استراتژی نقشی ندارد.

فرمول‌های قدیمی‌ام از نسخهٔ قبلی آپشن‌باز منتقل می‌شوند؟

خیر، خودکار منتقل نمی‌شوند و باید دوباره ساخته شوند. اسم فیلدها هم کمی فرق کرده (row.* شده position.*) و همان‌طور که بالاتر گفتیم، row.iv قدیمی در واقع نرخ بهره بود.

چطور عدد یک سطر را از سطر دیگر کم کنم؟

با آرایهٔ positions. اول با positions.findIndex(p => p.id === position.id) جای سطر جاری را پیدا کنید، بعد positions[i + 1] سطر بعدی است. مثال‌های کاملش در بخش جمع و تفریق بین سطرها آمده.

چطور بگویم اگر جهت خرید بود قیمت خریدار و اگر فروش بود قیمت فروشنده را نشان بده؟

با یک شرط روی position.buy:

position.buy ? option.ti.buy1Price : option.ti.sell1Price

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

می‌توانم از ستونی که قبلاً ساخته‌ام در فرمول ستون بعدی استفاده کنم؟

نه؛ ستون‌ها نتیجهٔ همدیگر را نمی‌خوانند و هر کدام مستقل اجرا می‌شوند. اگر محاسبه‌ای را در دو ستون لازم دارید، یا دوباره بنویسیدش یا یک بار به‌صورت تابع عمومی در فرمول‌نویسی دیده‌بان تعریف کنید و در هر دو ستون صدایش بزنید — توابع عمومی بین دیده‌بان و استراتژی مشترک‌اند.

چرا داخل reduce قیمت تابلوی سطرها صفر می‌شود؟

چون اعضای آرایهٔ positions فقط اطلاعات خودِ سطر جدول را دارند، نه داده‌های زندهٔ بازار را؛ پس p.ti اصلاً وجود ندارد و فرمول بدون خطا صفر برمی‌گرداند. داخل حلقه، قرارداد هر سطر را با نمادش پیدا کنید: getOptionByNamad(p.namad) (و برای لگ نماد پایه getUaByNamad(p.namad)). مثال کامل و آماده در خالص کل به قیمت زندهٔ تابلو هست.

چند ستون می‌توانم بسازم؟

محدودیتی نگذاشته‌ایم. ولی در عمل، جدولی با بیست ستون خوانده نمی‌شود؛ ستون‌هایی را که همیشه لازم ندارید خاموش نگه دارید.

می‌توانم خروجی ستون را در ذخیرهٔ استراتژی یا اشتراک‌گذاری ببینم؟

ستون‌ها بخشی از تنظیمات نمایش شما هستند، نه بخشی از خود استراتژی. کسی که لینک اشتراک شما را باز می‌کند، ستون‌های خودش را می‌بیند.

در لیست استراتژی‌های ذخیره‌شده هم می‌آید؟

نه؛ آن جدول ستون‌های خودش را دارد. ستون محاسباتی مخصوص جدول موقعیت‌های داخل سازنده است.

قدم بعدی: اگر می‌خواهید عمیق‌تر وارد فرمول‌نویسی شوید، راهنمای کامل فرمول‌نویسی فهرست تمام فیلدها و توابع را دارد و نمودار تاریخی و نمای ماتریسی هم ابزارهای مکمل همین صفحه‌اند.

مقالات مرتبط

راهنمای نمودار استراتژی اختیار معامله | ساخت و تحلیل سود و زیان

آموزش کامل نمودار استراتژی آپشن‌باز: ساخت چندپایه، قیمت روز، مقایسه با نمودار دوم، ورود اکسل کارگزاری، what-if، یونانی‌ها، جدول ماتریس، کارمزد، ذخیره و اتصال به فرمول‌نویسی — برای مبتدی تا حرفه‌ای.

راهنمای فرمول نویسی و استراتژی های آماده در دیده بان آپشن

آموزش سیستم فرمول‌نویسی دیده‌بان: کارگاه شخصی و کتابخانه استراتژی‌های آماده اختیار معامله — هر دو با همان موتور فرمول؛ افزودن به جدول، فیلتر و میزکار.

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

راهنمای جامع دیده‌بان آپشن‌باز: جدول زنده قراردادها، فیلتر سریع روی سرستون (سربه‌سر، IV و …)، پنل فیلتر، فرمول‌نویسی، آلارم و اتصال به نمودار استراتژی.

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

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

لیست استراتژی های ذخیره شده | سبد، تگ و بایگانی

راهنمای لیست استراتژی آپشن‌باز: مدیریت سناریوهای ذخیره‌شده با سبد، تگ، بایگانی، فیلتر و باکس میزکار — بارگذاری، جستجو و رصد متریک زنده.

راهنمای جدول سود و زیان استراتژی آپشن | نمای ماتریس قیمت×تاریخ

آموزش جدول heatmap سود/زیان استراتژی آپشن: خواندن ماتریس قیمت×تاریخ، مثال کامل کاوردکال گام‌به‌گام، ریال/درصد/ریسک و ردیف زنده.

راهنمای نمودار تاریخی استراتژی آپشن | تحلیل سود و زیان قبل از سررسید

آموزش نمودار تاریخی در نمودار استراتژی آپشن‌باز: منحنی زمانی بلک-شولز، اسلایدر تاریخ و IV، حالت چند منحنی (امروز/میانه/سررسید) و تفاوت با What-if.

آلارم استراتژی ذخیره شده | هشدار س/ز آفست و آفست ماهانه

راهنمای آلارم استراتژی آپشن‌باز: هشدار مستقل روی «س/ز آفست» و «س/ز آفست (M)» برای استراتژی‌های ذخیره‌شده — شرط، آستانه، صدا و اعلان مرورگر، و فاصله تکرار.

راهنمای میزکار آپشن باز | چند ابزار هم زمان روی یک صفحه

راهنمای جامع میزکار: تب و بوم، همه انواع باکس (دیده‌بان، واچ‌لیست، نماد پایه، زنجیره، نمودار و لیست استراتژی، ماشین حساب، سقف موقعیت باز، کارهای من، نبض بازار و نقشه‌ها)، بورس کالا، حالت تمرکز، آلارم و چیدمان.

تابع optionSE | دسترسی به قراردادهای هم گروه و هم سررسید

آموزش optionSE در فرمول‌نویسی دیده‌بان: آرایه هم‌سررسید، اعمال بالاتر/پایین‌تر، طرف مقابل os، با مثال ستون.

ضرایب پوشش ریسک یونانی

نقشهٔ یونانی‌های آپشن: دلتا، گاما، تتا، وگا و رو — جدول یک‌نگاه، لینک مقالهٔ تخصصی هر کدام، مشاهده روی نمودار استراتژی و calcBS در دیده‌بان آپشن‌باز.

مدل بلک شولز و قیمت تئوری قرارداد اختیار معامله

مدل بلک‌شولز در آپشن — قیمت تئوری، IV ضمنی، یونانی‌ها و استفاده در دیده‌بان و جزئیات قرارداد.

آموزش ویدیویی نمودار سود و زیان استراتژی اختیار معامله | 4 ویدیو

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

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

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

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

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

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

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