Browse Source

Added Timeweighted performance + huge refactoring

pull/5027/head
Daniel Devaud 2 years ago
parent
commit
371ce7ee93
  1. 1476
      apps/api/src/app/portfolio/portfolio-calculator.ts
  2. 6
      apps/api/src/app/portfolio/portfolio.controller.ts
  3. 14
      apps/api/src/app/portfolio/portfolio.service.ts

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

File diff suppressed because it is too large

6
apps/api/src/app/portfolio/portfolio.controller.ts

@ -359,7 +359,8 @@ export class PortfolioController {
@Query('assetClasses') filterByAssetClasses?: string, @Query('assetClasses') filterByAssetClasses?: string,
@Query('range') dateRange: DateRange = 'max', @Query('range') dateRange: DateRange = 'max',
@Query('tags') filterByTags?: string, @Query('tags') filterByTags?: string,
@Query('withExcludedAccounts') withExcludedAccounts = false @Query('withExcludedAccounts') withExcludedAccounts = false,
@Query('timeWeightedPerformance') calculateTimeWeightedPerformance = false
): Promise<PortfolioPerformanceResponse> { ): Promise<PortfolioPerformanceResponse> {
const filters = this.apiService.buildFiltersFromQueryParams({ const filters = this.apiService.buildFiltersFromQueryParams({
filterByAccounts, filterByAccounts,
@ -372,7 +373,8 @@ export class PortfolioController {
filters, filters,
impersonationId, impersonationId,
withExcludedAccounts, withExcludedAccounts,
userId: this.request.user.id userId: this.request.user.id,
calculateTimeWeightedPerformance
}); });
if ( if (

14
apps/api/src/app/portfolio/portfolio.service.ts

@ -1153,13 +1153,15 @@ export class PortfolioService {
filters, filters,
impersonationId, impersonationId,
userId, userId,
withExcludedAccounts = false withExcludedAccounts = false,
calculateTimeWeightedPerformance = false
}: { }: {
dateRange?: DateRange; dateRange?: DateRange;
filters?: Filter[]; filters?: Filter[];
impersonationId: string; impersonationId: string;
userId: string; userId: string;
withExcludedAccounts?: boolean; withExcludedAccounts?: boolean;
calculateTimeWeightedPerformance?: boolean;
}): Promise<PortfolioPerformanceResponse> { }): Promise<PortfolioPerformanceResponse> {
userId = await this.getUserId(impersonationId, userId); userId = await this.getUserId(impersonationId, userId);
const user = await this.userService.user({ id: userId }); const user = await this.userService.user({ id: userId });
@ -1254,7 +1256,8 @@ export class PortfolioService {
portfolioOrders, portfolioOrders,
transactionPoints, transactionPoints,
userCurrency, userCurrency,
userId userId,
calculateTimeWeightedPerformance
}); });
const itemOfToday = items.find(({ date }) => { const itemOfToday = items.find(({ date }) => {
@ -1463,7 +1466,8 @@ export class PortfolioService {
portfolioOrders, portfolioOrders,
transactionPoints, transactionPoints,
userCurrency, userCurrency,
userId userId,
calculateTimeWeightedPerformance
}: { }: {
dateRange?: DateRange; dateRange?: DateRange;
impersonationId: string; impersonationId: string;
@ -1471,6 +1475,7 @@ export class PortfolioService {
transactionPoints: TransactionPoint[]; transactionPoints: TransactionPoint[];
userCurrency: string; userCurrency: string;
userId: string; userId: string;
calculateTimeWeightedPerformance: boolean;
}): Promise<HistoricalDataContainer> { }): Promise<HistoricalDataContainer> {
if (transactionPoints.length === 0) { if (transactionPoints.length === 0) {
return { return {
@ -1503,7 +1508,8 @@ export class PortfolioService {
const items = await portfolioCalculator.getChartData( const items = await portfolioCalculator.getChartData(
startDate, startDate,
endDate, endDate,
step step,
calculateTimeWeightedPerformance
); );
return { return {

Loading…
Cancel
Save