java实现excel价格,yield函数

想知道是否有人可以将我指向一个开源的java定量库,提供Excel Price和Yield函数的实现。

谢谢,Tapasvi

Excel PRICEfunction是贴现现金stream量的简单总和,贴现率为零,贴现率为零。 这里logging: Excel帮助/价格 。

我写了一个小的Java版本的函数,我在下面发表。 Java版本只需要一段“时间到期”,不支持不同的date计算,而Excel PRICE函数则需要一个结算date和到期date,并支持不同的date计算。 但是,您可以通过转换优惠券来为不同的日子计算属性。 还要注意,Excel函数在优惠券前面有一个硬编码的奇怪的100。

基准两个实施的Excel表格可以在这里下载 。 该表需要“Obba” 。

Excel YIELD函数只是应用于PRICE函数的牛顿求解器,请参阅Excel帮助/ YIELD 。 牛顿求解器的Java实现可以在finmath.netfind。

/* * Created on 07.04.2012 */ /** * This class implements some functions as static class methods. * * (c) Copyright 2012 Christian Fries. * * @author Christian Fries * @version 1.0 */ public class SpreadsheetFunctions { /** * Re-implementation of the Excel PRICE function (a rather primitive bond price formula). * The reimplementation is not exact, because this function does not consider daycount conventions. * We assume we have (int)timeToMaturity/frequency future periods and the running period has * an accrual period of timeToMaturity - frequency * ((int)timeToMaturity/frequency). * * @param timeToMaturity The time to maturity. * @param coupon Coupon payment. * @param yield Yield (discount factor, using frequency: 1/(1 + yield/frequency). * @param redemption Redemption (notional repayment). * @param frequency Frequency (1,2,4). * @return price Clean price. */ public static double price( double timeToMaturity, double coupon, double yield, double redemption, int frequency) { double price = 0.0; if(timeToMaturity > 0) { price += redemption; } double paymentTime = timeToMaturity; while(paymentTime > 0) { price += coupon/frequency; // Discount back price = price / (1.0 + yield / frequency); paymentTime -= 1.0 / frequency; } // Accrue running period double accrualPeriod = 0.0-paymentTime; // amount of running period which lies in the past (before settlement) price *= Math.pow(1.0 + yield / frequency, accrualPeriod*frequency); price -= coupon/frequency * accrualPeriod*frequency; return price; } } 

你可能想看看QuantLib 。 这是一个免费/开源的定量金融图书馆。