Exclude sold positions from portfolio value

This commit is contained in:
Thigazhezhilan J 2026-04-07 09:51:52 +05:30
parent 652e5504c3
commit 8d1eaafebb
3 changed files with 23 additions and 6 deletions

View File

@ -211,10 +211,15 @@ def _normalize_enrich_groww_item(access_token: str, item: dict, normalizer) -> d
default=0.0, default=0.0,
) )
normalized["close_price"] = normalized["last_price"] normalized["close_price"] = normalized["last_price"]
normalized["holding_value"] = normalized.get("effective_quantity", 0) * normalized["last_price"] exposure_quantity = _first_number(
normalized.get("net_quantity"),
normalized.get("effective_quantity"),
default=0.0,
)
normalized["holding_value"] = max(exposure_quantity, 0.0) * normalized["last_price"]
normalized["display_pnl"] = _first_number( normalized["display_pnl"] = _first_number(
normalized.get("display_pnl"), normalized.get("display_pnl"),
normalized.get("effective_quantity", 0) exposure_quantity
* (normalized["last_price"] - normalized.get("average_price", 0)), * (normalized["last_price"] - normalized.get("average_price", 0)),
default=0.0, default=0.0,
) )

View File

@ -362,10 +362,22 @@ def normalize_holding(item: dict | None) -> dict:
def normalize_position(item: dict | None) -> dict: def normalize_position(item: dict | None) -> dict:
entry = normalize_holding(item) entry = normalize_holding(item)
quantity = abs(_first_float(entry.get("effective_quantity"), entry.get("quantity"), default=0.0)) signed_quantity = _first_float(
entry.get("net_quantity"),
entry.get("effective_quantity"),
entry.get("quantity"),
default=0.0,
)
quantity = abs(signed_quantity)
entry["settled_quantity"] = quantity entry["settled_quantity"] = quantity
entry["effective_quantity"] = quantity entry["effective_quantity"] = quantity
entry["quantity"] = quantity entry["quantity"] = quantity
entry["holding_value"] = quantity * _first_float(entry.get("last_price"), default=0.0) entry["net_quantity"] = signed_quantity
entry["display_pnl"] = _first_float(
entry.get("display_pnl"),
default=signed_quantity
* (_first_float(entry.get("last_price"), default=0.0) - _first_float(entry.get("average_price"), default=0.0)),
)
entry["holding_value"] = max(signed_quantity, 0.0) * _first_float(entry.get("last_price"), default=0.0)
entry["product"] = _first_text(entry.get("product"), entry.get("product_type"), default="CNC").upper() entry["product"] = _first_text(entry.get("product"), entry.get("product_type"), default="CNC").upper()
return entry return entry

View File

@ -310,7 +310,7 @@ def normalize_position(item: dict | None) -> dict:
quantity = abs(signed_quantity) quantity = abs(signed_quantity)
average_price = position_average_price(entry) average_price = position_average_price(entry)
last_price = position_last_price(entry) last_price = position_last_price(entry)
pnl = _first_float(entry.get("pnl"), default=quantity * (last_price - average_price)) pnl = _first_float(entry.get("pnl"), default=signed_quantity * (last_price - average_price))
entry["settled_quantity"] = quantity entry["settled_quantity"] = quantity
entry["t1_quantity"] = 0.0 entry["t1_quantity"] = 0.0
entry["effective_quantity"] = quantity entry["effective_quantity"] = quantity
@ -320,7 +320,7 @@ def normalize_position(item: dict | None) -> dict:
entry["last_price"] = last_price entry["last_price"] = last_price
entry["close_price"] = last_price entry["close_price"] = last_price
entry["display_pnl"] = pnl entry["display_pnl"] = pnl
entry["holding_value"] = quantity * last_price entry["holding_value"] = max(signed_quantity, 0.0) * last_price
return entry return entry