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,
)
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.get("display_pnl"),
normalized.get("effective_quantity", 0)
exposure_quantity
* (normalized["last_price"] - normalized.get("average_price", 0)),
default=0.0,
)

View File

@ -362,10 +362,22 @@ def normalize_holding(item: dict | None) -> dict:
def normalize_position(item: dict | None) -> dict:
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["effective_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()
return entry

View File

@ -310,7 +310,7 @@ def normalize_position(item: dict | None) -> dict:
quantity = abs(signed_quantity)
average_price = position_average_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["t1_quantity"] = 0.0
entry["effective_quantity"] = quantity
@ -320,7 +320,7 @@ def normalize_position(item: dict | None) -> dict:
entry["last_price"] = last_price
entry["close_price"] = last_price
entry["display_pnl"] = pnl
entry["holding_value"] = quantity * last_price
entry["holding_value"] = max(signed_quantity, 0.0) * last_price
return entry