|
|
@ -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) { |
|
|
|