آپشن باز
آپشن باز

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

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

ابزارها

  • میزکار آپشن
  • دیده‌بان آپشن
  • زنجیره قراردادها
  • ماشین حساب بلک‌شولز
  • نقشه بازار سهام

آموزش و ارتباط

  • دانشنامه
  • راهنمای سایت
  • آموزش فرمول‌نویسی
  • راهنمای فرمول‌نویسی
  • پیام‌رسان
  • خرید اشتراک
  • سؤالات متداول
  • پشتیبانی و تیکت

درباره آپشن‌باز

  • درباره ما
  • تماس با ما
  • قوانین و مقررات
  • سلب مسئولیت

© 2026 آپشن باز — تمامی حقوق محفوظ است.

قوانینسلب مسئولیتسؤالات متداولتماس با ماپشتیبانی
دیده‌بانزنجیرهمیزکار

آموزش گام‌به‌گام فرمول‌نویسی اختیار معامله

از «اصلاً نمی‌دانم ستون محاسباتی چیست» تا نوشتن ستون و فیلتر خودت — همین‌جا، بدون نصب چیزی و بدون ثبت‌نام.

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

همین صفحهآموزش تعاملی — یاد بگیر و اجرا کن
راهنمای فرمول‌نویسیمرجع کامل فیلدها و توابعدانشنامه۲۸ مقالهٔ فرمول‌نویسی

فرمول‌نویسی یعنی چه؟

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

جدول دیده‌بانضخود۷۰۰۱ضخود۷۰۰۲ضخود۷۰۰۳فرمول توسلولِ همان ردیفو همین کار برای هر ردیف دیگر تکرار می‌شود

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

ستون محاسباتی و فیلتر چه فرقی دارند؟

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

ستون محاسباتی

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

JavaScript
return roundNumber(intrinsic(), 0);

فیلتر

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

JavaScript
return option.daysUntilMaturity < 30;

و نکته‌ای که خیلی‌ها دیر می‌فهمند: لازم نیست بین این دو یکی را انتخاب کنی. یک فرمول می‌تواند هم‌زمان هر دو باشد — هم عددی نشان بدهد و هم بر اساس همان عدد غربال کند. درس «از ستون به فیلتر» دقیقاً همین را یاد می‌دهد.

به چه کار می‌آید، و به چه کار نمی‌آید

برای این‌ها ساخته شده

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

برای این‌ها ساخته نشده

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

  • بک‌تست و تحلیل تاریخی

    فرمول فقط عکسِ همین لحظهٔ بازار را می‌بیند. تنها نگاهش به گذشته lastDayPrice و lastDayVolume است، یعنی همین دیروز. تابع uaPriceRange() هم قیمت گذشته نیست — پیش‌بینی است که دامنهٔ نوسان امروز را تا سررسید جلو می‌برد. برای «سه ماه پیش چه شد» جای دیگری باید بگردی.

  • سفارش گذاشتن و معامله

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

  • هشدار و زمان‌بندی

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

  • سیگنال خرید و فروش

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

  • قیمت‌گذاری هستون

    یک استثنای فنی که وقتی پیشرفته‌تر شدی به دردت می‌خورد: برخلاف بلک‌شولز که با calcBS() همیشه در دسترس است، option.heston عمداً برای فرمول‌نویسی باز نیست و فقط وقتی فیلتر سریع هستون فعال باشد محاسبه می‌شود. روی هیچ فرمولی به آن تکیه نکن.

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

آزمایشگاه — قدم به قدم

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

دادهٔ آزمایشگاه

۳۲ قرارداد روی ۲ نماد پایه — ثابت و همیشه در دسترس.

خودروقیمت ۲۶۰۰ · نوسان تاریخی ۴۵٪ · IV Rank ۶۲
اهرمقیمت ۱۸۵۰ · نوسان تاریخی ۳۲٪ · IV Rank ۲۸

این اعداد ساختگی‌اند و به بازار واقعی وصل نیستند، ولی الکی هم نیستند: پرمیوم‌ها با همان بلک‌شولزِ خودِ آپشن‌باز قیمت‌گذاری شده‌اند و وضعیت ITM/ATM/OTM با همان طبقه‌بند برنامه حساب شده. پس هر چه اینجا یاد بگیری، روی دیده‌بان واقعی هم همان‌طور کار می‌کند.

فصل ۱ — اولین قدم

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

۱

اولین ستون

ستون محاسباتی

بفهمی فرمول دقیقاً کجا و چند بار اجرا می‌شود.

کوتاه‌ترین فرمول ممکن. option یعنی «قراردادی که همین حالا داریم رویش حساب می‌کنیم» و strike قیمت اعمال آن است. هر چیزی که return کنی، همان چیزی است که در سلول دیده می‌شود.

در حال آماده‌سازی ویرایشگر…
۲

سه منبع داده

ستون محاسباتی

بدانی هر عددی که لازم داری از کدام آبجکت می‌آید.

سه آبجکت در دسترس است و بس. option مشخصات خود قرارداد را دارد (قیمت اعمال، نوع، روز مانده). ua نماد پایه را دارد. و ti تابلوی معاملات است — هم option.ti (تابلوی خود قرارداد) و هم ua.ti (تابلوی نماد پایه). تقریباً هر فرمولی ترکیبی از همین سه‌تاست.

در حال آماده‌سازی ویرایشگر…
۳

اولین محاسبه

ستون محاسباتی

یک عدد بسازی که در جدول آماده وجود ندارد.

این «فاصله تا اعمال» است: نماد پایه چند درصد باید حرکت کند تا به قیمت اعمال برسد. عدد مثبت یعنی قیمت اعمال بالاتر از قیمت فعلی است، منفی یعنی پایین‌تر.

در حال آماده‌سازی ویرایشگر…
۴

خوانا کردن خروجی

ستون محاسباتی

خروجی را مرتب کنی، بدون اینکه سورت ستون خراب شود.

roundNumber(value, decimals) یکی از ده‌ها تابع آمادهٔ آپشن‌باز است. خروجی فرمول می‌تواند HTML باشد، پس می‌شود متن و برچسب هم اضافه کرد.

در حال آماده‌سازی ویرایشگر…

فصل ۲ — تصمیم گرفتن

از «نمایش دادن» به «تصمیم گرفتن» می‌رسی: شرط، رنگ، و تبدیل همان کد به فیلتر.

۵

شرط گذاشتن

ستون محاسباتی

فرمول بر اساس وضعیت قرارداد جواب متفاوت بدهد.

option.state وضعیت قرارداد نسبت به قیمت پایه است و خودِ آپشن‌باز حسابش کرده: ITM یعنی در سود، OTM یعنی بی‌سود، و ATM یعنی قیمت پایه تا ±۱٪ دور قیمت اعمال است. خودت دوباره حسابش نکن — این تنها تعریف معتبر در کل برنامه است.

در حال آماده‌سازی ویرایشگر…
۶

رنگ و برچسب

ستون محاسباتی

ستون را طوری بسازی که با یک نگاه خوانده شود.

style(value, color, background, tooltip) خروجی را رنگی می‌کند و آرگومان چهارم تولتیپ می‌شود. تابع colorCondition(value, min, minColor, max, maxColor) هم هست که خودش بازه‌ها را رنگ می‌کند — برای وقتی که شرط‌ها فقط عددی‌اند.

در حال آماده‌سازی ویرایشگر…
۷

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

فیلتر

با یک کد، هم ستون داشته باشی هم فیلتر.

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

در حال آماده‌سازی ویرایشگر…

فصل ۳ — ابزارهای واقعی

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

۸

توابع آماده

ستون محاسباتی

به‌جای بازنویسی فرمول‌های استاندارد، از تابع آماده استفاده کنی.

این‌ها را خودت ننویس. intrinsic() ارزش ذاتی، timeValue() ارزش زمانی، breakeven() نقطهٔ سربه‌سر و calcBS() کل بلک‌شولز (قیمت تئوری و همهٔ یونانی‌ها) را می‌دهد. همه‌شان خودشان option و ua ردیف جاری را برمی‌دارند، پس آرگومان لازم ندارند.

در حال آماده‌سازی ویرایشگر…
۹

نگاه به کل زنجیره

ستون محاسباتی

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

فرمول برای هر ردیف جدا اجرا می‌شود، ولی حبس آن ردیف نیست. getOptionsByChain(نماد پایه، نوع، روز مانده) همهٔ هم‌گروه‌ها را می‌دهد. optionSE(n) هم هست که قرارداد nاُم بالاتر یا پایین‌تر از استرایک فعلی را برمی‌گرداند — پایهٔ هر فرمول اسپرد.

در حال آماده‌سازی ویرایشگر…

۱۰. چهار تله‌ای که بی‌صدا خرابت می‌کنند

این ۴ مورد خطا نمی‌دهند. جدول پر می‌شود، همه‌چیز سالم به نظر می‌رسد، و جواب غلط است. هرکدام را در هر دو حالت اجرا کن و تفاوت را ببین.

۱

قاطی‌کردن دو مقیاس نوسان

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

JavaScript
// iv اعشاری است (۰.۴۲ یعنی ۴۲٪)
// ivRank صدتایی است (۶۲ یعنی ۶۲)
return option.iv > ua.ivRank ? 'گران' : 'ارزان';

option.iv، option.wiv و ua.hv اعشاری‌اند، ولی ua.ivRank و ua.ivPercentile روی مقیاس ۰ تا ۱۰۰ هستند. مقایسهٔ مستقیمشان یعنی خطای ۱۰۰ برابری، و چون هر دو عددند جاوااسکریپت اعتراضی نمی‌کند.

کد درست

JavaScript
return option.iv * 100 > ua.ivRank ? 'گران' : 'ارزان';
۲

بدنهٔ چندخطی بدون return

نشانه: سلول‌ها می‌شوند «⚠ return ندارد».

JavaScript
const distance = ((option.strike - ua.ti.lastPrice) / ua.ti.lastPrice) * 100;
roundNumber(distance, 1);

فرمول تک‌خطی خودش نتیجه را برمی‌گرداند، ولی به‌محض اینکه بدنه چند دستور شد، باید صریحاً return بنویسی. این یکی حداقل سر و صدا می‌کند؛ سه تای دیگر نمی‌کنند.

کد درست

JavaScript
const distance = ((option.strike - ua.ti.lastPrice) / ua.ti.lastPrice) * 100;
return roundNumber(distance, 1);
۳

هم‌نام شدن با خودِ قرارداد

نشانه: نه خطا، نه هشدار — سلول‌ها فقط خالی می‌مانند.

JavaScript
let option = 5;

return option.strike;

موتور بدنهٔ فرمول را داخل اسکوپ خودش می‌پیچد، پس let option آبجکت واقعی را جایگزین نمی‌کند بلکه رویش سایه می‌اندازد. نتیجه‌اش سلول خالی است، نه پیام خطا؛ و چون هیچ نشانه‌ای نمی‌بینی، دنبال اشتباه در جای اشتباه می‌گردی. اسم option، ua، context، position و strategy را برای متغیر خودت انتخاب نکن.

کد درست

JavaScript
let myNumber = 5;

return option.strike + myNumber;
۴

صفر فرض‌کردن دادهٔ نداشته

نشانه: بیشتر ردیف‌ها درست‌اند، ولی چند تا Infinity یا NaN می‌شوند و سورت ستون را بی‌معنی می‌کنند.

JavaScript
return roundNumber(option.ti.volume / option.ti.lastDayVolume, 1);

lastDayVolume و lastDayTValue می‌توانند null باشند — قراردادی که دیروز اصلاً معامله نشده. جاوااسکریپت null را صفر می‌گیرد، پس تقسیم می‌شود Infinity (اگر امروز معامله شده) یا NaN (اگر نشده). هر دو در جدول به چشم نمی‌آیند تا وقتی روی ستون سورت بگیری.

کد درست

JavaScript
const yesterday = option.ti.lastDayVolume;
if (!yesterday) return '—';

return roundNumber(option.ti.volume / yesterday, 1);

میز آزاد

میز آزاد

هرچه دوست داری بنویس و روی همان دادهٔ بالا اجرا کن. هیچ‌چیز ذخیره نمی‌شود و هیچ‌چیز خراب نمی‌شود.

در حال آماده‌سازی ویرایشگر…

چند مثال واقعی از اختیار معامله

این‌ها فرمول‌های واقعی‌اند، نه تمرین. هرکدام را می‌توانی مستقیم در میز آزاد باز کنی و روی همان دادهٔ بالا اجرا کنی.

درصد سر به سر

ستونساده

درصد فاصله قیمت سر به سر از قیمت پایه.

JavaScript
calcRateChange(ua.ti.lastPrice, breakeven()) + '%'

ارزش ذاتی رنگی

ستونساده

ارزش ذاتی: سبز اگر ITM، خاکستری اگر OTM.

JavaScript
style(roundNumber(intrinsic(), 0), intrinsic() > 0 ? 'green' : '#999')

درصد دامنه نوسان پایه

ستونساده

درصد مجاز رشد و افت روزانه نماد پایه نسبت به قیمت پایانی دیروز — سقفش صف خرید و کفش صف فروش می‌سازد. uaDailyRange() مبنا (base)، کف و سقف مجاز (low / high) و همان‌ها به درصد (downPct / upPct) را با هم برمی‌گرداند و اگر دامنه‌ای منتشر نشده باشد null می‌دهد؛ برای همین اول باید بررسی شود. خروجی: درصد سقف (+) سبز و درصد کف (−) قرمز.

JavaScript
const r = uaDailyRange();
if (!r) return '';
return style(`+${r.upPct}%`, '#16a34a') + ' / ' + style(`-${r.downPct}%`, '#dc2626');

دلتا رنگی

ستونساده

دلتا با رنگ‌بندی بر اساس مقدار.

JavaScript
let d = calcBS().delta;
return style(d, d > 0.5 ? '#16a34a' : d > 0.3 ? '#ea580c' : '#dc2626', '', 'delta');

قیمت اعمال تا سررسید در دسترس است؟

فیلترمتوسط

با uaPriceRange() بررسی می‌کند نماد پایه اصلاً فرصت دارد تا سررسید به قیمت اعمال برسد یا نه: high قیمتی است که با صف خرید پشت سر هم و low قیمتی که با صف فروش پشت سر هم قابل دسترس است. بدون آرگومان، روزهای معاملاتی مانده تا سررسید همان قرارداد را می‌گیرد (دامنه نوسان در هر روز معاملاتی یک بار اعمال می‌شود، نه در هر روز تقویمی). قراردادهایی که پایه‌شان حتی در بهترین حالت به استرایک نمی‌رسد کنار گذاشته می‌شوند.

JavaScript
const r = uaPriceRange();
if (!r) return false;
return option.type == 'call'
  ? option.strike <= r.high
  : option.strike >= r.low;

قدم بعدی

راهنمای فرمول‌نویسی

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

دیدن مرجع ←

زبان فرمول‌نویسی

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

خواندن مقاله ←

فرمول‌های آماده

فهرست کامل ستون‌ها و فیلترهای آماده‌ای که بدون نوشتن حتی یک خط کد می‌توانی روی دیده‌بانت نصب کنی — با شرح تنظیمات هرکدام.

دیدن فهرست ←

مطالعهٔ بیشتر

۲۸ مقالهٔ دانشنامه دربارهٔ فرمول‌نویسی: پیاده‌سازی کاورد کال، انواع اسپرد، باترفلای، بلک‌شولز و یونانی‌ها، فیلترهای ترکیبی و بیشتر.

دستهٔ فرمول‌نویسی ←

حالا روی بازار واقعی امتحانش کن

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

رفتن به دیده‌بان

سؤالی داری؟ همین‌جا بپرس

ثبت پرسش/نظر شما

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

هنوز نظری ثبت نشده است.