//نمایش سود به ضرر
let rewRiskShow = 0;
//نمایش نقاط فاصله نماد پایه با اعمال ها
let pointShow = 1;
//شروع کد
let result = '';
let index = 0;
//جهت فیلتر کردن خروجی
let condition1 = _var1 != '' ? _var1 : 10;
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 = ( OptionSE(index).TI.Buy_1_Price - Option.TI.Sell_1_Price) * Option.Size;;
//حداکثرسود
let profit = position.debit ;
position.mCapital = MP(((profit /position.block)*100) , Option.DaysUntilMaturity);
//حداکثر زیان
let loss = (( Option.Strike - OptionSE(index).Strike ) - ( Option.TI.Sell_1_Price - OptionSE(index).TI.Buy_1_Price))* Option.Size;
position.mLoss = MP(((loss /position.block)*100) , Option.DaysUntilMaturity);
// سربه سری
position.BE = OptionSE(index).Strike - ( OptionSE(index).TI.Buy_1_Price - Option.TI.Sell_1_Price) ;
//درصد اختلاف ها
position.disBE= CalcRateChange(UA.TI.LastPrice ,position.BE );
position.strike = OptionSE(index).Strike;
position.disStrike = CalcRateChange(UA.TI.LastPrice ,position.strike );
position.strike1= CalcRateChange( UA.TI.LastPrice, Option.Strike );
position.strike2= CalcRateChange(UA.TI.LastPrice, position.strike );
position.namad = OptionSE(index).Namad;
position.namadNo = NamadNo(OptionSE(index).Namad);
position.maxProfit = profit/size;
position.maxLoss = loss/size;
position.rewRisk = Math.abs(profit/loss).toFixed(2);
position.percentLoss = ((position.debit/position.block)*100).toFixed(2);
let current = ((UA.TI.LastPrice - position.BE ) / position.block) * Option.Size;
position.mCurrent = MP( current * 100 , Option.DaysUntilMaturity);
if ( _var2 == 1 ){
position.point1=0;
position.point2 = Option.Strike;
}
else if ( _var2 ==2 )
{ position.point1 = Option.Strike;
position.point2 = position.BE;
}
else if ( _var2 ==3 )
{ position.point1 =position.BE;
position.point2 = OptionSE(index).Strike;
}
else if ( _var2 ==4 ){
position.point1=OptionSE(index).Strike;
position.point2 = UA.TI.LastPrice * 100;
position.mCurrent = position.mCapital;
}
else condition2=""
if (position.mCapital >=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, "mCapital");
positions = positions.reverse();
positions.forEach(function(position, posIndex ){
let bgP2, bgP3, bgP4;
//در صورتی که قیمت سهم کمتر اعمال اول باشد
if(UA.TI.LastPrice<Option.Strike)
{bgP2 = '#f87878';
position.mCurrent= -100;
}
//در صورتی که قیمت سهم بین سربه سری و اعمال اول
else if(UA.TI.LastPrice<=position.BE)
bgP2 = "#FFC0CB";
//در صورتی قیمت سهم بیشتر از سربه سری و کمتر اعمال کال فروخته شده
else if (UA.TI.LastPrice > position.BE && UA.TI.LastPrice< position.strike)
bgP3 ="#B0E0E6";
//خروجی در صورتی قیمت سهم بیشتر اعمال کال فروخته شده باشه
else if (UA.TI.LastPrice>=position.strike)
bgP4 ="#ADFF2F";
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.mCapital + "%)", 'green', '', 'بیشترین سود', true) + " ~" +
Style(position.mCurrent +'%', position.mCurrent >=0 ? 'green ' : 'red', '', 'موقعیت کنونی')
+ " ~ " +
Style(position.maxLoss+ " (" + position.mLoss + "%)", 'red', '', 'بیشترین ضرر') +"]";
if (rewRiskShow)
result += Style( + position.rewRisk , 'blue', '', 'سود/ضرر') ;
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.mCapital) + result;
});
result;