Fix live portfolio summary for sold positions
This commit is contained in:
parent
eb2e6b579a
commit
d10bb3dd78
@ -187,6 +187,14 @@ function getEffectiveQuantity(item: any) {
|
|||||||
return firstNumber(item?.effective_quantity, getSettledQuantity(item) + getT1Quantity(item));
|
return firstNumber(item?.effective_quantity, getSettledQuantity(item) + getT1Quantity(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getNetQuantity(item: any) {
|
||||||
|
const parsed = Number(item?.net_quantity);
|
||||||
|
if (Number.isFinite(parsed)) {
|
||||||
|
return parsed;
|
||||||
|
}
|
||||||
|
return getEffectiveQuantity(item);
|
||||||
|
}
|
||||||
|
|
||||||
function getAveragePrice(item: any) {
|
function getAveragePrice(item: any) {
|
||||||
return firstNumber(item?.average_price, item?.avg_price);
|
return firstNumber(item?.average_price, item?.avg_price);
|
||||||
}
|
}
|
||||||
@ -198,16 +206,20 @@ function getLastPrice(item: any) {
|
|||||||
function getDisplayPnl(item: any) {
|
function getDisplayPnl(item: any) {
|
||||||
return firstNumber(
|
return firstNumber(
|
||||||
item?.display_pnl,
|
item?.display_pnl,
|
||||||
getEffectiveQuantity(item) * (getLastPrice(item) - getAveragePrice(item)),
|
getNetQuantity(item) * (getLastPrice(item) - getAveragePrice(item)),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getHoldingValue(item: any) {
|
function getHoldingValue(item: any) {
|
||||||
|
const netQuantity = getNetQuantity(item);
|
||||||
|
if (Number.isFinite(Number(item?.net_quantity)) && netQuantity <= 0) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
const brokerValue = Number(item?.holding_value);
|
const brokerValue = Number(item?.holding_value);
|
||||||
if (Number.isFinite(brokerValue) && brokerValue >= 0) {
|
if (Number.isFinite(brokerValue) && brokerValue >= 0) {
|
||||||
return brokerValue;
|
return brokerValue;
|
||||||
}
|
}
|
||||||
return Math.abs(getEffectiveQuantity(item)) * Math.abs(getLastPrice(item));
|
return Math.max(netQuantity, 0) * Math.abs(getLastPrice(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPortfolioItemKey(item: any, idx: number) {
|
function getPortfolioItemKey(item: any, idx: number) {
|
||||||
@ -216,7 +228,9 @@ function getPortfolioItemKey(item: any, idx: number) {
|
|||||||
|
|
||||||
function renderPortfolioRows(items: any[]) {
|
function renderPortfolioRows(items: any[]) {
|
||||||
return items.map((item, idx) => {
|
return items.map((item, idx) => {
|
||||||
const qty = getEffectiveQuantity(item);
|
const qty = Number.isFinite(Number(item?.net_quantity))
|
||||||
|
? getNetQuantity(item)
|
||||||
|
: getEffectiveQuantity(item);
|
||||||
const settledQty = getSettledQuantity(item);
|
const settledQty = getSettledQuantity(item);
|
||||||
const t1Qty = getT1Quantity(item);
|
const t1Qty = getT1Quantity(item);
|
||||||
const avg = getAveragePrice(item);
|
const avg = getAveragePrice(item);
|
||||||
@ -730,7 +744,7 @@ export default function PortfolioSection() {
|
|||||||
[holdings],
|
[holdings],
|
||||||
);
|
);
|
||||||
const activePositionCount = useMemo(
|
const activePositionCount = useMemo(
|
||||||
() => positions.filter((item) => getEffectiveQuantity(item) !== 0).length,
|
() => positions.filter((item) => getNetQuantity(item) !== 0).length,
|
||||||
[positions],
|
[positions],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user