mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
62 lines
1.5 KiB
62 lines
1.5 KiB
import { PortfolioService } from './portfolio.service';
|
|
|
|
describe('PortfolioService', () => {
|
|
let portfolioService: PortfolioService;
|
|
|
|
beforeAll(async () => {
|
|
portfolioService = new PortfolioService(
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null
|
|
);
|
|
});
|
|
|
|
it('Get annualized performance', async () => {
|
|
expect(
|
|
portfolioService.getAnnualizedPerformancePercent({
|
|
daysInMarket: NaN, // differenceInDays of date-fns returns NaN for the same day
|
|
netPerformancePercent: 0
|
|
})
|
|
).toEqual(0);
|
|
|
|
expect(
|
|
portfolioService.getAnnualizedPerformancePercent({
|
|
daysInMarket: 0,
|
|
netPerformancePercent: 0
|
|
})
|
|
).toEqual(0);
|
|
|
|
/**
|
|
* Source: https://www.readyratios.com/reference/analysis/annualized_rate.html
|
|
*/
|
|
expect(
|
|
portfolioService.getAnnualizedPerformancePercent({
|
|
daysInMarket: 65, // < 1 year
|
|
netPerformancePercent: 0.1025
|
|
})
|
|
).toBeCloseTo(0.729705);
|
|
|
|
expect(
|
|
portfolioService.getAnnualizedPerformancePercent({
|
|
daysInMarket: 365, // 1 year
|
|
netPerformancePercent: 0.05
|
|
})
|
|
).toBeCloseTo(0.05);
|
|
|
|
/**
|
|
* Source: https://www.investopedia.com/terms/a/annualized-total-return.asp#annualized-return-formula-and-calculation
|
|
*/
|
|
expect(
|
|
portfolioService.getAnnualizedPerformancePercent({
|
|
daysInMarket: 575, // > 1 year
|
|
netPerformancePercent: 0.2374
|
|
})
|
|
).toBeCloseTo(0.145);
|
|
});
|
|
});
|
|
|