v0.7.1 - Portfolio Purchase Date
New Features
Portfolio purchase_date Support
Add purchase date tracking to portfolio holdings for more accurate return calculations.
import borsapy as bp
from datetime import date
portfolio = bp.Portfolio()
# Add holdings with purchase date
portfolio.add("THYAO", shares=100, cost=280.0, purchase_date="2024-01-15")
portfolio.add("GARAN", shares=200, cost=45.0, purchase_date=date(2024, 6, 1))
portfolio.add("ASELS", shares=50, cost=120.0) # Defaults to today
# Holdings DataFrame includes new columns
print(portfolio.holdings[['symbol', 'cost', 'purchase_date', 'holding_days']])
# symbol cost purchase_date holding_days
# 0 THYAO 280 2024-01-15 380
# 1 GARAN 45 2024-06-01 242
# 2 ASELS 120 2026-01-29 0
# Risk metrics now use holding-based dates
metrics = portfolio.risk_metrics(period="1y")Supported Date Formats:
- String:
"2024-01-15"(ISO format) - date:
date(2024, 1, 15) - datetime:
datetime(2024, 1, 15)(date part only) - None: Defaults to today
Technical Changes
portfolio.py:Holdingdataclass now includespurchase_date: date | Noneportfolio.py:add()method acceptspurchase_dateparameterportfolio.py:holdingsproperty includespurchase_dateandholding_dayscolumnsportfolio.py:history()filters data by each holding's purchase_dateportfolio.py:to_dict()andfrom_dict()handle purchase_date serializationtests/test_portfolio.py: 17 new tests for purchase_date feature