在JAVA中使用StratforBonds复制excel收益率结果

在JAVA中使用StratforBonds复制excel收益率结果,java,excel,finance,quantitative-finance,Java,Excel,Finance,Quantitative Finance,在计算债券收益率时,我尝试使用OpenGamma开发的Strata软件包复制使用excel的收益率函数计算的结果。然而,对比使用excel和strata计算的数字,我注意到有一个小的差异,随着债券期限的延长,这种差异会增加 这是我在excel中计算的一个示例: 计算结果为6.5% 当我在地层中进行相同的计算时: DiscountingFixedCouponBondPaymentPeriodPricer paymentPeriodPricer = new DiscountingFixed

在计算债券收益率时,我尝试使用OpenGamma开发的Strata软件包复制使用excel的收益率函数计算的结果。然而,对比使用excel和strata计算的数字,我注意到有一个小的差异,随着债券期限的延长,这种差异会增加

这是我在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%

我想知道我是否错误地配置了任何参数,因为地层屈服函数包含了一些其他参数


谢谢。

看来你可能会从一个干净的价格开始?试试这个:

DiscountingFixedCouponBondProductPricer pricer =
        DiscountingFixedCouponBondProductPricer.DEFAULT;
LocalDate settlementDate = LocalDate.of(2008, 2, 15);
LocalDate startDate = LocalDate.of(2007, 11, 15);
LocalDate maturityDate = LocalDate.of(2016, 11, 15);
double couponRate = 0.0575;
double cleanPrice = 0.9504287;

Currency bondcurrency = Currency.USD;
BusinessDayAdjustment businessDayAdj = BusinessDayAdjustment.of(
        BusinessDayConventions.FOLLOWING, HolidayCalendarIds.USNY);
PeriodicSchedule definition = PeriodicSchedule.builder()
    .startDate(startDate)
    .endDate(maturityDate)
    .businessDayAdjustment(businessDayAdj)
    .frequency(Frequency.P6M)
    .stubConvention(StubConvention.SHORT_INITIAL)
    .rollConvention(RollConventions.DAY_15)
    .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.US_STREET)
    .legalEntityId(StandardId.of("WHATISTHIS", "FOR"))
    .settlementDateOffset(DaysAdjustment.ofBusinessDays(2, HolidayCalendarIds.USNY))
    .build();

double dirtyPrice = pricer.dirtyPriceFromCleanPrice(bond.resolve(ReferenceData.standard()), settlementDate, cleanPrice);
double yield = pricer.yieldFromDirtyPrice(bond.resolve(ReferenceData.standard()), settlementDate, dirtyPrice);
System.out.println(String.valueOf(yield * 100d)); 
与门店或参考和市场数据交互时使用
securityId
legalEntityId