Browse Source

Merge pull request #176 from dandevaud/feature/Use-total-investment-in-calculation

Smaller fixes for New Calculator (position performance)
pull/5027/head
dandevaud 2 months ago
committed by GitHub
parent
commit
3ba58db7b3
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 54
      apps/api/src/app/portfolio/calculator/roi/portfolio-calculator-symbolmetrics-helper.ts
  2. 22
      apps/api/src/app/portfolio/portfolio.service.ts

54
apps/api/src/app/portfolio/calculator/roi/portfolio-calculator-symbolmetrics-helper.ts

@ -59,20 +59,11 @@ export class RoiPortfolioCalculatorSymbolMetricsHelper {
new Big(0)) new Big(0))
) ?? new Big(0); ) ?? new Big(0);
let investmentBasis = const investmentBasis = this.calculateInvestmentBasis(
symbolMetricsHelper.symbolMetrics.currentValuesWithCurrencyEffect[ symbolMetricsHelper,
rangeStartDateString rangeStartDateString,
]; rangeEndDateString
);
if (
!symbolMetricsHelper.symbolMetrics.currentValuesWithCurrencyEffect[
rangeStartDateString
]?.gt(0)
) {
investmentBasis =
symbolMetricsHelper.symbolMetrics
.timeWeightedInvestmentValuesWithCurrencyEffect[rangeEndDateString];
}
symbolMetricsHelper.symbolMetrics.netPerformancePercentageWithCurrencyEffectMap[ symbolMetricsHelper.symbolMetrics.netPerformancePercentageWithCurrencyEffectMap[
dateRange dateRange
@ -865,4 +856,39 @@ export class RoiPortfolioCalculatorSymbolMetricsHelper {
symbolMetricsHelper.exchangeRateAtOrderDate symbolMetricsHelper.exchangeRateAtOrderDate
); );
} }
private calculateInvestmentBasis(
symbolMetricsHelper: PortfolioCalculatorSymbolMetricsHelperObject,
rangeStartDateString: string,
rangeEndDateString: string
) {
let investmentBasis = this.getValueOrZero(
symbolMetricsHelper.symbolMetrics.currentValuesWithCurrencyEffect[
rangeStartDateString
]
).plus(
this.getValueOrZero(
symbolMetricsHelper.symbolMetrics
.timeWeightedInvestmentValuesWithCurrencyEffect[rangeEndDateString]
)?.minus(
this.getValueOrZero(
symbolMetricsHelper.symbolMetrics
.timeWeightedInvestmentValuesWithCurrencyEffect[
rangeStartDateString
]
)
)
);
if (!investmentBasis.gt(0)) {
investmentBasis =
symbolMetricsHelper.symbolMetrics
.timeWeightedInvestmentValuesWithCurrencyEffect[rangeEndDateString];
}
return investmentBasis;
}
private getValueOrZero(value: Big | undefined) {
return value ?? new Big(0);
}
} }

22
apps/api/src/app/portfolio/portfolio.service.ts

@ -248,16 +248,18 @@ export class PortfolioService {
activities: Activity[]; activities: Activity[];
groupBy?: GroupBy; groupBy?: GroupBy;
}): Promise<InvestmentItem[]> { }): Promise<InvestmentItem[]> {
let dividends = activities.map(({ currency, date, value }) => { let dividends = activities.map(
return { ({ currency, date, value, SymbolProfile }) => {
date: format(date, DATE_FORMAT), return {
investment: this.exchangeRateDataService.toCurrency( date: format(date, DATE_FORMAT),
value, investment: this.exchangeRateDataService.toCurrency(
currency, value,
this.getUserCurrency() currency ?? SymbolProfile.currency,
) this.getUserCurrency()
}; )
}); };
}
);
if (groupBy) { if (groupBy) {
dividends = this.getDividendsByGroup({ dividends, groupBy }); dividends = this.getDividendsByGroup({ dividends, groupBy });

Loading…
Cancel
Save