این فرمول حداکثر سود و زیان قرارداد ( به همراه جزییات دیگر ) با قراردادهای زنجیره و با قیمت اعمال کمتر از خودش را نشان می دهد
در این فرمول فقط قراردادها با سود ماهیانه بیشتر از 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 title='نقاط - درصد فاصله نماد پایه با اعمال اول سربه سری و اعمال دوم'>P%[" +
Style(position.strike1, '', bgP2, 'اعمال اول-قیمت%') + '<i class="mirror"></i>' +
Style(position.disBE, '', bgP3, 'سر به سری-قیمت%') + '<i ></i>' +
Style(position.strike2, '', bgP4, 'اعمال دوم-قیمت%') + "<span >]</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 |
این تابع برای تعیین استایل و فرمتدهی به رشتههای خروجی استفاده میشود و به زیبایی دادهها در خروجی کمک میکند. |
برای مشاهده توضیحات کاملتر به راهنمای فرمول نویسی مراجعه کنید.
در کدهای اماده فرمول های مربوط به ایجاد ستون و فیلتر استراتژی به صورت ویژوال در دسترس می باشد اموزش های موجود در صورت تمایل به تغییر و شخصی سازی فرمول ها کمک کننده می باشند