Skip to content

Commit 98a441f

Browse files
committed
fix: import
1 parent 5fcbf56 commit 98a441f

2 files changed

Lines changed: 26 additions & 18 deletions

File tree

backend/src/main/java/ch/xxx/manager/stocks/PortfolioCalculcationBase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ record MyKeyValue(String key, List<DailyQuote> quotes) {
6868

6969
protected BigDecimal calcValue(Function<? super Currency, BigDecimal> currExtractor, Currency currencyQuote,
7070
Function<? super DailyQuote, BigDecimal> quoteExtractor, DailyQuote dailyQuote, final Portfolio portfolio) {
71-
final BigDecimal currValue = Optional.ofNullable(currExtractor.apply(currencyQuote)).orElse(BigDecimal.ZERO);
71+
final BigDecimal currValue = Optional.ofNullable(currExtractor.apply(currencyQuote)).orElse(BigDecimal.ONE);
7272
final BigDecimal quoteValue = Optional.ofNullable(quoteExtractor.apply(dailyQuote)).orElse(BigDecimal.ZERO);
7373
BigDecimal calcValue = quoteValue;
7474
if (dailyQuote.getCurrencyKey().equals(currencyQuote.getFromCurrKey())

backend/src/main/java/ch/xxx/manager/stocks/PortfolioStatisticService.java

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,9 @@ private BigDecimal zeroSafeDivideBigDecimal(final LinkedHashMap<LocalDate, BigDe
195195
private BigDecimal calcStandardDiviation(Map<LocalDate, BigDecimal> adjClosePercents) {
196196
final var adjCloseMean = adjClosePercents.entrySet().stream().map(Entry::getValue)
197197
.reduce(BigDecimal.ZERO, (acc, value) -> value.add(acc))
198-
.divide(BigDecimal.valueOf(adjClosePercents.entrySet().size()), 25, RoundingMode.HALF_EVEN);
198+
.divide(BigDecimal.valueOf(Math.max(adjClosePercents.entrySet().size(), 1)), 25, RoundingMode.HALF_EVEN);
199199
final var divisor = BigDecimal.ONE.divide(
200-
BigDecimal.valueOf(adjClosePercents.entrySet().size() < 2 ? 2 : adjClosePercents.entrySet().size())
200+
BigDecimal.valueOf(Math.max(adjClosePercents.entrySet().size(), 2))
201201
.subtract(BigDecimal.ONE),
202202
25, RoundingMode.HALF_EVEN);
203203
final var standardDeviation = adjClosePercents.entrySet().stream().map(Entry::getValue)
@@ -225,9 +225,13 @@ private static Gatherer<DailyQuote, AtomicReference<BigDecimal>, DateToCloseAdjP
225225
(state, element, downstream) -> {
226226
var result = true;
227227
if (state.get().longValue() > -900L) {
228-
var resultPercetage = element.getAdjClose().divide(state.get(), 25, RoundingMode.HALF_EVEN)
229-
.multiply(new BigDecimal(100L));
230-
result = downstream.push(new DateToCloseAdjPercent(element.getLocalDay(), resultPercetage));
228+
try {
229+
var resultPercetage = element.getAdjClose().divide(state.get(), 25, RoundingMode.HALF_EVEN)
230+
.multiply(new BigDecimal(100L));
231+
result = downstream.push(new DateToCloseAdjPercent(element.getLocalDay(), resultPercetage));
232+
}catch (ArithmeticException e) {
233+
LOGGER.info("calcClosePercentage failed: ",e);
234+
}
231235
}
232236
state.set(element.getAdjClose());
233237
return result;
@@ -354,15 +358,19 @@ private Double calcLinRegReturn(final Portfolio portfolio, LocalDate cutOffDate,
354358
CalcValuesDay prevValues = null;
355359
for (int i = 0; i < calcValuesDays.size(); i++) {
356360
if (prevValues != null) {
357-
BigDecimal quoteReturn = calcValuesDays.get(i).quote()
358-
.divide(calcValuesDays.get(i - 1).quote(), 25, RoundingMode.HALF_EVEN)
359-
.multiply(BigDecimal.valueOf(100L));
360-
BigDecimal compQuoteReturn = calcValuesDays.get(i).compQuote()
361-
.divide(calcValuesDays.get(i - 1).compQuote(), 25, RoundingMode.HALF_EVEN)
362-
.multiply(BigDecimal.valueOf(100L));
363-
CalcValuesDay myCalcValuesDay = new CalcValuesDay(calcValuesDays.get(i).day(), quoteReturn,
364-
compQuoteReturn);
365-
divValuesDays.add(myCalcValuesDay);
361+
try {
362+
BigDecimal quoteReturn = calcValuesDays.get(i).quote()
363+
.divide(calcValuesDays.get(i - 1).quote(), 25, RoundingMode.HALF_EVEN)
364+
.multiply(BigDecimal.valueOf(100L));
365+
BigDecimal compQuoteReturn = calcValuesDays.get(i).compQuote()
366+
.divide(calcValuesDays.get(i - 1).compQuote(), 25, RoundingMode.HALF_EVEN)
367+
.multiply(BigDecimal.valueOf(100L));
368+
CalcValuesDay myCalcValuesDay = new CalcValuesDay(calcValuesDays.get(i).day(), quoteReturn,
369+
compQuoteReturn);
370+
divValuesDays.add(myCalcValuesDay);
371+
}catch (ArithmeticException e) {
372+
LOGGER.info("calcLinRegReturn had an error: ",e);
373+
}
366374
}
367375
prevValues = calcValuesDays.get(i);
368376
}
@@ -373,7 +381,7 @@ private Double calcLinRegReturn(final Portfolio portfolio, LocalDate cutOffDate,
373381
LinearRegressionResults calcLinRegReturn(List<CalcValuesDay> calcValuesDays) {
374382
BigDecimalValues meanValues = this.calculateMeans(calcValuesDays);
375383
BigDecimal yMean = BigDecimal.valueOf(IntStream.range(0, calcValuesDays.size()).sum()).divide(
376-
BigDecimal.valueOf(calcValuesDays.size() < 1 ? 1 : calcValuesDays.size()), 25, RoundingMode.HALF_EVEN);
384+
BigDecimal.valueOf(Math.max(calcValuesDays.size(), 1)), 25, RoundingMode.HALF_EVEN);
377385
final int[] yValue = new int[1];
378386
yValue[0] = 0;
379387
BigDecimal crossDiviationDailyQuotes = calcValuesDays.stream()
@@ -443,11 +451,11 @@ private boolean checkCurrencyQuotes(final Portfolio portfolio, Map<LocalDate, Da
443451
private BigDecimalValues calculateMeans(List<CalcValuesDay> calcValuesDays) {
444452
BigDecimal meanDailyQuotes = calcValuesDays.stream().map(CalcValuesDay::quote)
445453
.reduce(BigDecimal.ZERO, BigDecimal::add)
446-
.divide(BigDecimal.valueOf(calcValuesDays.size() < 1 ? 1 : calcValuesDays.size()), 25,
454+
.divide(BigDecimal.valueOf(Math.max(calcValuesDays.size(), 1)), 25,
447455
RoundingMode.HALF_EVEN);
448456
BigDecimal meanCompQuotes = calcValuesDays.stream().map(CalcValuesDay::compQuote)
449457
.reduce(BigDecimal.ZERO, BigDecimal::add)
450-
.divide(BigDecimal.valueOf(calcValuesDays.size() < 1 ? 1 : calcValuesDays.size()), 25,
458+
.divide(BigDecimal.valueOf(Math.max(calcValuesDays.size(), 1)), 25,
451459
RoundingMode.HALF_EVEN);
452460
return new BigDecimalValues(meanDailyQuotes, meanCompQuotes);
453461
}

0 commit comments

Comments
 (0)