Skip to main content

efin efin is a comprehensive Python library for financial analysis, valuation, and forecasting. It integrates data retrieval from Yahoo Finance with multiple valuation methods, risk metrics, portfolio analysis, forecasting techniques, caching, visualization, and a command-line interface (CLI). This library is ideal for investors, financial analysts, and researchers looking to quickly prototype and test financial models.

Features Valuation Models Discounted Cash Flow (DCF) Valuation: Calculates the intrinsic value of a stock based on user-supplied discount rate (WACC) and growth rate, using real free cash flow (FCF) data from Yahoo Finance.

Real FCF Retrieval: Retrieves FCF from the cash flow statement (using "Free Cash Flow" if available, or computes it from operating cash flow and CAPEX).

Dividend Discount Model (DDM): Estimates a stock's value based on expected dividend growth.

Comparable Company Analysis: Compares valuation multiples (e.g., trailing P/E) of a target company against its peers.

Residual Income Model (RIM): Estimates intrinsic value by discounting forecast residual income (EPS minus cost-of-equity on book value) over a specified period.

Forecasting Unified Forecast Function: Uses a simple linear regression model to forecast future stock prices based on historical adjusted close data.

Grid Search Auto ARIMA Forecast: Implements an automatic grid search over ARIMA parameters (p, d, q) using statsmodels to select the best ARIMA model based on AIC and forecast future prices.

Risk Metrics Volatility Calculation: Computes the standard deviation of daily returns.

Sharpe Ratio: Calculates the risk-adjusted return of a stock by comparing excess returns to volatility.

Portfolio Analysis Historical Data Aggregation: Downloads and extracts adjusted close prices for one or more tickers.

Basic Portfolio Optimization: Provides a simple, equal-weighted portfolio allocation (a placeholder for more advanced methods).

Data Caching Efficient Data Retrieval: Uses caching (via requests_cache) to store and retrieve financial data, reducing API calls and speeding up repeated analyses.

Visualization Plotting Functions: Generate visualizations to compare historical data with forecasted trends.

Command-Line Interface (CLI) Interactive CLI: Run valuations and forecasts from the terminal. The CLI supports multiple forecasting methods:

Linear Forecast: Uses the unified forecast function.

Grid Search ARIMA Forecast: Uses the auto ARIMA grid search function.

Installation:

pip install efin

Dependencies:

The library requires:

Python 3.6+:

yfinance statsmodels click requests_cache matplotlib numpy pandas scikit-learn

Usage Examples

Valuation

Discounted Cash Flow (DCF) Valuation

import efin

Calculate DCF for AAPL over a 5-year period with a 10% discount rate and 5% growth rate.

dcf_result = efin.dcf("AAPL", years=5, discount_rate=0.10, growth_rate=0.05, terminal_growth_rate=0.02) print("Total DCF Value:", dcf_result["total_dcf_value"])

Dividend Discount Model (DDM)

import efin

Estimate the stock price of KO using a 3% dividend growth rate and a 10% discount rate.

ddm_price = efin.dividend_discount_model("KO", growth_rate=0.03, discount_rate=0.1) print("DDM Price for KO:", ddm_price)

Comparable Company Analysis

import efin

Compare AAPL against MSFT and GOOGL using the trailing P/E multiple.

result = efin.comparable_company_analysis("AAPL", ["MSFT", "GOOGL"], multiple="trailingPE") print(result)

Residual Income Model (RIM)

import efin

Estimate intrinsic value for AAPL using a 10% cost of equity, 5% growth rate, over 5 periods.

rim_value = efin.residual_income_model("AAPL", cost_of_equity=0.10, growth_rate=0.05, forecast_period=5) print("Residual Income Value:", rim_value)

Forecasting Unified Forecast (Linear Regression)

import efin

Forecast AAPL prices for the next 30 days using a linear regression approach.

forecast_df = efin.forecast("AAPL", forecast_period=30, start_date="2010-01-01") print(forecast_df)

Auto ARIMA Grid Forecast

import efin

Forecast AAPL prices for the next 5 days using a grid search over ARIMA parameters.

forecast_df, best_order, best_aic = efin.auto_arima_grid_forecast("AAPL", forecast_period=5, start_date="2010-01-01") print("Best ARIMA order:", best_order, "with AIC:", best_aic) print(forecast_df)

Risk Metrics

import efin

Calculate the volatility and Sharpe ratio for AAPL.

volatility = efin.calculate_volatility("AAPL", start_date="2020-01-01") sharpe = efin.sharpe_ratio("AAPL", risk_free_rate=0.01, start_date="2020-01-01") print("Volatility:", volatility) print("Sharpe Ratio:", sharpe) Portfolio Analysis python Copy import efin

Download adjusted close prices for AAPL and MSFT.

prices = efin.download_adj_close(["AAPL", "MSFT"], start_date="2020-01-01") print(prices.head())

Compute a basic equal-weighted portfolio allocation.

returns = prices.pct_change().dropna() weights = efin.markowitz_portfolio(returns) print("Portfolio Weights:", weights) Data Caching python Copy import efin

Initialize caching for 1 hour to speed up repeated data retrieval.

efin.initialize_cache(expire_after=3600)

Visualization

import efin from efin.visualization import plot_forecast import pandas as pd import numpy as np

Generate sample historical data

dates = pd.date_range("2020-01-01", periods=50) history = pd.Series(np.random.randn(50).cumsum(), index=dates)

Generate sample forecast data for 10 days

forecast_dates = pd.date_range("2020-02-20", periods=10) forecast_values = pd.Series(np.random.randn(10).cumsum(), index=forecast_dates)

plot_forecast(history, forecast_values, title="Historical vs Forecast")

Command-Line Interface (CLI) From the terminal, run:

Calculate DCF valuation for AAPL over 5 years.

python -m efin.cli dcf AAPL --years 5 --discount_rate 0.10 --growth_rate 0.05 --terminal_growth_rate 0.02

Forecast stock prices for AAPL using linear regression (default).

python -m efin.cli forecast AAPL --model linear --period 30

Forecast stock prices for AAPL using grid search ARIMA.

python -m efin.cli forecast AAPL --model grid --period 5

Contributing Contributions are welcome! If you have suggestions, bug reports, or improvements, please open an issue or submit a pull request on the GitHub repository:https://github.com/ebeirne/efin

License This project is licensed under the MIT License. See the LICENSE file for details.

Contact For questions or feedback, please contact ethan.g.beirne@gmail.com

Release files for efin 2.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for efin 2.4.0
File Size Uploaded
efin-2.4.0.tar.gz 16.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for efin 2.4.0
File Interpreter ABI Platform
efin-2.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 30.6 kB

Release files / efin-2.4.0.tar.gz

Download URL efin-2.4.0.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
5de0589ac2ba341dd36896eb0ec47a728f8f63a0f7fdd9d478a28a9d9c08defc
BLAKE2b-256 checksum
How to use checksums
0db8aa11648aa896237a2215ec883107014529718b24e19ebd54723eb2f97b6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.6

Release files / efin-2.4.0-py3-none-any.whl

Download URL efin-2.4.0-py3-none-any.whl
Size 14.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
03bc7099216495e54fe48c701d75f9894003b98e0bfa1e8d0c8d834236362b70
BLAKE2b-256 checksum
How to use checksums
d73fcb73481f71150b6debe5ca30e25c35835b94af9261b7ec8edf8cfce30f7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.6

Release history Release notifications | RSS feed

This release

2.4.0 This release

2 release files

1.5.0

2 release files

1.4.0

2 release files

1.1.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page