OddfPrice(Settlement: DateTime;
Maturity: DateTime;
Issue: DateTime;
FirstCouponDate: DateTime;
Rate: Double;
YieldP: Double;
Redemption: Double;
Frequency; Integer;
Basis; Integer): Double;
OddfPrice(Settlement: System.DateTime;
Maturity: System.DateTime;
Issue: System.DateTime;
FirstCouponDate: System.DateTime;
Rate: double;
YieldP: double;
Redemption: double;
Frequency; integer;
Basis; integer): double;
| Параметры | Описание | Ограничения |
| Settlement | Дата расчета за ценные бумаги. | Должен быть больше Issue. |
| Maturity | Срок погашения ценных бумаг. | Должен быть больше FirstCouponDate. |
| Issue | Дата выпуска ценных бумаг. | Должен быть меньше Settlement. |
| FirstCouponDate | Дата первого купона для ценных бумаг. | Должен быть больше Settlement. |
| Rate | Процентная ставка для ценных бумаг. | Должен быть неотрицательным. |
| YieldP | Годовой доход по ценным бумагам. | Должен быть неотрицательным. |
| Redemption | Выкупная стоимость ценных бумаг за 100 руб. номинальной стоимости. | Должен быть положительным. |
| Frequency | Количество выплат по купонам за год:
1 - для ежегодных выплат; 2 - для полугодовых выплат; 4 - для ежеквартальных выплат. |
Должен принимать значения 1, 2 или 4. |
| Basis | Используемый способ вычисления дня.
Доступны следующие значения: 0 - Американский/360 дней (метод NSAD); 1 - Фактический/фактический; 2 - Фактический/360 дней; 3 - Фактический/365 дней; 4 - Европейский 30/360 дней. |
Должен принадлежать промежутку [0,4]. |
Метод OddfPrice возвращает цену за 100 рублей номинальной стоимости ценных бумаг для нерегулярного (короткого или длинного) первого периода.
OddfPrice вычисляется следующим образом.
Нерегулярный короткий первый купон:

Где:
A - количество дней от начала периода купона до даты расчета (накопленные дни);
DSC - количество дней от даты расчета до даты следующего купона;
DFC - количество дней от начала нерегулярного купона до даты первого купона;
E - количество дней в периоде купона;
N - количество оплачиваемых купонов между датой расчета и датой погашения. Если это число является дробным, то оно округляется с избытком до ближайшего целого.
Нерегулярный длинный первый купон:

Где:
Aj. Количество дней от начала j-го или последнего квазикупонного периода в нерегулярном периоде;
DCj. Количество дней от указанной даты (или даты выпуска) до первого квазикупона (j = 1) или количество дней в квазикупоне (j = 2,…, j = NC);
DSC. Количество дней от даты расчета до даты следующего купона;
E. Количество дней в периоде купона;
N. Количество оплачиваемых купонов от даты первого фактического купона до даты погашения. (Если это число является дробным, то оно округляется с избытком до ближайшего целого;
NC. Количество периодов квазикупонов, укладывающихся в нерегулярный период. Если это число является дробным, то оно округляется с избытком до ближайшего целого;
NLj. Нормальная продолжительность в днях полного j-го или последнего квазикупонного периода в нерегулярном периоде;
Nq. Количество полных периодов квазикупонов от даты расчета до первого купона.
Для выполнения примера добавьте ссылку на системную сборку MathFin.
Sub UserProc;
Var
r: Double;
Begin
r := Finance.OddfPrice(DateTime.ComposeDay(2008,11,11), DateTime.ComposeDay(2021,03,01),
DateTime.ComposeDay(2008,10,15), DateTime.ComposeDay(2009,03,01), 0.1275, 0.1025, 200, 4, 3);
Debug.WriteLine(r);
End Sub UserProc;
В результате выполнения примера в окно консоли будет выведена цена, равная «146.115».
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.MathFin;
…
Public Shared Sub Main(Params: StartParams);
Var
r: double;
Finance: FinanceClass = New FinanceClass();
DateTime1, DateTime2, DateTime3, DateTime4: System.DateTime;
Begin
DateTime1 := New DateTime(2008,11,11);
DateTime2 := New DateTime(2021,03,01);
DateTime3 := New DateTime(2008,10,15);
DateTime4 := New DateTime(2009,03,01);
r := Finance.OddfPrice(DateTime1, DateTime2,
DateTime3, DateTime4, 0.1275, 0.1025, 200, 4, 3);
System.Diagnostics.Debug.WriteLine(r);
End Sub;
См. также: