این مقاله برای کسانی است که میخواهند خودشان در دیدهبان، با فرمولنویسی، موقعیتهای معاملاتی را بررسی کنند — نه اینکه فقط از لیست استراتژیهای آماده یک گزینه را انتخاب کنند.
یعنی در دیدهبان میروید، فرمول مینویسید، و برای هر ردیف جدول یک خروجی ساده میبینید: مثلاً «هزینه این اسپرد چقدر است»، «سودش چقدر است»، یا «فقط قراردادهایی که شرط من را دارند نشان بده». بعضی فرمولها حتی دکمهای میگذارند که با یک کلیک نمودار سود و زیان همان ترکیب را باز کند.
مثالهای این مقاله همه روی یک استراتژی مشخص است — کال اسپرد صعودی — تا قدمبهقدم ببینید چطور از یک 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 همان استراتژی را در نمودار استراتژی باز کنید و جمع دلتا را ببینید.
استراتژی آماده در دیدهبان
اگر به فیلترهای پیشرفته (محدوده قیمتی، احتمال موفقیت، نسبت سود به ضرر، حداقل ارزش سفارش و …) نیاز دارید، لازم نیست از صفر بنویسید — در دیدهبان از استراتژیهای آماده گزینه کال اسپرد صعودی را به ستون یا فیلتر اضافه کنید و پارامترها را تنظیم کنید. این مقاله برای درک منطق و شخصیسازی فرمول است.
استراتژی آماده برای شروع سریع است و فرمول دستی برای اسکن چند ترکیب یا معیاری که در آمادهها نیست — و چون یک موتور دارند، میشود از کد آماده شروع کرد.
فرمولها در کتابخانه شخصی ذخیره میشوند و میتوانید هر کدام را بهعنوان فیلتر یا ستون سفارشی به دیدهبان اضافه کنید.
برای کال اسپرد صعودی کافی است call جاری را «پایه خرید» بدانید و با optionSE call با اعمال بالاتر را پیدا کنید. debit، سود، سربهسر و بازده ماهانه را در ستون ببینید؛ با فیلتر موقعیتهای مناسب را جدا کنید؛ با pos.build نمودار سود و زیان بگیرید — یا از استراتژی آماده در دیدهبان شروع کنید.