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. 97
      apps/api/src/app/portfolio/portfolio-calculator.ts

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

@ -1609,42 +1609,89 @@ 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][
previousOrder.symbol
]?.toNumber() &&
previousOrder.type === 'STAKE') ||
(previousOrder.type !== 'STAKE' &&
previousOrder.unitPrice.toNumber()))
) { ) {
let previousUnitPrice = this.stakeHandling(
previousOrder.type === 'STAKE' previousOrder,
? marketSymbolMap[previousOrder.date][previousOrder.symbol] marketSymbolMap,
: previousOrder.unitPrice; netPerformanceValuesPercentage,
netPerformanceValuesPercentage[order.date] = marketSymbolMap[ order
order.date );
][order.symbol]
? marketSymbolMap[order.date][order.symbol]
.div(previousUnitPrice)
.minus(1)
: new Big(0);
} else if (previousOrder.unitPrice.toNumber()) { } else if (previousOrder.unitPrice.toNumber()) {
netPerformanceValuesPercentage[order.date] = new Big(-1); netPerformanceValuesPercentage[order.date] = new Big(-1);
} else if ( } else if (
previousOrder.type === 'STAKE' && this.ispreviousOrderStakeAndHasInformation(
marketSymbolMap[previousOrder.date] && previousOrder,
marketSymbolMap[previousOrder.date][previousOrder.symbol]?.toNumber() marketSymbolMap
)
) { ) {
netPerformanceValuesPercentage[order.date] = order.unitPrice this.handleIfPreviousOrderIsStake(
.div(marketSymbolMap[previousOrder.date][previousOrder.symbol]) netPerformanceValuesPercentage,
.minus(1); order,
marketSymbolMap,
previousOrder
);
} else { } else {
netPerformanceValuesPercentage[order.date] = new Big(0); 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 =
previousOrder.type === 'STAKE'
? marketSymbolMap[previousOrder.date][previousOrder.symbol]
: previousOrder.unitPrice;
netPerformanceValuesPercentage[order.date] = marketSymbolMap[order.date][
order.symbol
]
? marketSymbolMap[order.date][order.symbol]
.div(previousUnitPrice)
.minus(1)
: new Big(0);
}
private ispreviousOrderStakeAndHasInformation(
previousOrder: PortfolioOrderItem,
marketSymbolMap: { [date: string]: { [symbol: string]: Big } }
) {
return (
previousOrder.type === 'STAKE' &&
marketSymbolMap[previousOrder.date] &&
marketSymbolMap[previousOrder.date][previousOrder.symbol]?.toNumber()
);
}
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(
totalInvestment: Big, totalInvestment: Big,
order: PortfolioOrderItem, order: PortfolioOrderItem,

Loading…
Cancel
Save