وضعیت بازار
ارزش معاملات سهام
ارزش معاملات اختیار
حجم معاملات اختیار
اطلاعات قیمت
✨ دوره آفلاین آموزش اختیارمعامله و فرمول نویسی
بیش از ۱۵ ساعت آموزش

مفاهیم پایه و کاربردی آپشن - استراتژی‌های سودآور برای مبتدیان و حرفه‌ای‌ها - آموزش گام به گام اختیار معامله - فرمول‌نویسی - فیلترنویسی - دسترسی نامحدود - پشتیبانی

بیشترین ارزش معاملات اختیار معامله
روزانه
هفتگی
ماهیانه
روزانه
هفتگی
ماهیانه
نزدیکترین سررسید دوره های معاملاتی
نماد روز تا سررسید
برترین دارایی های پایه
روزانه
هفتگی
ماهیانه
دریافت و فعال سازی آنلاین کد بورسی و اختیار معامله
ما را در شبکه های اجتماعی دنبال کنید

کد ستون و فیلتر استراتژی اسپرد نزولی Bear call spread

آموزش تخصصی فرمول‌نویسی و فیلتر موقعیت‌های بهینه برای استراتژی Bear Call Spread در آپشن باز. با تکنیک‌های هوشمند، بهترین فرصت‌ها را شناسایی و سود خود را حداکثر کنید
جهت نوشتن فرمول و فیلتر   به صفحه دیده بان رفته سپس بر روی ساخت ستون یا ساخت فیلتر کلیک کنید. نام ستون یا فیلتر را مشخص، کد را در قسمت ادیتور نوشته و در نهایت جهت مشاهده نتیجه بر روی ذخیره کلیک کنید .

این فرمول  حداکثر سود و زیان  قرارداد ( به همراه جزییات دیگر ) با قراردادهای زنجیره و با قیمت اعمال  کمتر  از خودش را نشان می دهد 

در این فرمول فقط قراردادها با سود ماهیانه بیشتر از 5 یا (var1) درصد نمایش داده شده اند که می توانید آن را تغییر دهید .

قراردادهای  موجود در ستون (نماد) قراردادهایی هستند که خریداری می شوند و قراردادهای موجود در ستون ایجاد شده (اسپرد نزولی) قراردادهایی هستند که باید فروخته شوند

امکان مرتب سازی بر اساس درصد سود ماهانه و  نمایش جزییات به صورت انتخابی  وجود دارد

پارامترهای مورد بررسی

  • حداکثر سود
  • حداکثر زیان
  • درصد فاصله قیمت سهم از اعمال قرارداد کال فروخته شده(اعمال اول)
  • درصد فاصله قیمت سهم از اعمال قرارداد کال خریداری شده(اعمال دوم)
  • درصد فاصله قیمت سهم از سر به سری
  • موقعیت کنونی (نمایانگر  درصد سود یا زیان در صورتی که با قیمت های روی تابلو به اعمال برسد)

کد ستون اسپرد نزولی

کد ستون با جزییات کامل
// جهت نمایش اطلاعات نقاط فاصله نماد پایه با اعمال ها در خروجی 1 و عدم نمایش عدد 0
let pointShow = 1;

let result = '';
let index = 0;

// جهت فیلتر کردن خروجی
let condition1 = _var1 != '' ? _var1 : 5;
let condition2 = _var2 != "" ? _var2 : "";
let size = Option.Size;

let positions = new Array();

while (OptionSE(--index) != undefined) {
    // اگر حجم خریدار قرارداد صفر بود رد بشه
    if (OptionSE(index).TI.Buy_1_Volume == 0 || Option.TI.Sell_1_Volume == 0 || 
        OptionSE(index).TI.Buy_1_Price < 10)
        continue;

    let position = new Object();

    // سرمایه درگیر
    position.block = OptionSE(index).Required_Margin + (Option.TI.Sell_1_Price * Option.Size);
    position.debit = (Option.TI.Sell_1_Price - OptionSE(index).TI.Buy_1_Price) * Option.Size;

    // حداکثر زیان
    let loss = position.debit - ((OptionSE(index).Strike - Option.Strike) * Option.Size);
    position.mLoss = MP(((loss / position.block) * 100), Option.DaysUntilMaturity);

    // حداکثر سود
    let profit = (OptionSE(index).TI.Buy_1_Price - Option.TI.Sell_1_Price) * Option.Size;
    position.mProfit = MP(((profit / position.block) * 100), Option.DaysUntilMaturity);

    // سربه سری
    position.BE = (OptionSE(index).TI.Buy_1_Price - Option.TI.Sell_1_Price) + OptionSE(index).Strike;

    // درصد اختلاف ها
    position.disBE = CalcRateChange(UA.TI.LastPrice, position.BE);
    position.strike = OptionSE(index).Strike;
    position.disStrike = CalcRateChange(UA.TI.LastPrice, position.strike);
    position.strike2 = CalcRateChange(UA.TI.LastPrice, Option.Strike);
    position.strike1 = CalcRateChange(UA.TI.LastPrice, position.strike);

    position.namad = OptionSE(index).Namad;
    position.namadNo = NamadNo(OptionSE(index).Namad);
    position.maxLoss = loss / size;
    position.maxProfit = profit / size;

    let current = ((position.BE - UA.TI.LastPrice) / position.block) * Option.Size;
    position.current = MP(current * 100, Option.DaysUntilMaturity);

    if (_var2 == 1) {
        position.point1 = Option.Strike;
        position.point2 = UA.TI.LastPrice * 100;
    }
    else if (_var2 == 2) {
        position.point1 = position.BE;
        position.point2 = Option.Strike;
    }
    else if (_var2 == 3) {
        position.point1 = OptionSE(index).Strike;
        position.point2 = position.BE;
    }
    else if (_var2 == 4) {
        position.point1 = 0;
        position.point2 = OptionSE(index).Strike;
        position.current = position.mProfit;
    }
    else condition2 = ''

    if (position.mProfit >= condition1 && Option.Type == 'call' &&
        (condition2 == "" || (UA.TI.LastPrice >= position.point1 && UA.TI.LastPrice < position.point2)))
        positions.push(position);
}

positions = SortObject(positions, "maxProfit");
positions = positions.reverse();

positions.forEach(function(position, posIndex) {
    let bgP2, bgP3, bgP4;

    // قیمت سهم کمتر اعمال کال فروخته شده باشه
    if (UA.TI.LastPrice <= position.strike)
        bgP2 = "#ADFF2F";
    // قیمت سهم کمتر از سر به سری باشد
    else if (UA.TI.LastPrice <= position.BE)
        bgP3 = '#B0E0E6';
    // قیمت سهم بین سربه سری و اعمال کال خریداری شده
    else if (UA.TI.LastPrice >= position.BE && UA.TI.LastPrice < Option.Strike)
        bgP3 = "#FFC0CB";
    // قیمت سهم بیشتر از اعمال کال خریداری شده
    else if (UA.TI.LastPrice >= Option.Strike) {
        bgP4 = "red";
        position.current = -100;
    }

    pos.Add('buy', Option.Namad, 1, 'sell');
    pos.Add('sell', position.namad, 1, 'buy');

    result += ShowDetail(position.namad, position.namadNo);
    result += "[" + Style(position.maxProfit + " (" + position.mProfit + "%)", 'black', '', 'بیشترین سود', true) + "~" +
             Style(position.current + '%', position.current >= 0 ? 'green' : 'brown', '', 'موقعیت کنونی') + "~" +
             Style(position.maxLoss + " (" + position.mLoss + "%)", 'red', '', 'بیشترین ضرر') + "]";

    if (pointShow)
        result += " <span class='text-secondary' title='نقاط - درصد فاصله نماد پایه با اعمال اول سربه سری و اعمال دوم'>P%[" +
                 Style(position.strike1, '', bgP2, 'اعمال اول-قیمت%') + '<i class="bi bi-slash-lg text-danger mirror"></i>' +
                 Style(position.disBE, '', bgP3, 'سر به سری-قیمت%') + '<i class="bi bi-dash-lg text-success"></i>' +
                 Style(position.strike2, '', bgP4, 'اعمال دوم-قیمت%') + "<span class='text-secondary'>]</span>";

    result += pos.Build('اسپرد ' + Option.Namad);

    if (posIndex == 0)
        result = '<span style="display: none !important">{0}</span> '.format(position.mProfit) + result;
});

result;

این فیلتر قرادادهایی که سود ماهانه بالای 5 درصد دارند را نمایش می دهد.(می توانید این عدد  از طریق فیلد متغییر و تغییر عدد var1  در دیده بان تغییر دهید)

محاسبه سود برای حالتی است که وجه تضمین بلوکه می شود


 امکان فیلتر قراردادها بر اساس محدوده قیمتی سهم نسبت به اعمال ها و سر به سری  با استفاده از فیلد var2 در دیده بان وجود دارد

با قرار دادن  عدد 1 در var2  قرارداد هایی را مشاهده می کنید که قیمت سهم  کمتر از اعمال دوم ( قرارداد کال خریده شده) هستند

با قرار دادن  عدد 2 در var2  قرارداد هایی را مشاهده می کنید که قیمت سهم  بین اعمال دوم و سربه سری  هستند

با قرار دادن  عدد 3 در var2  قرارداد هایی را مشاهده می کنید که قیمت سهم  ببین سر به سری و اعمال اول (قرارداد کال فروخته شده) هستند

با قرار دادن  عدد 4 در var2  قرارداد هایی را مشاهده می کنید که قیمت سهم  بیشتر از اعمال اول هستند


کد فیلتر
let result = false;
let index = 0;
let condition1 = _var1 != '' ? _var1 : 5;
let condition2 = _var2 != "" ? _var2 : "";

while (OptionSE(--index) != undefined) {
if (OptionSE(index).TI.Buy_1_Volume == 0 || Option.TI.Sell_1_Volume == 0 || 
OptionSE(index).TI.Buy_1_Price < 10)
continue;

//سرمایه درگیر
let block = OptionSE(index).Required_Margin + (Option.TI.Sell_1_Price * Option.Size);
//حداکثرسود
let profit = (OptionSE(index).TI.Buy_1_Price - Option.TI.Sell_1_Price) * Option.Size;
let mProfit = MP(((profit / block) * 100), Option.DaysUntilMaturity);
// سربه سری
let BE = (OptionSE(index).TI.Buy_1_Price - Option.TI.Sell_1_Price) + OptionSE(index).Strike;

let point1, point2;
if (_var2 == 1) {
point1 = Option.Strike;
point2 = UA.TI.LastPrice * 100;
}
else if (_var2 == 2) {
point1 = BE;
point2 = Option.Strike;
}
else if (_var2 == 3) {
point1 = OptionSE(index).Strike;
point2 = BE;
}
else if (_var2 == 4) {
point1 = 0;
point2 = OptionSE(index).Strike;
}
else condition2 = '';

if (mProfit > condition1 &&
(condition2 == "" || (UA.TI.LastPrice >= point1 && UA.TI.LastPrice < point2)) &&
Option.Type == 'call') {
result = true;
break;
}
}

result;

توابع استفاده شده در کد 

    نام تابع توضیحات
    OptionSE این تابع به شما اجازه می‌دهد به داده‌های مختلف قراردادها دسترسی پیدا کنید.
    ShowDetail این تابع اطلاعات جزئیات مربوط به هر نماد را نمایش می‌دهد، شامل نام و شماره نماد، و سایر اطلاعات مرتبط.
    pos.Build،pos.Add این تابع برای رسم نمودارهای مرتبط با موقعیت‌های معاملاتی استفاده می‌شود و به نمایش اطلاعات در یک نمودار کمک می‌کند.
    MP تابع MP برای محاسبه بازده ماهاننه استفاده می‌شود.
    CalcRateChange این تابع برای محاسبه درصد تغییرات قیمت بین دو مقدار استفاده می‌شود و به تجزیه و تحلیل تحلیلی کمک می‌کند.
    NamadNo این تابع شماره مربوط به هر نماد خاص را برمی‌گرداند و به شناسایی کرات نمادها کمک می‌کند.
    Style این تابع برای تعیین استایل و فرمت‌دهی به رشته‌های خروجی استفاده می‌شود و به زیبایی داده‌ها در خروجی کمک می‌کند.

    برای مشاهده توضیحات کامل‌تر به راهنمای فرمول نویسی مراجعه کنید.

در کدهای اماده  فرمول های  مربوط به ایجاد ستون و  فیلتر استراتژی  به صورت ویژوال در دسترس می باشد اموزش های موجود  در صورت تمایل به تغییر  و شخصی سازی فرمول ها کمک کننده می باشند

لطفا سوال یا نظر خود را در این قسمت مطرح فرمایید
وارد کردن شماره همراه و ایمیل اختیاری می باشد و فقط جهت اطلاع رسانی از دریافت پاسخ استفاده خواهد شد .

×