Browse Source

Refactor portfolio calculator

pull/1803/head
Thomas 3 years ago
parent
commit
227a375435
  1. 53
      apps/api/src/app/portfolio/portfolio-calculator.ts

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

@ -182,10 +182,10 @@ export class PortfolioCalculator {
return isBefore(parseDate(transactionPoint.date), end); return isBefore(parseDate(transactionPoint.date), end);
}) ?? []; }) ?? [];
const firstIndex = transactionPointsBeforeEndDate.length; const currencies: { [symbol: string]: string } = {};
const dates: Date[] = []; const dates: Date[] = [];
const dataGatheringItems: IDataGatheringItem[] = []; const dataGatheringItems: IDataGatheringItem[] = [];
const currencies: { [symbol: string]: string } = {}; const firstIndex = transactionPointsBeforeEndDate.length;
let day = start; let day = start;
@ -235,20 +235,13 @@ export class PortfolioCalculator {
} }
} }
const currentValuesBySymbol: { const valuesBySymbol: {
[symbol: string]: { [date: string]: Big }; [symbol: string]: {
} = {}; currentValues: { [date: string]: Big };
investmentValues: { [date: string]: Big };
const investmentValuesBySymbol: { maxInvestmentValues: { [date: string]: Big };
[symbol: string]: { [date: string]: Big }; netPerformanceValues: { [date: string]: Big };
} = {}; };
const maxInvestmentValuesBySymbol: {
[symbol: string]: { [date: string]: Big };
} = {};
const netPerformanceValuesBySymbol: {
[symbol: string]: { [date: string]: Big };
} = {}; } = {};
const totalCurrentValues: { [date: string]: Big } = {}; const totalCurrentValues: { [date: string]: Big } = {};
@ -271,50 +264,52 @@ export class PortfolioCalculator {
isChartMode: true isChartMode: true
}); });
currentValuesBySymbol[symbol] = currentValues; valuesBySymbol[symbol] = {
netPerformanceValuesBySymbol[symbol] = netPerformanceValues; currentValues,
investmentValuesBySymbol[symbol] = investmentValues; investmentValues,
maxInvestmentValuesBySymbol[symbol] = maxInvestmentValues; maxInvestmentValues,
netPerformanceValues
};
} }
for (const currentDate of dates) { for (const currentDate of dates) {
const dateString = format(currentDate, DATE_FORMAT); const dateString = format(currentDate, DATE_FORMAT);
for (const symbol of Object.keys(netPerformanceValuesBySymbol)) { for (const symbol of Object.keys(valuesBySymbol)) {
totalCurrentValues[dateString] = totalCurrentValues[dateString] =
totalCurrentValues[dateString] ?? new Big(0); totalCurrentValues[dateString] ?? new Big(0);
if (currentValuesBySymbol[symbol]?.[dateString]) { if (valuesBySymbol[symbol].currentValues[dateString]) {
totalCurrentValues[dateString] = totalCurrentValues[dateString].add( totalCurrentValues[dateString] = totalCurrentValues[dateString].add(
currentValuesBySymbol[symbol][dateString] valuesBySymbol[symbol].currentValues[dateString]
); );
} }
totalNetPerformanceValues[dateString] = totalNetPerformanceValues[dateString] =
totalNetPerformanceValues[dateString] ?? new Big(0); totalNetPerformanceValues[dateString] ?? new Big(0);
if (netPerformanceValuesBySymbol[symbol]?.[dateString]) { if (valuesBySymbol[symbol].netPerformanceValues[dateString]) {
totalNetPerformanceValues[dateString] = totalNetPerformanceValues[ totalNetPerformanceValues[dateString] = totalNetPerformanceValues[
dateString dateString
].add(netPerformanceValuesBySymbol[symbol][dateString]); ].add(valuesBySymbol[symbol].netPerformanceValues[dateString]);
} }
totalInvestmentValues[dateString] = totalInvestmentValues[dateString] =
totalInvestmentValues[dateString] ?? new Big(0); totalInvestmentValues[dateString] ?? new Big(0);
if (investmentValuesBySymbol[symbol]?.[dateString]) { if (valuesBySymbol[symbol].investmentValues[dateString]) {
totalInvestmentValues[dateString] = totalInvestmentValues[ totalInvestmentValues[dateString] = totalInvestmentValues[
dateString dateString
].add(investmentValuesBySymbol[symbol][dateString]); ].add(valuesBySymbol[symbol].investmentValues[dateString]);
} }
maxTotalInvestmentValues[dateString] = maxTotalInvestmentValues[dateString] =
maxTotalInvestmentValues[dateString] ?? new Big(0); maxTotalInvestmentValues[dateString] ?? new Big(0);
if (maxInvestmentValuesBySymbol[symbol]?.[dateString]) { if (valuesBySymbol[symbol].maxInvestmentValues[dateString]) {
maxTotalInvestmentValues[dateString] = maxTotalInvestmentValues[ maxTotalInvestmentValues[dateString] = maxTotalInvestmentValues[
dateString dateString
].add(maxInvestmentValuesBySymbol[symbol][dateString]); ].add(valuesBySymbol[symbol].maxInvestmentValues[dateString]);
} }
} }
} }

Loading…
Cancel
Save