При расчете доходности облигации я пытаюсь воспроизвести результаты, рассчитанные с использованием функции YIELD в Excel, с использованием пакета Strata, разработанного OpenGamma. Однако, сравнивая цифры, рассчитанные с использованием Excel и Strata, я замечаю, что есть небольшое расхождение, которое увеличивается, когда продолжительность облигации больше.
Это пример моего расчета в Excel:
Расчет Excel
Расчетный результат составляет 6,5%
Когда я делаю тот же расчет в стратах, как таковой:
DiscountingFixedCouponBondPaymentPeriodPricer paymentPeriodPricer = new DiscountingFixedCouponBondPaymentPeriodPricer();
DiscountingPaymentPricer discountingPaymentPricer = new DiscountingPaymentPricer();
DiscountingFixedCouponBondProductPricer pricer = new DiscountingFixedCouponBondProductPricer(paymentPeriodPricer,discountingPaymentPricer);
LocalDate settlementDate = LocalDate.of(2008, 2, 15);
LocalDate maturityDate = LocalDate.of(2016,11,15);
double couponRate = 0.0575;
double dirtyPrice=0.9504287;
com.opengamma.strata.basics.currency.Currency bondcurrency = com.opengamma.strata.basics.currency.Currency.of("USD");
BusinessDayAdjustment businessDayAdj =
BusinessDayAdjustment.of(BusinessDayConventions.FOLLOWING, HolidayCalendarIds.USNY );
PeriodicSchedule definition = PeriodicSchedule.builder()
.startDate(settlementDate)
.endDate(maturityDate)
.businessDayAdjustment(businessDayAdj)
.frequency(Frequency.P6M)
.stubConvention(StubConvention.SHORT_INITIAL)
.rollConvention(RollConventions.EOM)
.build();
FixedCouponBond bond = FixedCouponBond.builder()
.currency(bondcurrency)
.notional(1)
.fixedRate(couponRate)
.accrualSchedule(definition)
.securityId(SecurityId.of("WHATISTHIS","FOR"))
.dayCount(DayCounts.THIRTY_360_ISDA)
.yieldConvention(FixedCouponBondYieldConvention.JP_SIMPLE)
.legalEntityId(StandardId.of("WHATISTHIS","FOR"))
.settlementDateOffset(DaysAdjustment.ofBusinessDays(2,HolidayCalendarIds.SAT_SUN))
.build();
double yieldOfBond = pricer.yieldFromDirtyPrice(bond.resolve(ReferenceData.standard()),settlementDate,dirtyPrice);
System.out.println(String.valueOf(yieldOfBond*100));
Напечатанная цифра доходности составляет 6,645978959660144%.
Могу ли я узнать, мог ли я неправильно сконфигурировать какой-либо из параметров, так как функция доходности страт принимает некоторые другие параметры.
Спасибо.