این مقاله برای کسانی است که میخواهند خودشان در دیدهبان، با فرمولنویسی، موقعیتهای معاملاتی را بررسی کنند — نه اینکه فقط از لیست استراتژیهای آماده یک گزینه را انتخاب کنند.
یعنی در دیدهبان میروید، فرمول مینویسید، و برای هر ردیف جدول یک خروجی ساده میبینید: مثلاً «هزینه این اسپرد چقدر است»، «سودش چقدر است»، یا «فقط قراردادهایی که شرط من را دارند نشان بده». بعضی فرمولها حتی دکمهای میگذارند که با یک کلیک نمودار سود و زیان همان ترکیب را باز کند.
مثالهای این مقاله همه روی یک استراتژی مشخص است — کال اسپرد صعودی — تا قدمبهقدم ببینید چطور از یک call در جدول، call دوم را پیدا کنید و هزینه و سود را حساب کنید. بعداً میتوانید همین روش را برای استراتژیهای دیگر هم به کار ببرید.
کال اسپرد صعودی چیست؟
کال اسپرد صعودی یعنی خرید call با اعمال پایینتر + فروش call با اعمال بالاتر (همان سررسید). هزینه ورود محدود است و برای انتظار رشد ملایم تا متوسط پایه مناسب است. اگر فقط میخواهید بدانید این استراتژی چیست: آموزش اسپرد صعودی. اگر میخواهید بدون نوشتن کد از نسخه آماده استفاده کنید: استراتژیهای آماده دیدهبان.
کال اسپرد صعودی دو پا دارد و هر دو طرفش سقف دارد: هزینهٔ ورود محدود است و سود هم — مناسب انتظار رشد ملایم تا متوسط.
منطق اسپرد در یک نگاه
هر سطر جدول یک call است — همان «پایه خرید» اسپرد. قرارداد دوم (پایه فروش) را با optionSE پیدا میکنید: معمولاً optionSE(1) یعنی call با اولین اعمال بالاتر از call جاری.
هر سطر جدول یک call است — پای خرید. فرمول پای فروش را با optionSE(1) از همان سررسید پیدا میکند، پس یک ستون برای هر ردیف یک اسپرد متفاوت میسازد.
پایه خرید: call جاری — خرید از option.ti.sell1Price
پایه فروش: call با اعمال بالاتر — فروش به upper.ti.buy1Price
فقط روی سطرهای call معنا دارد — برای put اسپرد نزولی منطق جداست.
فرمولهای پایه
هزینهٔ ورود پایهٔ همهچیز است: حداکثر سود، سر به سر و حداکثر ضرر از آن میآیند — ولی سرمایهٔ درگیر با وجه تضمین فروشِ call بالاتر بیشتر میشود.
همان debit (بدون وثیقه) — با وجه تضمین فروش call بالاتر سرمایه درگیر بیشتر میشود.
قیمتها را با مبنای قیمت نوار دیدهبان (آخر / پایانی / سرخط) هماهنگ کنید. در مثالها از سرخط خرید/فروش استفاده شده تا نتیجه نزدیک به معامله واقعی باشد.
ستون همان چیزی را نشان میدهد که برگرداندهاید: دو عدد کلیدی در سلول، بقیه در تولتیپ — و برای ردیف بیجواب، رشتهٔ خالی نه پیام خطا.با یک حلقه، فرمول همهٔ اعمالهای بالاتر را میگردد و بازده هر اسپرد را در یک سلول کنار هم میگذارد — یک ردیف، چند اسپرد.
let upper = optionSE(1);
if (!upper) return '';
let debit = option.ti.sell1Price - upper.ti.buy1Price;
let be = option.strike + debit;
return calcRateChange(ua.ti.lastPrice, be) + '%';
بازده ماهانه — اسکن همه اعمال بالاتر
روی هر call، همه callهای با اعمال بالاتر را بررسی میکند و بازده ماهانه هر اسپرد را کنار هم میگذارد (سادهشده نسبت به ستونهای قدیمی).
let result = '';
let index = 0;
while (optionSE(++index) !== undefined) {
let upper = optionSE(index);
if (!upper || upper.ti.buy1Price <= 0 || option.ti.sell1Price <= 0) continue;
let debit = option.ti.sell1Price - upper.ti.buy1Price;
if (debit <= 0) continue;
let profit = (upper.strike - option.strike) - debit;
let monthly = monthlyProfit((profit / debit) * 100, option.daysUntilMaturity);
result += showDetail(upper.namad, namadNo(upper.namad)) + ': ' +
roundNumber(monthly, 1) + '% / ';
}
return result;
ستون با وجه تضمین و بازده ماهانه
let upper = optionSE(1);
if (!upper) return '';
let debit = option.ti.sell1Price - upper.ti.buy1Price;
if (debit <= 0) return '';
let profit = (upper.strike - option.strike) - debit;
let capital = (upper.requiredMargin || 0) + option.ti.sell1Price * option.size;
let monthly = monthlyProfit((profit / capital) * 100, option.daysUntilMaturity);
return style(roundNumber(monthly, 1) + '%', monthly >= 5 ? '#16a34a' : '#6b7280', '', 'بازده ماهانه') +
' | ' + style(commaSeparator(debit), '#ea580c', '', 'debit');
مثالهای فیلتر
debit مثبت و نقدشوندگی
let upper = optionSE(1);
if (!upper) return false;
let debit = option.ti.sell1Price - upper.ti.buy1Price;
return debit > 0 && option.ti.volume > 0 && upper.ti.volume > 0;
حداکثر سود مثبت
let upper = optionSE(1);
if (!upper) return false;
let debit = option.ti.sell1Price - upper.ti.buy1Price;
let maxProfit = (upper.strike - option.strike) - debit;
return maxProfit > 0 && option.type === 'call';
حداقل بازده ماهانه 10٪ (هر اعمال بالاتر)
if (option.type !== 'call') return false;
let index = 0;
while (optionSE(++index) !== undefined) {
let upper = optionSE(index);
if (!upper || upper.ti.buy1Price <= 0 || option.ti.sell1Price <= 0) continue;
let debit = option.ti.sell1Price - upper.ti.buy1Price;
if (debit <= 0) continue;
let profit = (upper.strike - option.strike) - debit;
let monthly = monthlyProfit((profit / debit) * 100, option.daysUntilMaturity);
if (monthly > 10) return true;
}
return false;
فاصله سر به سر کمتر از 15٪
let upper = optionSE(1);
if (!upper) return false;
let debit = option.ti.sell1Price - upper.ti.buy1Price;
let be = option.strike + debit;
return Math.abs(calcRateChange(ua.ti.lastPrice, be)) < 15;
علاوه بر ستون و فیلتر دیدهبان، در نمودار استراتژی میتوانید یونانیها را روی منحنی سود/زیان ببینید: موقعیتهای call/put را اضافه کنید، از بخش «یونانیها» روی نمودار استفاده کنید و حساسیت کل استراتژی به قیمت پایه و زمان را لحظهای بررسی کنید. جمع دلتای موقعیتها در پایین جدول نیز نمایش داده میشود.
کال اسپرد صعودی دلتای خالص مثبت ولی کمتر از خرید تنها call دارد — بعد از pos.build همان استراتژی را در نمودار استراتژی باز کنید و جمع دلتا را ببینید.
استراتژی آماده در دیدهبان
اگر به فیلترهای پیشرفته (محدوده قیمتی، احتمال موفقیت، نسبت سود به ضرر، حداقل ارزش سفارش و …) نیاز دارید، لازم نیست از صفر بنویسید — در دیدهبان از استراتژیهای آماده گزینه کال اسپرد صعودی را به ستون یا فیلتر اضافه کنید و پارامترها را تنظیم کنید. این مقاله برای درک منطق و شخصیسازی فرمول است.
استراتژی آماده برای شروع سریع است و فرمول دستی برای اسکن چند ترکیب یا معیاری که در آمادهها نیست — و چون یک موتور دارند، میشود از کد آماده شروع کرد.
فرمولها در کتابخانه شخصی ذخیره میشوند و میتوانید هر کدام را بهعنوان فیلتر یا ستون سفارشی به دیدهبان اضافه کنید.
مرجع کامل توابعی که اینجا به کار رفتند در راهنمای فرمولنویسی است: optionSE و pos.build.
برای کال اسپرد صعودی کافی است call جاری را «پایه خرید» بدانید و با optionSE call با اعمال بالاتر را پیدا کنید. debit، سود، سربهسر و بازده ماهانه را در ستون ببینید؛ با فیلتر موقعیتهای مناسب را جدا کنید؛ با pos.build نمودار سود و زیان بگیرید — یا از استراتژی آماده در دیدهبان شروع کنید.
اگر سوال یا ابهامی در رابطه با این مطلب دارید، همینجا بپرسید؛ کارشناسان ما پاسخ میدهند.
تجربه یا نکتهای دارید؟ نوشتنش به بقیهٔ کاربران هم کمک میکند.
پرسشها و نظرات کاربران
4 پیام
رضا
24 خرداد 1405 - 16:17
این فرمول را نوشتم و ستون درست کار میکند. ولی بازدهی که نشان میدهد با چیزی که خودم دستی حساب میکنم فرق دارد. مشکل از کجاست؟
پشتیبانیپاسخ
28 خرداد 1405 - 17:11
تقریباً همیشه از کارمزد است، و دو قلم جدا وجود دارد که یکیشان معمولاً فراموش میشود.
کارمزد معامله موقع باز کردن هر دو پا پرداخت میشود. کال اسپرد دو پا دارد، پس دو برابر یک موقعیت تکپایه.
کارمزد اعمال فقط اگر تا سررسید نگه دارید و قرارداد اعمال شود میآید. طبق قاعده، در صورت اعمال از هر خریدار و هر فروشنده معادل 0.0005 ارزش قرارداد بر اساس قیمت اعمال کسر میشود — و اگر پایه سهم باشد، برای پایی که سهم تحویل میدهد مالیات نقل و انتقال هم اضافه میشود: کارمزد معاملات اختیار معامله
نکتهٔ کلیدی این است که کارمزد اعمال درصدی از قیمت اعمال است، نه از سود شما. روی یک اسپرد باریک که سودش چند صد ریال است، همین رقم میتواند بخش بزرگی از سود را ببلعد در حالی که در نگاه اول ناچیز به نظر میرسد.
پس هنگام مقایسهٔ عدد ستون با محاسبهٔ دستیتان، اول ببینید کلیدهای کارمزد در تنظیمات روشناند یا نه — عدد پیش از کارمزد و پس از کارمزد دو چیز متفاوتند.
سعیده
26 اردیبهشت 1405 - 09:04
در فرمولها با optionSE قرارداد دوم را میگیرید. اگر برای یک ردیف قرارداد دومی وجود نداشته باشد چه اتفاقی میافتد؟ ستون خطا میدهد؟
پشتیبانیپاسخ
27 اردیبهشت 1405 - 08:43
خطا نمیدهد و همینجاست که باید مراقب باشید.
وقتی قرارداد بعدی در آن سررسید وجود نداشته باشد، چیزی که برمیگردد تعریفنشده است، نه یک خطای قابل دیدن. و مسیر آن مقدار تا خروجی معمولاً به یک عدد ختم میشود نه به یک سلول خالی: محاسبات بعدی رویش انجام میشود، نتیجه NaN میشود، و توابع تبدیل عدد در انتها به مقدار پیشفرضشان میافتند. یعنی ممکن است در ستون عددی ببینید که هیچ ربطی به یک اسپرد واقعی ندارد.
این در انتهای نردبان همیشه پیش میآید: بالاترین قیمت اعمال هر سررسید، قرارداد بعدی ندارد.
راه درست این است که پیش از هر محاسبهای وجود پای دوم را شرط کنید و اگر نبود، ردیف را از فیلتر بیندازید بیرون یا خروجی ستون را خالی بگذارید — نه اینکه بگذارید محاسبه ادامه پیدا کند. اثباتش هم ساده است: ستونتان را روی یک نماد اجرا کنید و بالاترین اعمال هر سررسید را جدا نگاه کنید؛ اگر آنجا عدد دیدید، گارد ندارید.
مرجع تابعها: راهنمای دیدهبان آپشنباز