این فرمول حداکثر سود و زیان قرارداد ( به همراه جزییات دیگر ) با قراردادهای زنجیره و با قیمت اعمال کمتر از خودش را نشان میدهد
محاسبه سود برای حالتی است که کارگزاری قرارداد خریداری شده به عنوان وثیقه قرار میدهد و وجه تضمین بلوکه نمیشود
در این فرمول فقط قراردادها با سود ماهیانه بیشتر از 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.buy1Volume == 0 || option.ti.sell1Volume == 0 )
continue;
let position = new Object();
//سرمایه درگیر
position.debit = ( option.ti.sell1Price - optionSE(index).ti.buy1Price) * option.size;
//حداکثر زیان
let loss = position.debit;
position.mLoss = MP(((loss /position.debit)*100), option.daysUntilMaturity);
//حداکثرسود
let profit = (( option.strike - optionSE(index).Strike ) - ( option.ti.sell1Price - optionSE(index).ti.buy1Price))* option.size;
position.mProfit = MP(((profit /position.debit)*100), option.daysUntilMaturity);
// سربه سری
position.BE = option.strike - ( option.ti.sell1Price - optionSE(index).ti.buy1Price);
//درصد اختلاف ها
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.debit) * 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 == 'put'
//شرط نقطه قیمت نماد پایه
&& (condition2 == "" || (ua.ti.lastPrice>= position.point1 && ua.ti.lastPrice< position.point2)))
positions.push(position);
//end of position object
}
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', false);
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 += " P%[" +
style(position.strike1, '', bgP2, 'اعمال اول-قیمت%') + '' +
style(position.disBE, '', bgP3, 'سر به سری-قیمت%') + '' +
style(position.strike2, '', bgP4, 'اعمال دوم-قیمت%') + "]";
result += pos.build('اسپرد ' + option.namad);
//بیشترین بازدهی در اول خروجی جهت سورت
if (posIndex == 0)
result = ' '.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.buy1Volume == 0 || option.ti.sell1Volume == 0 )
continue;
//سرمایه درگیر
let block = ( option.ti.sell1Price - optionSE(index).ti.buy1Price) * option.size;
//حداکثرسود
let profit = (( option.strike - optionSE(index).Strike ) - ( option.ti.sell1Price - optionSE(index).ti.buy1Price))* option.size;
let mProfit = MP(((profit /block)*100) , option.daysUntilMaturity);
// سربه سری
let BE = option.strike - ( option.ti.sell1Price - optionSE(index).ti.buy1Price);
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 == 'put'){
result = true;
break;
}
}
result;