|
@ -169,7 +169,10 @@ export class PortfolioCalculator { |
|
|
) { |
|
|
) { |
|
|
j++; |
|
|
j++; |
|
|
} |
|
|
} |
|
|
timelinePeriodPromises.push(this.getTimePeriodForDate(j, currentDate)); |
|
|
const timePeriodForDate = this.getTimePeriodForDate(j, currentDate); |
|
|
|
|
|
if (timePeriodForDate != null) { |
|
|
|
|
|
timelinePeriodPromises.push(timePeriodForDate); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
console.timeEnd('calculate-timeline-calculations'); |
|
|
console.timeEnd('calculate-timeline-calculations'); |
|
|
|
|
|
|
|
@ -185,7 +188,10 @@ export class PortfolioCalculator { |
|
|
return timelinePeriods; |
|
|
return timelinePeriods; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private async getTimePeriodForDate(j: number, currentDate: Date) { |
|
|
private async getTimePeriodForDate( |
|
|
|
|
|
j: number, |
|
|
|
|
|
currentDate: Date |
|
|
|
|
|
): Promise<TimelinePeriod> { |
|
|
let investment: Big = new Big(0); |
|
|
let investment: Big = new Big(0); |
|
|
const promises = []; |
|
|
const promises = []; |
|
|
if (j >= 0) { |
|
|
if (j >= 0) { |
|
@ -204,10 +210,19 @@ export class PortfolioCalculator { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const value = (await Promise.all(promises)).reduce( |
|
|
const result = await Promise.all(promises).catch((e) => { |
|
|
(a, b) => a.add(b), |
|
|
console.error( |
|
|
new Big(0) |
|
|
`failed to fetch info for date ${currentDate} with exception`, |
|
|
); |
|
|
e |
|
|
|
|
|
); |
|
|
|
|
|
return null; |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
if (result == null) { |
|
|
|
|
|
return null; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
const value = result.reduce((a, b) => a.add(b), new Big(0)); |
|
|
return { |
|
|
return { |
|
|
date: format(currentDate, DATE_FORMAT), |
|
|
date: format(currentDate, DATE_FORMAT), |
|
|
grossPerformance: value.minus(investment), |
|
|
grossPerformance: value.minus(investment), |
|
|