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.calc;
22
23 import java.math.BigDecimal;
24
25 import com.nickokiss.investor.fin.element.Bond;
26 import com.nickokiss.investor.fin.element.FinElement;
27 import com.nickokiss.investor.fin.element.Portfolio;
28
29
30
31
32
33 public class PortfolioCalc {
34
35 private MathCalc mathCalc = new MathCalc();
36
37
38
39
40
41
42 public BigDecimal getPrice(Portfolio portfolio) {
43 BigDecimal portfolioPrice = mathCalc.ZERO;
44 BondCalc bondCalc = new BondCalc();
45 for (FinElement bond1 : portfolio.getFinElements()) {
46 Bond bond = (Bond) bond1;
47 BigDecimal bondPrice = bondCalc.getCurrentPrice(bond, bond.getYield());
48 portfolioPrice = portfolioPrice.add(bondPrice);
49 }
50 return portfolioPrice;
51 }
52
53
54
55
56
57
58 public BigDecimal getDuration(Portfolio portfolio) {
59 BigDecimal portfolioPrice = getPrice(portfolio);
60 BigDecimal portfolioDuration = mathCalc.ZERO;
61 BondCalc bondCalc = new BondCalc();
62 for (FinElement bond : portfolio.getFinElements()) {
63 Bond bond1 = (Bond) bond;
64 BigDecimal bondPrice = bondCalc.getCurrentPrice(bond1, bond1.getYield());
65 BigDecimal bondDuration = bondCalc.getMacaulayDuration(bond1);
66 BigDecimal element = bondDuration.multiply(mathCalc.div(bondPrice, portfolioPrice));
67 portfolioDuration = portfolioDuration.add(element);
68 }
69 return portfolioDuration;
70 }
71
72 }