این مقاله برای کسانی است که میخواهند خودشان در دیدهبان با فرمولنویسی ترکیبهای شورت کال باترفلای (Short Call Butterfly) را پیدا کنند: فروش ۱ کال با اعمال پایین (K1)، خرید ۲ کال با اعمال میانی (K2) و فروش ۱ کال با اعمال بالا (K3) روی یک نماد و یک سررسید، با شرط تقارن K2 − K1 = K3 − K2.
منطق کد: از ردیف جاری بهعنوان K1 شروع کنید، با تابع optionSE اعمالهای بالاتر را برای K2 و K3 پیدا کنید، اعتبار خالص دریافتی را با سمت درست سرخطها حساب کنید و سپس سود دو دنباله، حداکثر زیان، دو سربهسر و سرمایهٔ درگیر را بسازید. مبانی مفهومی در شورت کال باترفلای و راهنمای اسکنر آماده در پیادهسازی در دیدهبان آمده است.
برای ساخت فرمول، به دیدهبان آپشن بروید، یا از طریق میزکار باکس دیدهبان اضافه کنید؛ سپس را بزنید. جزئیات فیلدها و توابع در راهنمای فرمولنویسی آمده است.
چهار قرارداد، سه پایه در کد
نسبت پایهها همیشه ۱ : ۲ : ۱ است و هر سه قرارداد باید اختیار خرید (Call)، همسررسید و روی یک نماد پایه باشند:
option= کال فروختهشده @ K1 (بال پایین)midOption = optionSE(i)= کال خریداریشده، دو قرارداد @ K2 (بدنه)highOption = optionSE(j)باj > i= کال فروختهشده @ K3 (بال بالا)
چون optionSE بهطور پیشفرض فقط قراردادهای همنوعِ ردیف جاری را برمیگرداند، کافی است در ابتدای فرمول یکبار option.type !== 'call' را رد کنید:
شرطهایی که به متغیر حلقه وابسته نیستند (مثل سرخط خودِ ردیف) را بیرون حلقه بگذارید تا در هر تکرار دوباره ارزیابی نشوند.
اعتبار خالص با سمت درست سرخط
هر پایه باید با قیمتی محاسبه شود که واقعاً با آن معامله میشود: پایههای فروش با سرخط تقاضا (buy1Price) و پایهٔ خرید با سرخط عرضه (sell1Price). خطای رایج، استفاده از lastPrice برای هر سه پایه است که اعتبار را خوشبینانه نشان میدهد.
چون بدنه دو قرارداد است، حجم سرخط عرضهٔ K2 باید حداقل ۲ باشد (midOption.ti.sell1Volume < 2 را رد کنید). دربارهٔ نرخها: کارمزد معاملات اختیار معامله.
سه ناحیهٔ کارمزد اعمال — مهمترین نکتهٔ این استراتژی
در منابع خارجی حداکثر سود شورت باترفلای «همان اعتبار خالص دریافتی» معرفی میشود. این جمله در بازار ایران فقط برای دنبالهٔ پایین (زیر K1) درست است؛ بالای K3 هر سه پایه ITM میشوند و اعمال هر چهار قرارداد کارمزد دارد — و کارمزد اعمال فروشنده روی سهام ۰٫۵۵٪ ارزش اعمال است (روی صندوقها/ETF حدود ۰٫۰۵٪). یعنی دو پایهٔ فروش K1 و K3 با هم میتوانند بیش از ۱٪ ارزش قرارداد کارمزد بسازند.
| ناحیهٔ قیمت پایه در سررسید | کدام پایهها اعمال میشوند؟ | کارمزد اعمال | سود/زیان |
|---|---|---|---|
S < K1 | هیچکدام | صفر | سود کامل = اعتبار خالص دریافتی |
K1 < S < K2 | فروش K1 | کارمزد اعمال فروشنده روی K1 | کاهنده تا حداکثر زیان |
K2 < S < K3 | فروش K1 + خرید ۲×K2 | کارمزد فروشندهٔ K1 + دو کارمزد خریدار K2 | افزاینده از حداکثر زیان به بالا |
S > K3 | هر سه پایه | کارمزد فروشندهٔ K1 و K3 + دو کارمزد خریدار K2 | سود ثابت = اعتبار − کارمزد اعمال |
پس در فرمول باید کارمزد اعمال را تابعی از قیمت فرضی سررسید نوشت، نه یک عدد ثابت:
اشتباهی که ستون را غلط میکند
اگر برای سربهسر بالا از کارمزد ناحیهٔ «بالای K3» استفاده کنید، پایهٔ K3 را هم اعمالشده حساب کردهاید در حالی که سربهسر بالا زیر K3 است. همین جابهجایی ناحیه در سهام تا حدود نیم درصد قیمت پایه خطا میدهد — و همین اندازه فاصله معمولاً تمام سود این استراتژی است.
سود دو دنباله، حداکثر زیان و دو سربهسر
با تقارن اعمالها (K1 − 2K2 + K3 = 0) شکل بازده در سررسید ساده است: دو فلات سود در دو طرف و یک قلهٔ زیان روی K2.
- حداکثر زیان دقیقاً روی K2 نیست، بلکه ذرهای بالاتر است: در همان نقطه دو پایهٔ خرید K2 هم اعمال میشوند در حالی که ارزش ذاتیشان صفر است، پس کارمزد خریدار هم اضافه میشود.
- اگر
plBelowK3 <= 0باشد سربهسر بالا وجود ندارد: کارمزد اعمال K1 و دو پایهٔ K2 از اعتبار بیشتر شده و کل ناحیهٔ K2 تا K3 زیان است. - پرش نزولی روی K3: چون کارمزد اعمال فروشندهٔ K3 یکجا اضافه میشود، ممکن است کمی زیر K3 در سود باشید و بالای K3 در زیان. این تنها استراتژی باترفلای است که در بازار ایران این پرش را جدی نشان میدهد.
مفهوم سربهسر: نقطهٔ سربهسر در معاملات آپشن. برای مشاهدهٔ ماتریس قیمت×تاریخ همان موقعیت: جدول سود و زیان استراتژی.
سود و زیان در قیمت فرضی
یک تابع P&L بنویسید و همهٔ اعداد نمایشی را با آن اعتبارسنجی کنید؛ اگر currentPnL(lowerBE) و currentPnL(upperBE) صفر نشدند، فرمول سربهسرها غلط است:
حلقهٔ تو در تو و شرط تقارن
optionSE(n) برای n ≥ 0 قرارداد nام از اعمال ردیف جاری به بالا را میدهد (0 = خود ردیف)، مرتبشده بر اساس قیمت اعمال. پس دو حلقهٔ تو در تو خودبهخود K1 < K2 < K3 را تضمین میکنند:
شرط gap1 <= 0 همزمان اعمالهای تکراری را حذف میکند. اگر تقارن را بردارید دیگر باترفلای ندارید و فرمول سربهسر بالا معتبر نیست — آن حالت باترفلای بالشکسته است و ریاضی جداگانه دارد.
سرمایهٔ درگیر، وجه تضمین و pos.add
شورت کال باترفلای را میتوان «کال اسپرد نزولی (فروش K1 + خرید K2) + کال اسپرد صعودی (خرید K2 + فروش K3)» دید. این تفکیک، پاسخ وجه تضمین را میدهد:
- پایهٔ فروش K3 با پایهٔ خرید K2 که اعمال پایینتری دارد کاملاً پوشش داده میشود ⇒ وجه تضمین ندارد.
- پایهٔ فروش K1 اعمال پایینتر از پایهٔ خرید دارد ⇒ پوشش کامل نیست و «اختلاف دو اعمال منهای پرمیوم دریافتی» قفل میشود؛ اگر این عدد منفی شد یا از وجه تضمین استاندارد فروش بیشتر بود، وجه تضمین استاندارد ملاک است.
پارامتر پنجم pos.add عدد هم میپذیرد
در pos.add(side, namad, count, price, cashBlock) مقدار true یعنی «وجه تضمین استاندارد را خودت حساب کن»، false یعنی «پوششداده است و وجه تضمین ندارد»، و یک عدد یعنی «همین مقدار قفل میشود». اگر در ستون وجه تضمین اسپرد را لحاظ کردهاید ولی به نمودار false بدهید، سرمایهٔ ستون و نمودار با هم نمیخواند.
مشاهده وگا و سایر یونانیها در نمودار استراتژی
علاوه بر ستون و فیلتر دیدهبان، در نمودار استراتژی میتوانید یونانیها را روی منحنی سود/زیان ببینید: موقعیتهای call/put را اضافه کنید، از بخش «یونانیها» روی نمودار استفاده کنید و حساسیت کل استراتژی به قیمت پایه و زمان را لحظهای بررسی کنید. جمع دلتای موقعیتها در پایین جدول نیز نمایش داده میشود.
شورت باترفلای وگای مثبت دارد: با رشد نوسان ضمنی سود میکند و اگر قیمت روی بدنه بماند تتای منفی به آن ضرر میزند. برای مرور این دو ضریب: وگا و تتا.
سود تضمینی: وقتی اعتبار از فاصلهٔ اعمال بیشتر است
اگر اعتبار خالص دریافتی از (K2 − K1) × اندازه قرارداد بیشتر شود، maxLoss منفی میشود؛ یعنی موقعیت در هیچ قیمتی زیان نمیدهد. این ترکیبها را نباید با continue حذف کرد — همانها ارزشمندترین یافتهٔ اسکنر هستند:
در بازار کمعمق ایران بخشی از این موارد محصول سرخطهای قدیمی یا کمحجم است، نه قیمتگذاری اشتباه واقعی؛ بنابراین همیشه کنار آن فیلتر حداقل ارزش سفارش هر پایه را روشن نگه دارید (سنجش نقدشوندگی).
ثابتهای SETTING_ و FILTER_
برای اتصال خودکار به پنجرهٔ تنظیمات ویژوال (راهنمای تنظیمات ویژوال) از پیشوندهای استاندارد استفاده کنید:
- FILTER_REQUIRE_UPSIDE_PROFIT — فقط ترکیبهایی که بالای K3 هم پس از کارمزد اعمال سه پایه سود میدهند
- FILTER_GUARANTEED_ONLY — فقط ترکیبهای بدون ناحیهٔ زیان
- FILTER_PRICE_ZONES — پنج زون: زیر K1، K1 تا سربهسر پایین، بین دو سربهسر (زیان)، سربهسر بالا تا K3، بالای K3
- FILTER_MIN_K2_VOLUME — بدنه دو قرارداد است و کمعمقترین پایه محسوب میشود
استراتژی آماده
اگر نمیخواهید از صفر بنویسید، استراتژی آمادهٔ شورت کال باترفلای در دیدهبان همین منطق را اجرا میکند: اسکن همهٔ ترکیبهای متقارن، سود دو دنباله، حداکثر زیان، دو سربهسر، احتمال موفقیت و نمودار. راهنمای گامبهگام: پیادهسازی شورت کال باترفلای در دیدهبان · فهرست همهٔ اسکنرها: استراتژیهای آماده.
جمعبندی: در فرمولنویسی این استراتژی سه چیز تعیینکننده است: سمت درست سرخط برای هر پایه، تفکیک کارمزد اعمال به سه ناحیهٔ سررسید (وگرنه سود دنبالهٔ بالا و هر دو سربهسر غلط میشوند)، و وجه تضمین پایهٔ فروش K1 که با پوشش K2 به «اختلاف دو اعمال» کاهش مییابد. اعداد نمایشی را همیشه با تابع currentPnL خودتان راستیآزمایی کنید.
مطالب مرتبط: مفهوم شورت کال باترفلای · پیادهسازی در دیدهبان · تابع optionSE · فرمولنویسی کال اسپرد نزولی · لانگ کال باترفلای در دیدهبان · راهنمای فرمولنویسی