جدول موقعیتهای نمودار استراتژی ستونهای ثابتی دارد — نماد، تعداد، اعمال، قیمت، دلتا، روز، وجه تضمین و خالص. اینها برای اکثر کارها کافیاند، تا روزی که به عددی نیاز پیدا کنید که آنجا نیست: مثلاً گامای هر لگ، یا سهم هر موقعیت از کل پول درگیر.
ستون محاسباتی برای همین است: با یک فرمول کوتاه، ستون خودتان را به همان جدول اضافه میکنید. این راهنما میگوید دکمهاش کجاست، فرمول به چه چیزهایی دسترسی دارد، و خروجی چطور در سلول مینشیند.
فهرست مطالب
این مقاله به شما یاد میدهد چطور در نمودار سود و زیان استراتژی ستون دلخواه خودتان را بسازید: ستونی که هر چه لازم دارید — گاما، سربهسر، بازده روی وجه تضمین، سهم هر لگ از ریسک — را برای تکتک موقعیتها حساب میکند و کنار بقیهٔ ستونها مینشیند.
1 — شروع
- ستون محاسباتی چیست و چه دردی را دوا میکند؟
- کجاست؟ دکمهٔ «ساخت ستون»
- اولین ستون شما در یک دقیقه
- پنج قاعدهٔ نوشتن فرمول
2 — چه چیزی در اختیار دارید
- چهار آبجکت: option ، ua ، position ، strategy
- فیلدهای position (سطر جاری)
- فیلدهای strategy (کل استراتژی)
- آرایهٔ positions — فرمولهای تجمیعی
- تفاوت با فرمولنویسی دیدهبان
3 — مثالها
- مثالهای پایه: ارزش، وزن، تعداد
- قیمت زندهٔ تابلو: تقاضا، عرضه و جهت موقعیت
- یونانیها: گاما، تتا، وگا
- سربهسر و فاصله تا آن
- سود/زیان لحظهای و آفست
- وجه تضمین و بازده روی سرمایهٔ درگیر
- زمان: بازده ماهانه و روز معاملاتی
- جمع و تفریق بین سطرها با positions
- خروجی رنگی و شرطی
- پیشرفته: قرارداد دیگر، تابع عمومی
4 — تنظیم و مدیریت
5 — ریزهکاریها
ستون محاسباتی چیست و چه دردی را دوا میکند؟
جدول موقعیتهای نمودار استراتژی ستونهای ثابتی دارد: نماد، تعداد، اعمال، قیمت، دلتا، روز، IV، وجه تضمین، آفست و خالص. اینها برای اکثر کارها کافیاند — تا روزی که به عددی نیاز پیدا کنید که آنجا نیست.
مثلاً میخواهید گامای هر لگ را ببینید. یا بدانید هر موقعیت چند درصد از کل پول درگیر استراتژی را گرفته است. یا فاصلهٔ قیمت پایه تا سربهسر همان لگ را. تا امروز راهش این بود که اعداد را کپی کنید و در اکسل حساب کنید؛ و فردا که قیمتها تکان خورد، دوباره از اول.
ستون محاسباتی دقیقاً همین را حل میکند: شما یک خط فرمول مینویسید، آپشنباز آن را برای هر سطر جدول جداگانه اجرا میکند و نتیجه را در یک ستون تازه — کنار بقیهٔ ستونها، با رنگ و تراز دلخواه شما — نشان میدهد. با هر تیک بازار هم خودش بهروز میشود.
اگر با فرمولنویسی دیدهبان آشنا هستید، 90٪ راه را آمدهاید. موتور، توابع و ساختار دقیقاً همان است؛ فقط دو آبجکت تازه اضافه شده که به اطلاعات موقعیت و استراتژی دسترسی میدهند. اگر آشنا نیستید نگران نباشید — همین مقاله از صفر شروع میکند و راهنمای کامل فرمولنویسی هم همیشه یک کلیک فاصله دارد.
کجاست؟ دکمهٔ «ساخت ستون»
به صفحهٔ نمودار سود/زیان و ساخت استراتژی بروید. بالای جدول موقعیتها، در همان ردیفی که دکمههای «جدید»، «ذخیره»، «اشتراک» و هستند، دکمهٔ «ساخت ستون» را میبینید.
با کلیک روی آن پنجرهٔ «ساخت و مدیریت ستون محاسباتی» باز میشود که سه بخش دارد:
- ایجاد ستون — جایی که فرمول مینویسید و ظاهر ستون را تنظیم میکنید.
- ستونهای آماده — فرمولهای از پیش نوشتهشدهٔ آپشنباز که با یک کلیک به ستونهای شما اضافه میشوند.
- راهنما — فهرست همهٔ فیلدهایی که میتوانید در فرمول استفاده کنید، بهعلاوهٔ لینک همین مقاله و راهنمای کامل فرمولنویسی.
میانبر: روی عنوان یک ستون محاسباتی در جدول راستکلیک کنید تا همان ستون مستقیم برای ویرایش باز شود. همان ژستی که در نسخهٔ قدیمی آپشنباز بود.
اولین ستون شما در یک دقیقه
بیایید ستونی بسازیم که ارزش ریالی هر موقعیت را نشان میدهد.
- روی ساخت ستون کلیک کنید.
- در کادر نام ستون بنویسید: ارزش موقعیت
- در کادر فرمول این خط را بنویسید:
position.count * position.price * strategy.size
- روی ذخیره بزنید.
همین. ستون تازه بلافاصله در جدول ظاهر میشود — درست بعد از ستون «نماد» — و برای هر سطر عدد خودش را نشان میدهد. لازم نیست چیز دیگری روشن کنید؛ ستونِ تازهساخته خودکار به جدول اضافه میشود.
زیر کادر فرمول یک نوار وضعیت هست: تا وقتی فرمول درست باشد میگوید «فرمول بدون خطا اجرا میشود»، و اگر جایی را اشتباه بنویسید همانجا پیام خطا را نشان میدهد — قبل از اینکه ذخیره کنید.
پنج قاعدهٔ نوشتن فرمول
قبل از رفتن سراغ مثالها، این پنج قاعده را یکبار بخوانید؛ بعد از آن هر مثالی در این مقاله برایتان روشن است. فرمولها به زبان جاوااسکریپت نوشته میشوند، ولی برای استفاده از آنها لازم نیست برنامهنویس باشید — کپیکردن یک مثال و عوضکردن یک اسم فیلد، کار اکثر آدمها را راه میاندازد.
قاعدهٔ 1 — فرمول یکخطی return نمیخواهد
یک عبارت ساده بنویسید؛ همان حاصل در سلول مینشیند. هر چهار آبجکت (option ، ua ، position ، strategy) را میتوانید آزادانه با هم ترکیب کنید.
قاعدهٔ 2 — فرمول چندخطی حتماً return میخواهد
بهمحض اینکه فرمول دو خط شد، باید صریحاً بگویید کدام مقدار نمایش داده شود. اگر return را جا بیندازید، همان زیر کادر پیام «return ندارد» میگیرید — یعنی هنوز ذخیره نکرده، خبردار میشوید.
قاعدهٔ 3 — متغیر بسازید تا فرمول خوانا بماند
با let هر محاسبهٔ میانی را یک اسم بدهید. فرمولی که سه ماه بعد هم بفهمید چه میکند، فرمول بهتری است — و موقع عیبیابی خیلی راحتتر است.
قاعدهٔ 4 — شرط با علامت سؤال: «اگر … وگرنه …»
این الگوی سهبخشی — اول شرط، بعد علامت سؤال و حالتی که شرط برقرار است، بعد دونقطه و حالت دیگر — ستونفقرات نصف مثالهای این مقاله است. همین یک خط، پرکاربردترین الگوی ستون محاسباتی است: یک کار برای سطرهای خرید، کار دیگری برای سطرهای فروش. برای شرطهای تودرتو هم میتوانید پشت سر هم بیاورید یا از if استفاده کنید:
قاعدهٔ 5 — قبل از تقسیم و قبل از خواندن چیزی که ممکن است نباشد، محافظ بگذارید
دو خطای رایج با همین یک خط از بین میروند: تقسیم بر صفر (که Infinity یا NaN میسازد) و خواندن فیلد از چیزی که پیدا نشده. قاعدهٔ کلی: هر جا مخرج دارید یا نتیجهٔ یک جستجو را میخوانید، اول با if (!x) return '—'; راه فرار بگذارید.
توابع کمکی که مدام تکرار میشوند: roundNumber(n, decimals) گرد میکند، commaSeparator(n) عدد را سهرقمسهرقم جدا میکند، calcBS() یونانیها را میدهد و style(value, color) خروجی را رنگی میکند. فهرست کامل توابع در راهنمای فرمولنویسی و در تب «راهنما»ی همین پنجره است.
چهار آبجکت: option ، ua ، position ، strategy
وقتی فرمول شما برای یک سطر اجرا میشود، چهار آبجکت در اختیارتان است:
| آبجکت | چه چیزی است |
|---|---|
option | اطلاعات قرارداد همین سطر: اعمال، سررسید، IV، وجه تضمین، اطلاعات معاملاتی (option.ti) و… . دقیقاً همان چیزی که در دیدهبان دارید. |
ua | نماد پایهٔ همین قرارداد: نوسان تاریخی، IV Rank، اطلاعات معاملاتی (ua.ti) و… |
position | تازه — خودِ سطر جدول: خرید یا فروش، تعداد، قیمت ورودی که شما زدهاید، وجه تضمین، آفست و… |
strategy | تازه — کل استراتژی: قیمت پایه، اندازهٔ قرارداد، نرخ بهره، خالص و آفست کل |
تفاوت مهم option و position را جدی بگیرید: option.ti.lastPrice قیمت زندهٔ بازار است، اما position.price قیمتی است که شما در جدول وارد کردهاید — یعنی قیمت ورود واقعیتان. اکثر محاسبات سود و زیان به دومی نیاز دارند.
فیلدهای 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.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 را دارد.
تفاوت با فرمولنویسی دیدهبان
موتور یکی است، ولی دو محیط از هم جدا نگه داشته شدهاند و این عمدی است:
- ستونهایی که اینجا میسازید فقط در جدول موقعیتهای استراتژی دیده میشوند؛ در دیدهبان ظاهر نمیشوند.
- ستونهای دیدهبان هم اینجا در فهرست شما نمیآیند.
- دلیلش ساده است: در دیدهبان اصلاً «موقعیتی» وجود ندارد — آنجا
positionوstrategyبرابرnullهستند. اگر ستونها را قاطی میکردیم، فرمولی که بهposition.countاشاره دارد در دیدهبان فقط خطا نشان میداد.
در عوض توابع عمومی (همان توابع دلخواهی که خودتان در دیدهبان تعریف میکنید) بین هر دو محیط مشترکاند — یک بار بنویسید، هر دو جا استفاده کنید.
مثالهای پایه
ارزش ریالی موقعیت
سادهترین محاسبهٔ ممکن و در عین حال یکی از پرکاربردترینها: هر لگ چقدر پول است.
سهم این لگ از کل خالص استراتژی
وقتی چهار لگ دارید، این ستون فوراً میگوید کدامشان سنگینترین بخش معامله است.
جهت و تعداد به زبان آدمیزاد
ستونها فقط عدد نیستند؛ هر رشتهٔ متنی هم قابل نمایش است.
فقط برای اختیارها، نه نماد پایه
لگ نماد پایه اعمال ندارد؛ با یک شرط ساده بهجای عدد بیمعنی، خط تیره نشان دهید.
پرداختی یا دریافتی؟
همان الگوی «اگر خرید … وگرنه …» روی یک عدد ریالی: خرید پول از جیب شما میبرد و فروش به جیب شما میآورد.
فاصلهٔ پایه تا اعمال، به درصد
عدد مثبت یعنی اعمال بالای قیمت پایه است. برای مقایسهٔ سریع لگهای چند نماد مختلف، درصد خیلی گویاتر از ریال است.
تعداد قرارداد بر حسب سهم
هر قرارداد چند سهم است؛ این ستون میگوید این لگ روی چند سهم پایه سوار است — برای تطبیق با موجودی پرتفوی.
قیمت زندهٔ تابلو: تقاضا، عرضه و جهت موقعیت
تا اینجا با position.price کار کردیم که قیمت ورود شماست. ولی صفهای زندهٔ تابلو هم در دسترساند: option.ti کل ردیف معاملاتی قرارداد را دارد و مهمترینهایش اینها هستند:
| فیلد | چیست |
|---|---|
option.ti.buy1Price | قیمت خریدار — بهترین قیمت صف تقاضا (سطر اول خرید). قیمتی که همین حالا میتوانید به آن بفروشید. |
option.ti.sell1Price | قیمت فروشنده — بهترین قیمت صف عرضه (سطر اول فروش). قیمتی که همین حالا میتوانید از آن بخرید. |
option.ti.buy1Volume / sell1Volume | حجم همان سطر اول — یعنی چند قرارداد در آن قیمت آماده است. |
option.ti.lastPrice | آخرین قیمت معاملهشده |
option.ti.endPrice | قیمت پایانی |
تا پنج سطر عمق بازار هم هست (buy2Price تا sell5Price و حجمهایشان). همین فیلدها روی ua.ti برای نماد پایه هم کار میکنند.
اگر خرید است قیمت خریدار، اگر فروش است قیمت فروشنده
پرتکرارترین درخواست کاربران، و دقیقاً همان قاعدهٔ 4: یک شرط روی position.buy و دو فیلد متفاوت. این ستون در واقع قیمت بستن موقعیت را میدهد — یک موقعیت خرید را باید به صف تقاضا بفروشید و یک موقعیت فروش را از صف عرضه بخرید.
اگر امروز میخواستید همین لگ را باز کنید
دقیقاً برعکس مثال قبل. برای ورود باید سمت مقابل را بزنید: خرید از صف عرضه، فروش به صف تقاضا. مقایسهٔ این ستون با ستون «قیمت» میگوید امروز همان معامله چقدر گرانتر یا ارزانتر تمام میشد.
سود/زیان اگر همین الان ببندید
شبیه ستون آمادهٔ آفست است، با یک تفاوت مهم: بهجای قیمت آفست، قیمت واقعیِ سر صف را مبنا میگیرد. یعنی محافظهکارانهترین برآورد از سود امروز شما.
اسپرد تقاضا/عرضه — این قرارداد چقدر نقدشونده است؟
اسپرد پهن یعنی ورود و خروج گران تمام میشود. قبل از اینکه به یک استراتژی چندپایه دل ببندید، این ستون را یک نگاه بیندازید — گاهی سود روی کاغذ، کل اسپرد است.
آیا حجم سر صف برای من کافی است؟
حجم سمت مقابلِ همین سطر را با تعداد قرارداد شما میسنجد: سبز یعنی کل موقعیت در یک سفارش جا میشود، قرمز یعنی باید تکهتکه بزنید.
فقط برای دیدنِ این رنگ لازم نیست ستون بسازید: بَجِ حجمِ داخلِ فیلدهای قیمت و افست همین قضاوت را خودش رنگی میکند (ستونهای جدول پوزیشنها). این ستون وقتی میارزد که بخواهید روی همین معیار مرتبسازی کنید، یا تعریفِ «کافی» را عوض کنید — مثلاً چند سطح اول صف را با هم جمع بزنید.
اختلاف قیمت ورود شما با تابلو
calcRateChange(a, b) درصد تغییر از a به b را میدهد (خودش گرد میکند). عدد مثبت یعنی قرارداد از زمان ورود شما گرانتر شده — که برای لگ خرید خوب است و برای لگ فروش بد.
یک نکته دربارهٔ basePrice(): در دیدهبان تابعی هست به نام basePrice(option) که قیمت را بر اساس «مبنای قیمت» تولبار برمیگرداند. در جدول استراتژی این تولبار وجود ندارد، بنابراین basePrice() همیشه آخرین قیمت را میدهد. اگر تقاضا یا عرضه میخواهید، همانطور که در مثالهای بالا دیدید مستقیم option.ti.buy1Price یا option.ti.sell1Price را بنویسید.
یونانیها: گاما، تتا، وگا
تابع calcBS() کل خروجی بلکشولز را میدهد: { bs, delta, gamma, vega, theta, rho, iv }. جدول استراتژی ستون دلتا دارد ولی بقیهٔ یونانیها را ندارد — اینجا اضافهشان کنید.
گامای هر لگ
گاما میگوید دلتای این لگ با حرکت پایه چقدر عوض میشود — برای فهمیدن اینکه کدام لگ پوشش شما را ناپایدار میکند.
تتای موقعیت (نه تکقرارداد)
نکتهٔ مهم: calcBS() یونانی یک قرارداد را میدهد. برای اینکه عدد به موقعیت شما مربوط شود باید در تعداد و جهت ضرب شود — فروش، تتا را برعکس میکند.
وگا با علامت درست
حساسیت این لگ به نوسان. جمع این ستون روی کل استراتژی میگوید شما خریدار نوسانید یا فروشندهٔ آن.
یونانیها با IV دلخواه شما
اگر IV سطر را دستی عوض کرده باشید (برای سناریوسازی)، این شکل از فراخوانی همان عدد شما را مبنا میگیرد.
دلتای موقعیت به «سهم معادل»
دلتای خام عددی بین منفی یک تا یک است و حس ملموسی نمیدهد. ضرب در تعداد و اندازهٔ قرارداد آن را به زبانی برمیگرداند که میفهمید: این لگ فعلاً معادل چند سهم پایه ریسک باز دارد. جمع این ستون روی همهٔ سطرها، جهتگیری واقعی استراتژی شماست.
دلتای ریالی — با یک درصد حرکت پایه چقدر جابهجا میشوم؟
همان دلتای معادل، ضرب در یک درصد قیمت پایه. عدد نهایی مستقیم به ریال است — برای اینکه بدانید نوسان روزانهٔ پایه چه معنایی برای جیب شما دارد.
سربهسر و فاصله تا آن
سربهسر همین لگ
سربهسر هر لگ بهتنهایی. (سربهسر کل استراتژی را خود نمودار نشان میدهد؛ این ستون برای تحلیل تکتک پاها مفید است.)
چند درصد تا سربهسر فاصله داریم؟
فرمول چندخطی هم مجاز است — فقط یادتان باشد حتماً با return مقدار نهایی را برگردانید.
وضعیت ITM / OTM
خروجی ITM ، ATM یا OTM بر اساس قیمت زندهٔ پایه.
سود/زیان لحظهای و آفست
سود/زیان آفست همین سطر
آماده و حاضر است: (قیمت آفست − قیمت ورود) × تعداد × اندازه، با علامت جهت. دربارهٔ مفهوم آفست بیشتر بخوانید.
درصد سود/زیان روی پول همین لگ
همان بازده، ولی نسبت به پولی که روی همین لگ گذاشتهاید — نه کل استراتژی.
ارزش ذاتی و ارزش زمانی
برای دیدن اینکه چقدر از پرمیوم فعلی، ارزش زمانیِ در حال آبشدن است.
وجه تضمین و بازده روی سرمایهٔ درگیر
وجه تضمین درگیر این سطر
فقط سطرهایی که تیک وجه تضمین دارند عدد نشان میدهند.
بازده روی وجه تضمین
برای استراتژیهای فروش (کاوردکال، نیکد پوت و…) این عدد واقعیترین معیار بازده است — چون سرمایهٔ درگیر شما وجه تضمین است، نه پرمیوم.
زمان: بازده ماهانه و روز معاملاتی
بازده ماهانهشده
یک سود 4٪ در 10 روز با یک سود 4٪ در 90 روز زمین تا آسمان فرق دارد. monthlyProfit هر دو را روی مبنای 30 روزه قابل مقایسه میکند.
روز معاملاتی بهجای روز تقویمی
روزهایی که بازار واقعاً باز است. اگر زنجیره در دسترس نباشد (مثلاً لگ نماد پایه) خط تیره میآید.
تتای روزانه به ریال
چند ریال در روز بابت گذر زمان میپردازید یا میگیرید.
جمع و تفریق بین سطرها با positions
این بخش جواب سؤالی است که زیاد پرسیده میشود: «چطور عدد یک سطر را از سطر دیگر کم یا با آن جمع کنم؟» کلیدش آرایهٔ positions است. دو راه دارید و هر دو را با مثال میبینیم:
- سطر مشخص — اول جای سطر جاری را در آرایه پیدا کنید، بعد سطر بعدی یا قبلی را بردارید.
- مجموع سطرها — با
reduceروی کل آرایه یا روی سطرهایی که با فیلتر انتخاب میکنید.
پیدا کردن سطر بعدی و قبلی
هر سطر یک position.id یکتا دارد. با findIndex جای سطر جاری را پیدا کنید؛ از آنجا به بعد به همهٔ سطرها با شماره دسترسی دارید:
هر کدام از اینها ممکن است وجود نداشته باشند (سطر آخر، سطر بعدی ندارد)، پس همیشه قبل از خواندنشان محافظ بگذارید — همان قاعدهٔ 5.
تفاوت قیمت این سطر با سطر بعدی
همان «کم کردن مقدار یک ردیف از ردیف بعدی». در اسپردها این عدد یعنی خالص پرمیوم بین دو پا، و در جدول مرتبشده بر اساس اعمال، یک نگاه میگوید نردبان قیمتی شما چقدر تند است.
فاصلهٔ اعمال تا سطر بعدی — عرض اسپرد
عرض بال در باترفلای و کاندور، یا فاصلهٔ دو پای اسپرد. حداکثر سود و زیان این ساختارها مستقیم از همین عدد میآید.
شمارهٔ سطر
ساده ولی بهدردبخور: وقتی دربارهٔ یک استراتژی با کسی حرف میزنید، «پای 3» خیلی راحتتر از خواندن کل نام نماد است.
جمع زدن روی همهٔ سطرها
الگوی reduce همیشه یک شکل است: از صفر شروع کن، روی هر سطر چیزی به مجموع اضافه کن.
جمع کل یک ستون (چون پای جدول خالی است)
پای جدول برای ستونهای محاسباتی عمداً خالی است؛ اگر جمع میخواهید خودتان بسازید. عدد در همهٔ سطرها یکسان تکرار میشود — که همان کاری است که یک سطر جمع میکند.
این سطر منهای مجموع بقیهٔ سطرها
با p.id !== position.id خودِ سطر جاری را کنار میگذارید. اگر جواب مثبت شد یعنی این یک پا سنگینتر از مجموع بقیهٔ استراتژی است.
مجموع فقط سطرهای خرید (یا فقط فروش)
پرداختی کل در برابر دریافتی کل. اختلاف این دو همان strategy.netTotal است — و این ستون نشان میدهد آن عدد از کجا آمده.
این لگ چند برابر بزرگترین لگ است؟
عدد 1 یعنی خودِ بزرگترین لگ. برای پیدا کردن سریع پای غالب در استراتژیهای نامتقارن.
تعداد لگهای خرید و فروش
ترکیب استراتژی در یک نگاه — مخصوصاً وقتی چند نسخه از یک ساختار را کنار هم میسنجید.
مثالهای نسبتی
سهم این لگ از دلتای کل استراتژی
کدام لگ بیشترین جهتگیری را به استراتژی تحمیل میکند.
آیا این لگ نزدیکترین سررسید است؟
در استراتژیهای تقویمی (کلندر) خیلی به کار میآید.
چند لگ روی همین اعمال داریم؟
برای پیدا کردن سریع پاهای هماعمال در ساختارهای پیچیده مثل باترفلای و کاندور.
مثال کامل: خالص کل به قیمت زندهٔ تابلو
این یکی را جدا آوردهایم چون هم پرتکرار است و هم یک تلهٔ واقعی دارد. صورت مسئله: میخواهیم همان ستون «خالص» را داشته باشیم، ولی بهجای قیمت ورود، قیمت زندهٔ سمت درست تابلو مبنا باشد — برای هر پا، همان قیمتی که با آن بسته میشود. یعنی جمعِ (تعداد × قیمت) روی همهٔ سطرها، با فروش منهای خرید.
تله را اول بدانید: اعضای آرایهٔ positions فقط اطلاعات خودِ سطر جدول را دارند — تعداد، قیمت ورود، جهت، اندازه، دلتا، آفست. دادههای زندهٔ تابلو داخلشان نیست، پس چیزی مثل p.ti.buy1Price یا p.option.ti.buy1Price وجود ندارد و فرمول بیآنکه خطا بدهد صفر برمیگرداند. راه درست این است که داخل حلقه، قرارداد هر سطر را با نمادش دوباره پیدا کنید: getOptionByNamad(p.namad) برای اختیارها و getUaByNamad(p.namad) برای لگ نماد پایه.
به همین دلیل هم ستونها نمیتوانند نتیجهٔ همدیگر را بخوانند: اگر قبلاً ستونی ساختهاید که قیمت درست هر سطر را نشان میدهد، داخل این فرمول باید همان محاسبه را دوباره بنویسید، نه اینکه به آن ستون ارجاع دهید.
خالص کل استراتژی به قیمت تابلو
سه نکتهٔ ریز که فرمول را درست نگه میدارند: (p.buy ? -1 : 1) همان «فروش منهای خرید» است و علامتش دقیقاً مثل ستون «خالص» درمیآید؛ داخل حلقه p.size بنویسید نه strategy.size — امروز هر دو یک عددند، ولی p.size اندازهٔ خودِ همان سطر است و اگر روزی سطرها اندازههای متفاوت داشته باشند فرمولتان بیسروصدا غلط نمیشود؛ و if (!m || !m.ti) return sum; باعث میشود یک نماد بیصف یا تایپشدهٔ دستی کل جمع را خراب نکند. اگر ریال نمیخواهید و فقط «تعداد × قیمت» مدنظرتان است، * p.size را بردارید.
همان عدد، فقط روی سطر اول
چون پای جدول خالی است، عدد جمع روی همهٔ سطرها تکرار میشود. این دو خط اول، آن را فقط یک بار — روی سطر اول — نشان میدهند و بقیهٔ سلولها خالی میمانند.
نسخهٔ سطربهسطر همین محاسبه
اگر سهم هر پا از آن جمع را هم میخواهید. اینجا چون فقط با سطر جاری کار داریم، option.ti مستقیم در دسترس است و نیازی به جستجوی نماد نیست — کوتاهتر و سریعتر.
خروجی رنگی و شرطی
خروجی فرمول میتواند HTML باشد. دو تابع کمکی کار را ساده میکنند:
سود سبز، زیان قرمز
style(value, color, bg, title, bold) یک span رنگی میسازد و میتوانید برایش tooltip هم بگذارید.
رنگ بر اساس آستانه
زیر حد پایین خاکستری، بالای حد بالا نارنجی — برای برجستهکردن لگهای پرگاما.
نشان ITM با پسزمینه
در یک نگاه معلوم میشود کدام پاها در سررسید اعمال میشوند.
رنگ بر اساس جهت موقعیت
پارامتر آخر style متن را پررنگ میکند. برای استراتژیهای چندپایه، رنگیکردن جهت باعث میشود ساختار را از بالای جدول بخوانید نه اینکه سطر به سطر دنبالش بگردید.
نوار قیمت: پایه، اعمال و سربهسر روی یک خط
خروجی ستون میتواند یک نمودار کوچک هم باشد. createPriceLine نقطههای مهم را روی یک نوار افقی نسبت به قیمت فعلی پایه میچیند — با هاور روی هر نشان، فاصلهٔ درصدیاش را میبینید.
پیشرفته: قرارداد دیگر، تابع عمومی
مقایسه با اعمال بعدی همان زنجیره
تابع optionSE قرارداد همگروه و همسررسید با فاصلهٔ اعمال دلخواه را میدهد — برای دیدن اینکه رولکردن به اعمال بعدی چقدر خرج دارد.
قرارداد هماعمالِ نوع مقابل
با optionSE(0, …) همان اعمال و همان سررسید را از نوع مقابل میگیرید — پایهٔ کار برای سنجیدن پاریتی کال و پوت یا پیدا کردن ساختار مصنوعی معادل.
قیمت زندهٔ یک نماد دلخواه
همهٔ توابع جستجوی دیدهبان اینجا هم کار میکنند: getOptionByNamad ، getOptionsByChain ، optionSU و بقیه.
ارزانترین قرارداد همسررسید در زنجیره
کل زنجیرهٔ همسررسید را میگیرد و ارزانترین عرضه را برمیگرداند. الگوی خوبی است برای هر ستونی که میخواهد سطر شما را با بازار بسنجد، نه فقط با بقیهٔ سطرهای جدول.
استفاده از تابع عمومی خودتان
اگر در فرمولنویسی دیدهبان تابع عمومی تعریف کرده باشید، همینجا هم در دسترس است — و داخل آن تابع هم به 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:
همین الگو برای هر فیلد دیگری هم کار میکند — حجم، عمق بازار، هر چیزی که در option.ti باشد. بخش قیمت زندهٔ تابلو شش مثال آمادهٔ دیگر دارد.
میتوانم از ستونی که قبلاً ساختهام در فرمول ستون بعدی استفاده کنم؟
نه؛ ستونها نتیجهٔ همدیگر را نمیخوانند و هر کدام مستقل اجرا میشوند. اگر محاسبهای را در دو ستون لازم دارید، یا دوباره بنویسیدش یا یک بار بهصورت تابع عمومی در فرمولنویسی دیدهبان تعریف کنید و در هر دو ستون صدایش بزنید — توابع عمومی بین دیدهبان و استراتژی مشترکاند.
چرا داخل reduce قیمت تابلوی سطرها صفر میشود؟
چون اعضای آرایهٔ positions فقط اطلاعات خودِ سطر جدول را دارند، نه دادههای زندهٔ بازار را؛ پس p.ti اصلاً وجود ندارد و فرمول بدون خطا صفر برمیگرداند. داخل حلقه، قرارداد هر سطر را با نمادش پیدا کنید: getOptionByNamad(p.namad) (و برای لگ نماد پایه getUaByNamad(p.namad)). مثال کامل و آماده در خالص کل به قیمت زندهٔ تابلو هست.
چند ستون میتوانم بسازم؟
محدودیتی نگذاشتهایم. ولی در عمل، جدولی با بیست ستون خوانده نمیشود؛ ستونهایی را که همیشه لازم ندارید خاموش نگه دارید.
میتوانم خروجی ستون را در ذخیرهٔ استراتژی یا اشتراکگذاری ببینم؟
ستونها بخشی از تنظیمات نمایش شما هستند، نه بخشی از خود استراتژی. کسی که لینک اشتراک شما را باز میکند، ستونهای خودش را میبیند.
در لیست استراتژیهای ذخیرهشده هم میآید؟
نه؛ آن جدول ستونهای خودش را دارد. ستون محاسباتی مخصوص جدول موقعیتهای داخل سازنده است.
قدم بعدی: اگر میخواهید عمیقتر وارد فرمولنویسی شوید، راهنمای کامل فرمولنویسی فهرست تمام فیلدها و توابع را دارد و نمودار تاریخی و نمای ماتریسی هم ابزارهای مکمل همین صفحهاند.