or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

data-retrieval.mddata-utilities.mdindex.mdpandas-extensions.mdperformance-analysis.mdportfolio-optimization.mdreturn-calculations.mdrisk-metrics.mdstatistical-analysis.md
tile.json

tessl/pypi-ffn

Financial functions for Python providing performance analysis, risk metrics, portfolio optimization, and data retrieval for quantitative finance

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
pypipkg:pypi/ffn@1.1.x

To install, run

npx @tessl/cli install tessl/pypi-ffn@1.1.0

index.mddocs/

FFN (Financial Functions for Python)

FFN is a comprehensive financial functions library for Python designed for quantitative finance professionals. It builds upon established data science libraries (Pandas, NumPy, SciPy) to offer utilities for performance measurement, evaluation, graphing, and common data transformations in financial analysis.

Package Information

  • Package Name: ffn
  • Package Type: Library
  • Language: Python
  • Installation: pip install ffn

Core Imports

import ffn

Common usage patterns:

# Import specific functions
from ffn import get, PerformanceStats, calc_perf_stats

# Data retrieval
import ffn.data as data

# Utils for formatting
from ffn.utils import fmtp, fmtn

Basic Usage

import ffn

# Download price data
prices = ffn.get('AAPL,MSFT,GOOGL', start='2020-01-01', end='2023-01-01')

# Calculate returns
returns = prices.to_returns().dropna()

# Performance analysis
perf = ffn.calc_perf_stats(prices['AAPL'])
print(perf.display())

# Portfolio optimization - equal risk contribution weights
weights = ffn.calc_erc_weights(returns)
print(weights)

# Risk metrics
sharpe = ffn.calc_sharpe(returns['AAPL'])
max_dd = ffn.calc_max_drawdown(prices['AAPL'])

print(f"AAPL Sharpe Ratio: {sharpe:.2f}")
print(f"AAPL Max Drawdown: {max_dd:.2%}")

Architecture

FFN extends pandas objects automatically on import, enabling method chaining for functional composition:

# Method chaining example
result = (prices
    .to_returns()
    .dropna()
    .calc_sharpe()
)

Key components:

  • PerformanceStats: Comprehensive performance analysis for single series
  • GroupStats: Comparative analysis for multiple series
  • Data Module: Financial data retrieval with Yahoo Finance integration
  • Pandas Extensions: All functions available as pandas methods for chaining

Capabilities

Performance Analysis

Comprehensive performance evaluation with detailed statistics, risk metrics, and visualization capabilities for single assets or portfolios.

class PerformanceStats:
    def __init__(self, prices, rf=0.0, annualization_factor=None): ...
    def display(self): ...
    def plot(self, freq='D', figsize=None, title=None, logy=False, **kwargs): ...

class GroupStats:
    def __init__(self, *prices): ...
    def display(self): ...
    def plot(self, freq='D', figsize=None, title=None, logy=False, **kwargs): ...

def calc_perf_stats(prices, risk_free_rate=0.0, annualization_factor=252): ...
def calc_stats(prices): ...

Performance Analysis

Return Calculations

Convert between prices and returns using various methods, including simple returns, log returns, and price indexing with rebasing capabilities.

def to_returns(prices): ...
def to_log_returns(prices): ...
def to_price_index(returns, start=100): ...
def rebase(prices, value=100): ...

Return Calculations

Risk Metrics

Calculate comprehensive risk measures including drawdowns, volatility-based ratios, and downside risk metrics for portfolio evaluation.

def calc_max_drawdown(prices): ...
def to_drawdown_series(prices): ...
def calc_sharpe(returns, rf=0.0, nperiods=None, annualize=True): ...
def calc_sortino_ratio(returns, rf=0.0, nperiods=None, annualize=True): ...
def calc_calmar_ratio(prices): ...
def to_ulcer_index(prices): ...

Risk Metrics

Portfolio Optimization

Modern portfolio theory implementations including mean-variance optimization, risk parity approaches, and weight constraint utilities.

def calc_mean_var_weights(returns, weight_bounds=(0.0, 1.0), rf=0.0, covar_method="ledoit-wolf", options=None): ...
def calc_erc_weights(returns, initial_weights=None, risk_weights=None, covar_method="ledoit-wolf", risk_parity_method="ccd", maximum_iterations=100, tolerance=1e-8): ...
def calc_inv_vol_weights(returns): ...
def limit_weights(weights, limit=0.1): ...

Portfolio Optimization

Data Retrieval

Financial data downloading with Yahoo Finance integration, CSV support, and flexible data provider architecture.

def get(tickers, provider=None, common_dates=True, forward_fill=False, clean_tickers=True, column_names=None, ticker_field_sep=":", mrefresh=False, existing=None, **kwargs): ...

def yf(ticker, field, start=None, end=None, mrefresh=False): ...
def csv(ticker, path="data.csv", field="", mrefresh=False, **kwargs): ...

Data Retrieval

Statistical Analysis

Advanced statistical tools including clustering algorithms, bootstrap resampling, and momentum calculations for quantitative research.

def calc_clusters(returns, n=None, plot=False): ...
def calc_ftca(returns, threshold=0.5): ...
def calc_prob_mom(returns, other_returns): ...
def resample_returns(returns, func, seed=0, num_trials=100): ...

Statistical Analysis

Data Utilities

Data processing utilities including frequency conversion, merging, winsorization, and date calculations for financial time series.

def merge(*series): ...
def to_monthly(series, method="ffill", how="end"): ...
def winsorize(x, axis=0, limits=0.01): ...
def year_frac(start, end): ...
def calc_mtd(daily_prices, monthly_prices): ...
def calc_ytd(daily_prices, yearly_prices): ...
def infer_freq(data): ...
def infer_nperiods(data, annualization_factor=None): ...

Data Utilities

Pandas Extensions

FFN automatically extends pandas Series and DataFrame objects with all financial analysis methods, enabling seamless method chaining and functional composition.

def extend_pandas(): ...

# All FFN functions become available as pandas methods:
Series.to_returns(): ...
Series.calc_sharpe(rf=0.0, nperiods=None, annualize=True): ...
Series.calc_perf_stats(rf=0.0, annualization_factor=252): ...
DataFrame.calc_erc_weights(): ...
DataFrame.plot_corr_heatmap(): ...
# ... and 35+ additional methods

Pandas Extensions

Types

# Core constant
TRADING_DAYS_PER_YEAR: int = 252

# Main classes (see Performance Analysis section for details)
class PerformanceStats: ...
class GroupStats: ...