Browse Source

Reset Graph to 0 at start of time period

pull/5027/head
Dan 2 months ago
parent
commit
986fb181b7
  1. 58
      apps/api/src/app/portfolio/calculator/portfolio-calculator.ts

58
apps/api/src/app/portfolio/calculator/portfolio-calculator.ts

@ -745,6 +745,10 @@ export abstract class PortfolioCalculator {
let netPerformanceAtStartDate: number;
let netPerformanceWithCurrencyEffectAtStartDate: number;
let lastTimeWeightedPerformancePercentage: number;
let lastTimeWeightedPerformancePercentageWithCurrencyEffect: number;
let timeWeightedPerformanceInPercentage: number;
let timeWeightedPerformanceInPercentageWithCurrencyEffect: number;
const totalInvestmentValuesWithCurrencyEffect: number[] = [];
for (const historicalDataItem of historicalData) {
@ -777,7 +781,19 @@ export abstract class PortfolioCalculator {
totalInvestmentValuesWithCurrencyEffect.length
: 0;
//TODO : Extract in abstractFunction and use timeweighted for ROI + Handle total values separately
({
timeWeightedPerformanceInPercentage,
timeWeightedPerformanceInPercentageWithCurrencyEffect,
lastTimeWeightedPerformancePercentage,
lastTimeWeightedPerformancePercentageWithCurrencyEffect
} = this.calculateTimeWeightedPerformance(
lastTimeWeightedPerformancePercentage,
historicalDataItem,
lastTimeWeightedPerformancePercentageWithCurrencyEffect,
timeWeightedPerformanceInPercentage,
timeWeightedPerformanceInPercentageWithCurrencyEffect
));
chart.push({
...historicalDataItem,
netPerformance:
@ -792,7 +808,9 @@ export abstract class PortfolioCalculator {
timeWeightedInvestmentValue === 0
? 0
: netPerformanceWithCurrencyEffectSinceStartDate /
timeWeightedInvestmentValue
timeWeightedInvestmentValue,
timeWeightedPerformanceInPercentage,
timeWeightedPerformanceInPercentageWithCurrencyEffect
// TODO: Add net worth with valuables
// netWorth: totalCurrentValueWithCurrencyEffect
// .plus(totalAccountBalanceWithCurrencyEffect)
@ -818,6 +836,42 @@ export abstract class PortfolioCalculator {
};
}
private calculateTimeWeightedPerformance(
lastTimeWeightedPerformancePercentage: number,
historicalDataItem: HistoricalDataItem,
lastTimeWeightedPerformancePercentageWithCurrencyEffect: number,
timeWeightedPerformanceInPercentage: number,
timeWeightedPerformanceInPercentageWithCurrencyEffect: number
): {
timeWeightedPerformanceInPercentage: number;
timeWeightedPerformanceInPercentageWithCurrencyEffect: number;
lastTimeWeightedPerformancePercentage: number;
lastTimeWeightedPerformancePercentageWithCurrencyEffect: number;
} {
timeWeightedPerformanceInPercentage = lastTimeWeightedPerformancePercentage
? (1 + timeWeightedPerformanceInPercentage) *
((1 + historicalDataItem.timeWeightedPerformanceInPercentage) /
(1 + lastTimeWeightedPerformancePercentage)) -
1
: 0;
timeWeightedPerformanceInPercentageWithCurrencyEffect =
lastTimeWeightedPerformancePercentageWithCurrencyEffect
? (1 + timeWeightedPerformanceInPercentageWithCurrencyEffect) *
((1 +
historicalDataItem.timeWeightedPerformanceInPercentageWithCurrencyEffect) /
(1 + lastTimeWeightedPerformancePercentageWithCurrencyEffect)) -
1
: 0;
return {
timeWeightedPerformanceInPercentage,
timeWeightedPerformanceInPercentageWithCurrencyEffect,
lastTimeWeightedPerformancePercentage:
historicalDataItem.timeWeightedPerformanceInPercentage,
lastTimeWeightedPerformancePercentageWithCurrencyEffect:
historicalDataItem.timeWeightedPerformanceInPercentageWithCurrencyEffect
};
}
@LogPerformance
protected getHistoricalDataItems(accumulatedValuesByDate: {
[date: string]: {

Loading…
Cancel
Save