parent
5783497a66
commit
6cd79fab31
@ -10,11 +10,11 @@ import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { MWRPortfolioCalculator } from './mwr/portfolio-calculator';
|
||||
import { PortfolioCalculator } from './portfolio-calculator';
|
||||
import { TWRPortfolioCalculator } from './twr/portfolio-calculator';
|
||||
import { RoaiPortfolioCalculator } from './roai/portfolio-calculator';
|
||||
|
||||
export enum PerformanceCalculationType {
|
||||
MWR = 'MWR', // Money-Weighted Rate of Return
|
||||
TWR = 'TWR' // Time-Weighted Rate of Return
|
||||
ROAI = 'ROAI' // Return on Average Investment
|
||||
}
|
||||
|
||||
@Injectable()
|
||||
@ -56,8 +56,8 @@ export class PortfolioCalculatorFactory {
|
||||
portfolioSnapshotService: this.portfolioSnapshotService,
|
||||
redisCacheService: this.redisCacheService
|
||||
});
|
||||
case PerformanceCalculationType.TWR:
|
||||
return new TWRPortfolioCalculator({
|
||||
case PerformanceCalculationType.ROAI:
|
||||
return new RoaiPortfolioCalculator({
|
||||
accountBalanceItems,
|
||||
activities,
|
||||
currency,
|
||||
|
@ -137,7 +137,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -122,7 +122,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -136,7 +136,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'USD',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -120,7 +120,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'USD',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -107,7 +107,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'USD',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -135,7 +135,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'USD',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -84,7 +84,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities: [],
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -116,7 +116,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -116,7 +116,7 @@ describe('PortfolioCalculator', () => {
|
||||
|
||||
const portfolioCalculator = portfolioCalculatorFactory.createCalculator({
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: 'CHF',
|
||||
userId: userDummyData.id
|
||||
});
|
@ -15,7 +15,7 @@ import { Big } from 'big.js';
|
||||
import { addMilliseconds, differenceInDays, format, isBefore } from 'date-fns';
|
||||
import { cloneDeep, sortBy } from 'lodash';
|
||||
|
||||
export class TWRPortfolioCalculator extends PortfolioCalculator {
|
||||
export class RoaiPortfolioCalculator extends PortfolioCalculator {
|
||||
private chartDates: string[];
|
||||
|
||||
protected calculateOverallPerformance(
|
@ -295,7 +295,7 @@ export class PortfolioService {
|
||||
activities,
|
||||
filters,
|
||||
userId,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: this.request.user.Settings.settings.baseCurrency
|
||||
});
|
||||
|
||||
@ -372,7 +372,7 @@ export class PortfolioService {
|
||||
activities,
|
||||
filters,
|
||||
userId,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: userCurrency
|
||||
});
|
||||
|
||||
@ -680,7 +680,7 @@ export class PortfolioService {
|
||||
const portfolioCalculator = this.calculatorFactory.createCalculator({
|
||||
activities,
|
||||
userId,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: userCurrency
|
||||
});
|
||||
|
||||
@ -950,7 +950,7 @@ export class PortfolioService {
|
||||
activities,
|
||||
filters,
|
||||
userId,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: this.request.user.Settings.settings.baseCurrency
|
||||
});
|
||||
|
||||
@ -1116,7 +1116,7 @@ export class PortfolioService {
|
||||
activities,
|
||||
filters,
|
||||
userId,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: userCurrency
|
||||
});
|
||||
|
||||
|
@ -68,7 +68,7 @@ export class PortfolioSnapshotProcessor {
|
||||
const portfolioCalculator = this.calculatorFactory.createCalculator({
|
||||
accountBalanceItems,
|
||||
activities,
|
||||
calculationType: PerformanceCalculationType.TWR,
|
||||
calculationType: PerformanceCalculationType.ROAI,
|
||||
currency: job.data.userCurrency,
|
||||
filters: job.data.filters,
|
||||
userId: job.data.userId
|
||||
|
@ -117,8 +117,8 @@
|
||||
<ng-container i18n>Net Performance</ng-container>
|
||||
<abbr
|
||||
class="initialism ml-2 text-muted"
|
||||
title="Time-Weighted Rate of Return"
|
||||
>(TWR)</abbr
|
||||
title="Return on Average Investment"
|
||||
>(ROAI)</abbr
|
||||
>
|
||||
</div>
|
||||
<div class="flex-column flex-wrap justify-content-end">
|
||||
|
Loading…
x
Reference in New Issue
Block a user