1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package com.nickokiss.investor.fin.env;
22
23 import java.math.BigDecimal;
24
25 import com.nickokiss.investor.calc.MathCalc;
26
27
28
29
30
31 public class ContinuousCompoundingStrategy implements CompoundingStrategy {
32
33 private MathCalc mathCalc = new MathCalc();
34
35
36
37
38
39
40
41
42
43
44 public BigDecimal getForwardRate(BigDecimal startTime, BigDecimal endTime, InterestRateStrategy interestRateStrategy) {
45 BigDecimal endTimeSpotRate = interestRateStrategy.getSpotRate(endTime);
46 BigDecimal startTimeSpotRate = interestRateStrategy.getSpotRate(startTime);
47 BigDecimal sjj = endTimeSpotRate.multiply(endTime);
48 BigDecimal sii = startTimeSpotRate.multiply(startTime);
49 return mathCalc.div(sjj.subtract(sii), endTime.subtract(startTime));
50 }
51
52
53
54
55 public BigDecimal getDiscountFactor(BigDecimal startTime, BigDecimal endTime, InterestRateStrategy interestRateStrategy) {
56 BigDecimal timeDiff = endTime.subtract(startTime);
57 if (timeDiff.compareTo(mathCalc.ZERO) == 0) {
58 return mathCalc.ONE;
59 }
60 BigDecimal forwardRate = getForwardRate(startTime, endTime, interestRateStrategy);
61 return mathCalc.exp(forwardRate.multiply(timeDiff).negate());
62 }
63
64 public BigDecimal getDurationMultiplicand(BigDecimal time, BigDecimal spotRate) {
65 return mathCalc.exp(spotRate.multiply(time).negate());
66 }
67
68
69
70 }