|
@ -396,11 +396,46 @@ export class TWRPortfolioCalculator extends PortfolioCalculator { |
|
|
if (PortfolioCalculator.ENABLE_LOGGING) { |
|
|
if (PortfolioCalculator.ENABLE_LOGGING) { |
|
|
console.log(); |
|
|
console.log(); |
|
|
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]; |
|
|
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') { |
|
|
if (order.itemType === 'start') { |
|
|
// Take the unit price of the order as the market price if there are no
|
|
|
// Take the unit price of the order as the market price if there are no
|
|
|
// orders of this symbol before the start date
|
|
|
// orders of this symbol before the start date
|
|
@ -483,13 +518,6 @@ export class TWRPortfolioCalculator extends PortfolioCalculator { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (PortfolioCalculator.ENABLE_LOGGING) { |
|
|
if (PortfolioCalculator.ENABLE_LOGGING) { |
|
|
console.log('totalInvestment', totalInvestment.toNumber()); |
|
|
|
|
|
|
|
|
|
|
|
console.log( |
|
|
|
|
|
'totalInvestmentWithCurrencyEffect', |
|
|
|
|
|
totalInvestmentWithCurrencyEffect.toNumber() |
|
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
|
|
console.log('order.quantity', order.quantity.toNumber()); |
|
|
console.log('order.quantity', order.quantity.toNumber()); |
|
|
console.log('transactionInvestment', transactionInvestment.toNumber()); |
|
|
console.log('transactionInvestment', transactionInvestment.toNumber()); |
|
|
|
|
|
|
|
@ -536,36 +564,6 @@ export class TWRPortfolioCalculator extends PortfolioCalculator { |
|
|
|
|
|
|
|
|
totalUnits = totalUnits.plus(order.quantity.mul(getFactor(order.type))); |
|
|
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 valueOfInvestment = totalUnits.mul(order.unitPriceInBaseCurrency); |
|
|
|
|
|
|
|
|
const valueOfInvestmentWithCurrencyEffect = totalUnits.mul( |
|
|
const valueOfInvestmentWithCurrencyEffect = totalUnits.mul( |
|
|