1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.tanpu.fund.utils;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zhoupeng
* @email: zhoupeng_08@163.com
*/
public class FundMethod {
private static BigDecimal BASE_DIVISOR = new BigDecimal(10000);
/**
* <p>盈亏金额</p>
* 盈亏金额=市值-成本
*
* @param market 市值
* @param cost 成本
* @return 盈亏金额
*/
public static String profitLossMoney(String market, String cost) {
return toBigDecimal(market).subtract(toBigDecimal(cost)).toString();
}
/**
* <p>市值</p>
* 市值=确认份额*最新净值/10000-确认份额*分红比例/10000
*
* @param share 确认份额
* @param net 最新净值
* @param bonus 分红比例
* @return 市值
*/
public static String marketValue(String share, String net, String bonus) {
String market;
if (StringUtils.isNotBlank(bonus)) {
// TODO 精度待确认
market = toBigDecimal(share).multiply(toBigDecimal(net).subtract(toBigDecimal(bonus))).divide(BASE_DIVISOR, 6).toString();
} else {
market = toBigDecimal(share).multiply(toBigDecimal(net)).divide(BASE_DIVISOR, 6).toString();
}
return market;
}
/**
* <p>初始权重</p>
* 基金初始权重=基金成本/组合基金总成本
*
* @param cost 基金成本
* @param allCost 组合基金总成本
* @return 基金初始权重
*/
public static String initWeight(String cost, String allCost) {
// TODO
return toBigDecimal(cost).divide(toBigDecimal(allCost), 2).toString();
}
public static String maxNet(List<String> nets) {
List<BigDecimal> bNets = nets.stream().map(FundMethod::toBigDecimal).collect(Collectors.toList());
BigDecimal max = Collections.max(bNets);
BigDecimal min = Collections.min(bNets);
// TODO
return max.subtract(min).divide(max, 6).toString();
}
public static BigDecimal toBigDecimal(String s) {
return new BigDecimal(s);
}
public static BigDecimal toBigDecimal(double s) {
return new BigDecimal(Double.toString(s));
}
public static double toDouble(BigDecimal b) {
return Double.parseDouble(b.toString());
}
}