|
|
|
@ -142,7 +142,7 @@ export class PortfolioCalculator {
|
|
|
|
|
const start = dparse(startDate);
|
|
|
|
|
const end = dparse(endDate);
|
|
|
|
|
|
|
|
|
|
const timelinePeriod: TimelinePeriod[] = [];
|
|
|
|
|
const timelinePeriodPromises: Promise<TimelinePeriod>[] = [];
|
|
|
|
|
let i = 0;
|
|
|
|
|
let j = -1;
|
|
|
|
|
for (
|
|
|
|
@ -162,38 +162,45 @@ export class PortfolioCalculator {
|
|
|
|
|
) {
|
|
|
|
|
j++;
|
|
|
|
|
}
|
|
|
|
|
timelinePeriodPromises.push(this.getTimePeriodForDate(j, currentDate));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let investment: Big = new Big(0);
|
|
|
|
|
const promises = [];
|
|
|
|
|
if (j >= 0) {
|
|
|
|
|
for (const item of this.transactionPoints[j].items) {
|
|
|
|
|
investment = investment.add(item.investment);
|
|
|
|
|
promises.push(
|
|
|
|
|
this.currentRateService
|
|
|
|
|
.getValue({
|
|
|
|
|
date: currentDate,
|
|
|
|
|
symbol: item.symbol,
|
|
|
|
|
currency: item.currency,
|
|
|
|
|
userCurrency: this.currency
|
|
|
|
|
})
|
|
|
|
|
.then((v) => new Big(v).mul(item.quantity))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
const timelinePeriod: TimelinePeriod[] = await Promise.all(
|
|
|
|
|
timelinePeriodPromises
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
const value = (await Promise.all(promises)).reduce(
|
|
|
|
|
(a, b) => a.add(b),
|
|
|
|
|
new Big(0)
|
|
|
|
|
);
|
|
|
|
|
timelinePeriod.push({
|
|
|
|
|
date: format(currentDate, DATE_FORMAT),
|
|
|
|
|
grossPerformance: value.minus(investment),
|
|
|
|
|
investment,
|
|
|
|
|
value
|
|
|
|
|
});
|
|
|
|
|
return timelinePeriod;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private async getTimePeriodForDate(j: number, currentDate: Date) {
|
|
|
|
|
let investment: Big = new Big(0);
|
|
|
|
|
const promises = [];
|
|
|
|
|
if (j >= 0) {
|
|
|
|
|
for (const item of this.transactionPoints[j].items) {
|
|
|
|
|
investment = investment.add(item.investment);
|
|
|
|
|
promises.push(
|
|
|
|
|
this.currentRateService
|
|
|
|
|
.getValue({
|
|
|
|
|
date: currentDate,
|
|
|
|
|
symbol: item.symbol,
|
|
|
|
|
currency: item.currency,
|
|
|
|
|
userCurrency: this.currency
|
|
|
|
|
})
|
|
|
|
|
.then((v) => new Big(v).mul(item.quantity))
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return timelinePeriod;
|
|
|
|
|
const value = (await Promise.all(promises)).reduce(
|
|
|
|
|
(a, b) => a.add(b),
|
|
|
|
|
new Big(0)
|
|
|
|
|
);
|
|
|
|
|
return {
|
|
|
|
|
date: format(currentDate, DATE_FORMAT),
|
|
|
|
|
grossPerformance: value.minus(investment),
|
|
|
|
|
investment,
|
|
|
|
|
value
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private getFactor(type: OrderType) {
|
|
|
|
|