diff options
| author | Tyler <tyler@tylerhoang.xyz> | 2026-04-02 18:54:01 -0700 |
|---|---|---|
| committer | Tyler <tyler@tylerhoang.xyz> | 2026-04-02 18:54:01 -0700 |
| commit | ccfbce79a66b2d8aa136fddbed7c61c7436f2733 (patch) | |
| tree | ed1d0f883a904c1a677b013d8c6ed08bafc11d72 /services/data_service.py | |
| parent | ee9691828bc06334c58a58902615b1c0b654f39a (diff) | |
Improve DCF model accuracy
Diffstat (limited to 'services/data_service.py')
| -rw-r--r-- | services/data_service.py | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/services/data_service.py b/services/data_service.py index 67f2e7b..bfd1290 100644 --- a/services/data_service.py +++ b/services/data_service.py @@ -684,3 +684,27 @@ def get_free_cash_flow_series(ticker: str) -> pd.Series: return (op + capex).dropna() except KeyError: return pd.Series(dtype=float) + + +@st.cache_data(ttl=3600) +def get_free_cash_flow_ttm(ticker: str) -> float | None: + """Return trailing-twelve-month free cash flow from quarterly cash flow statements.""" + t = yf.Ticker(ticker.upper()) + cf_q = t.quarterly_cashflow + if cf_q is None or cf_q.empty: + return None + + if "Free Cash Flow" in cf_q.index: + vals = cf_q.loc["Free Cash Flow"].iloc[:4].dropna() + if len(vals) == 4: + return float(vals.sum()) + + try: + op = cf_q.loc["Operating Cash Flow"].iloc[:4].dropna() + capex = cf_q.loc["Capital Expenditure"].iloc[:4].dropna() + if len(op) == 4 and len(capex) == 4: + return float((op + capex).sum()) + except KeyError: + return None + + return None |
