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)
.minus(1);
} else if (
order.type === 'STAKE' &&
marketSymbolMap[order.date] &&
((marketSymbolMap[previousOrder.date][
previousOrder.symbol
]?.toNumber() &&
previousOrder.type === 'STAKE') ||
(previousOrder.type !== 'STAKE' &&
previousOrder.unitPrice.toNumber()))
this.needsStakeHandling(order, marketSymbolMap, previousOrder)
) {
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);
this.stakeHandling(
previousOrder,
marketSymbolMap,
netPerformanceValuesPercentage,
order
);
} else if (previousOrder.unitPrice.toNumber()) {
netPerformanceValuesPercentage[order.date] = new Big(-1);
} else if (
previousOrder.type === 'STAKE' &&
marketSymbolMap[previousOrder.date] &&
marketSymbolMap[previousOrder.date][previousOrder.symbol]?.toNumber()
this.ispreviousOrderStakeAndHasInformation(
previousOrder,
marketSymbolMap
)
) {
netPerformanceValuesPercentage[order.date] = order.unitPrice
.div(marketSymbolMap[previousOrder.date][previousOrder.symbol])
.minus(1);
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 =
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(
totalInvestment: Big,
order: PortfolioOrderItem,

Loading…
Cancel
Save