//با اعمال هادر خروجی 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 )
continue;
let position = new Object();
//سرمایه درگیر
position.debit = ( Option.TI.Sell_1_Price - OptionSE(index).TI.Buy_1_Price) * Option.Size;
//حداکثر زیان
let loss = position.debit;
position.mLoss = MP(((loss /position.debit)*100), Option.DaysUntilMaturity);
//حداکثرسود
let profit = (( Option.Strike - OptionSE(index).Strike ) - ( Option.TI.Sell_1_Price - OptionSE(index).TI.Buy_1_Price))* Option.Size;
position.mProfit = MP(((profit /position.debit)*100), Option.DaysUntilMaturity);
// سربه سری
position.BE = Option.Strike - ( Option.TI.Sell_1_Price - OptionSE(index).TI.Buy_1_Price);
//درصد اختلاف ها
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 = '{0} '.format(position.mProfit) + result;
});
result;