|
|
|
@ -396,11 +396,46 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
|
|
|
|
|
if (PortfolioCalculator.ENABLE_LOGGING) {
|
|
|
|
|
console.log();
|
|
|
|
|
console.log();
|
|
|
|
|
console.log(i + 1, order.type, order.itemType);
|
|
|
|
|
console.log(
|
|
|
|
|
i + 1,
|
|
|
|
|
order.date,
|
|
|
|
|
order.type,
|
|
|
|
|
order.itemType ? `(${order.itemType})` : ''
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const exchangeRateAtOrderDate = exchangeRates[order.date];
|
|
|
|
|
|
|
|
|
|
if (order.type === 'DIVIDEND') {
|
|
|
|
|
const dividend = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalDividend = totalDividend.plus(dividend);
|
|
|
|
|
totalDividendInBaseCurrency = totalDividendInBaseCurrency.plus(
|
|
|
|
|
dividend.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
} else if (order.type === 'INTEREST') {
|
|
|
|
|
const interest = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalInterest = totalInterest.plus(interest);
|
|
|
|
|
totalInterestInBaseCurrency = totalInterestInBaseCurrency.plus(
|
|
|
|
|
interest.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
} else if (order.type === 'ITEM') {
|
|
|
|
|
const valuables = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalValuables = totalValuables.plus(valuables);
|
|
|
|
|
totalValuablesInBaseCurrency = totalValuablesInBaseCurrency.plus(
|
|
|
|
|
valuables.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
} else if (order.type === 'LIABILITY') {
|
|
|
|
|
const liabilities = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalLiabilities = totalLiabilities.plus(liabilities);
|
|
|
|
|
totalLiabilitiesInBaseCurrency = totalLiabilitiesInBaseCurrency.plus(
|
|
|
|
|
liabilities.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (order.itemType === 'start') {
|
|
|
|
|
// Take the unit price of the order as the market price if there are no
|
|
|
|
|
// orders of this symbol before the start date
|
|
|
|
@ -483,13 +518,6 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PortfolioCalculator.ENABLE_LOGGING) {
|
|
|
|
|
console.log('totalInvestment', totalInvestment.toNumber());
|
|
|
|
|
|
|
|
|
|
console.log(
|
|
|
|
|
'totalInvestmentWithCurrencyEffect',
|
|
|
|
|
totalInvestmentWithCurrencyEffect.toNumber()
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
console.log('order.quantity', order.quantity.toNumber());
|
|
|
|
|
console.log('transactionInvestment', transactionInvestment.toNumber());
|
|
|
|
|
|
|
|
|
@ -536,36 +564,6 @@ export class TWRPortfolioCalculator extends PortfolioCalculator {
|
|
|
|
|
|
|
|
|
|
totalUnits = totalUnits.plus(order.quantity.mul(getFactor(order.type)));
|
|
|
|
|
|
|
|
|
|
if (order.type === 'DIVIDEND') {
|
|
|
|
|
const dividend = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalDividend = totalDividend.plus(dividend);
|
|
|
|
|
totalDividendInBaseCurrency = totalDividendInBaseCurrency.plus(
|
|
|
|
|
dividend.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
} else if (order.type === 'INTEREST') {
|
|
|
|
|
const interest = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalInterest = totalInterest.plus(interest);
|
|
|
|
|
totalInterestInBaseCurrency = totalInterestInBaseCurrency.plus(
|
|
|
|
|
interest.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
} else if (order.type === 'ITEM') {
|
|
|
|
|
const valuables = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalValuables = totalValuables.plus(valuables);
|
|
|
|
|
totalValuablesInBaseCurrency = totalValuablesInBaseCurrency.plus(
|
|
|
|
|
valuables.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
} else if (order.type === 'LIABILITY') {
|
|
|
|
|
const liabilities = order.quantity.mul(order.unitPrice);
|
|
|
|
|
|
|
|
|
|
totalLiabilities = totalLiabilities.plus(liabilities);
|
|
|
|
|
totalLiabilitiesInBaseCurrency = totalLiabilitiesInBaseCurrency.plus(
|
|
|
|
|
liabilities.mul(exchangeRateAtOrderDate ?? 1)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const valueOfInvestment = totalUnits.mul(order.unitPriceInBaseCurrency);
|
|
|
|
|
|
|
|
|
|
const valueOfInvestmentWithCurrencyEffect = totalUnits.mul(
|
|
|
|
|