Browse Source

Merge pull request #57 from dandevaud/bugfix/fix-asset-allocation-in-dockerpush

Refactoring for readability & debuging
pull/5027/head
dandevaud 2 years ago
committed by GitHub
parent
commit
e9a0aecba9
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 89
      apps/api/src/app/portfolio/portfolio-calculator.ts

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

@ -1609,40 +1609,87 @@ export class PortfolioCalculator {
.div(previousOrder.unitPrice) .div(previousOrder.unitPrice)
.minus(1); .minus(1);
} else if ( } else if (
order.type === 'STAKE' && this.needsStakeHandling(order, marketSymbolMap, previousOrder)
marketSymbolMap[order.date] && ) {
((marketSymbolMap[previousOrder.date][ this.stakeHandling(
previousOrder.symbol previousOrder,
]?.toNumber() && marketSymbolMap,
previousOrder.type === 'STAKE') || netPerformanceValuesPercentage,
(previousOrder.type !== 'STAKE' && order
previousOrder.unitPrice.toNumber())) );
} else if (previousOrder.unitPrice.toNumber()) {
netPerformanceValuesPercentage[order.date] = new Big(-1);
} else if (
this.ispreviousOrderStakeAndHasInformation(
previousOrder,
marketSymbolMap
)
) {
this.handleIfPreviousOrderIsStake(
netPerformanceValuesPercentage,
order,
marketSymbolMap,
previousOrder
);
} else {
netPerformanceValuesPercentage[order.date] = new Big(0);
}
}
}
private handleIfPreviousOrderIsStake(
netPerformanceValuesPercentage: { [date: string]: Big },
order: PortfolioOrderItem,
marketSymbolMap: { [date: string]: { [symbol: string]: Big } },
previousOrder: PortfolioOrderItem
) {
netPerformanceValuesPercentage[order.date] = order.unitPrice
.div(marketSymbolMap[previousOrder.date][previousOrder.symbol])
.minus(1);
}
private stakeHandling(
previousOrder: PortfolioOrderItem,
marketSymbolMap: { [date: string]: { [symbol: string]: Big } },
netPerformanceValuesPercentage: { [date: string]: Big },
order: PortfolioOrderItem
) { ) {
let previousUnitPrice = let previousUnitPrice =
previousOrder.type === 'STAKE' previousOrder.type === 'STAKE'
? marketSymbolMap[previousOrder.date][previousOrder.symbol] ? marketSymbolMap[previousOrder.date][previousOrder.symbol]
: previousOrder.unitPrice; : previousOrder.unitPrice;
netPerformanceValuesPercentage[order.date] = marketSymbolMap[ netPerformanceValuesPercentage[order.date] = marketSymbolMap[order.date][
order.date order.symbol
][order.symbol] ]
? marketSymbolMap[order.date][order.symbol] ? marketSymbolMap[order.date][order.symbol]
.div(previousUnitPrice) .div(previousUnitPrice)
.minus(1) .minus(1)
: new Big(0); : new Big(0);
} else if (previousOrder.unitPrice.toNumber()) { }
netPerformanceValuesPercentage[order.date] = new Big(-1);
} else if ( private ispreviousOrderStakeAndHasInformation(
previousOrder: PortfolioOrderItem,
marketSymbolMap: { [date: string]: { [symbol: string]: Big } }
) {
return (
previousOrder.type === 'STAKE' && previousOrder.type === 'STAKE' &&
marketSymbolMap[previousOrder.date] && marketSymbolMap[previousOrder.date] &&
marketSymbolMap[previousOrder.date][previousOrder.symbol]?.toNumber() marketSymbolMap[previousOrder.date][previousOrder.symbol]?.toNumber()
) { );
netPerformanceValuesPercentage[order.date] = order.unitPrice
.div(marketSymbolMap[previousOrder.date][previousOrder.symbol])
.minus(1);
} else {
netPerformanceValuesPercentage[order.date] = new Big(0);
}
} }
private needsStakeHandling(
order: PortfolioOrderItem,
marketSymbolMap: { [date: string]: { [symbol: string]: Big } },
previousOrder: PortfolioOrderItem
) {
return (
order.type === 'STAKE' &&
marketSymbolMap[order.date] &&
((marketSymbolMap[previousOrder.date][previousOrder.symbol]?.toNumber() &&
previousOrder.type === 'STAKE') ||
(previousOrder.type !== 'STAKE' && previousOrder.unitPrice.toNumber()))
);
} }
private handleLoggingOfInvestmentMetrics( private handleLoggingOfInvestmentMetrics(

Loading…
Cancel
Save