Skip to main content

finance calcs

Standard financial calculations

Build Status codecov License PyPI

Overview

finance-calcs provides composable Polars expression metrics plus a smaller set of explicitly eager statistical, preprocessing, post-trade, and native kernel helpers. It is designed for lazy execution where the algorithm permits it, namespace-style ergonomics, and direct interoperability with the rest of the finance-* stack.

The public API follows a few rules:

  • every expression metric accepts and returns pl.Expr
  • metrics are exposed once, with optional window= and period= controls rather than separate rolling, monthly, and annual variants
  • functions are also available through the .fcalcs namespace on both pl.Expr and pl.Series
  • examples use synthetic but realistic fixtures from finance-datagen

Return, risk, and tail expression metrics accept periodic returns rather than prices. Convert prices first with simple_returns or log_returns. These metrics treat floating-point NaN and Polars null values as missing. Compound returns treat missing observations as neutral, while statistical aggregations exclude them.

Materializing helpers are not available through .fcalcs: native ADX, SAR, and GARCH kernels accept numeric sequences and return NumPy arrays; GPD fits and several statistical helpers accept pl.Series; preprocessing and post-trade summaries accept concrete pl.DataFrame inputs.

Implemented coverage

Topic Functions
Returns and periods period_bucket, simple_returns, log_returns, cum_returns, cum_returns_final, returns, aggregate_returns, annualized_return, annualized_volatility, cagr
Risk and drawdown volatility, sharpe, sortino, calmar, downside_deviation, drawdown_series, max_drawdown, drawdown_details, value_at_risk, conditional_value_at_risk, expected_shortfall
Report metrics Best/worst returns, average wins/losses, gain-to-pain, recovery factor, Kelly criterion, and QuantStats-compatible naming aliases
Technical indicators Moving averages, Bollinger/Donchian channels, momentum oscillators, range volatility, and volume indicators
Alpha and quantiles Forward returns, conditional/horizon IC, IC decay, IC summaries, quantile assignment, signal normalization, quantile returns, turnover, and long/short spreads
Factor and benchmark metrics Alpha, beta, benchmark R-squared, up/down capture, batting average, tracking error, and information ratio
Distribution and tail risk Higher moments, Sharpe significance helpers, tail ratio, ulcer index, omega ratio, GPD VaR, and GPD CVaR
Portfolio and post-trade Exposure, concentration, active share, transaction costs/volume/attribution, slippage, turnover, round trips, MAE/MFE, and trade-quality metrics

See the Examples page for workflows with generated data and the API page for a complete grouped reference for every public function.

Quick start

Generate a deterministic daily equity path with finance-datagen, then compute return and risk metrics as Polars expressions.

import polars as pl
from finance_datagen import generate_prices

import finance_calcs as fc

prices = generate_prices(symbol="ACME", seed=7)

out = prices.with_columns(
    pl.col("price").fcalcs.simple_returns().alias("ret"),
).select(
    fc.returns(pl.col("ret")).alias("total_return"),
    pl.col("ret").fcalcs.annualized_return().alias("ann_return"),
    pl.col("ret").fcalcs.volatility().alias("ann_vol"),
    pl.col("ret").fcalcs.sharpe().alias("sharpe"),
    pl.col("ret").fcalcs.max_drawdown().alias("max_drawdown"),
)

Use finance-datagen.ohlc_from_close when calculations need OHLCV bars:

from finance_datagen import ohlc_from_close

bars = ohlc_from_close(prices["price"], symbol="ACME", seed=7)

features = bars.with_columns(
    pl.col("close").fcalcs.sma(20).alias("sma_20"),
    pl.col("close").fcalcs.rsi(14).alias("rsi_14"),
    fc.atr(pl.col("high"), pl.col("low"), pl.col("close")).alias("atr_14"),
    fc.obv(pl.col("close"), pl.col("volume")).alias("obv"),
)

Period and frequency slices

Use period= for calendar-style slices and keep window= for rolling row-count windows. A period can be a finance_enums.Frequency, any alias accepted by finance_enums.to_frequency(), any Polars dt.truncate() duration string, or a precomputed bucket expression.

import polars as pl
from finance_enums import Frequency

monthly = prices.with_columns(
    pl.col("price").fcalcs.simple_returns().alias("ret"),
).with_columns(
    fc.period_bucket(pl.col("timestamp"), Frequency.Month).alias("month"),
    pl.col("ret").fcalcs.returns(period="month", date=pl.col("timestamp")).alias("month_return"),
    pl.col("ret").fcalcs.sharpe(period="1q", date=pl.col("timestamp")).alias("quarter_sharpe"),
)

For fiscal periods, strategy regimes, or exchange-calendar grids built upstream, pass the bucket expression directly:

bucketed = prices.with_columns(
    pl.col("price").fcalcs.simple_returns().alias("ret"),
    pl.col("timestamp").dt.year().alias("fiscal_year"),
).with_columns(
    fc.returns(pl.col("ret"), period=pl.col("fiscal_year")).alias("fiscal_return"),
)

Stack integration

finance-calcs is intended to pair with:

  • finance-datagen for synthetic fixtures and test inputs
  • finance-dates for calendar-aware date handling upstream
  • finance-enums for shared enum-backed trading semantics upstream

That keeps calculations focused on typed expressions instead of schema cleanup, string parsing, or calendar repair.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

finance_calcs-0.2.1.tar.gz (53.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

finance_calcs-0.2.1-cp310-abi3-win_amd64.whl (145.8 kB view details)

Uploaded CPython 3.10+Windows x86-64

finance_calcs-0.2.1-cp310-abi3-manylinux_2_28_x86_64.whl (256.3 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

finance_calcs-0.2.1-cp310-abi3-macosx_11_0_arm64.whl (239.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

File details

Details for the file finance_calcs-0.2.1.tar.gz.

File metadata

  • Download URL: finance_calcs-0.2.1.tar.gz
  • Upload date:
  • Size: 53.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for finance_calcs-0.2.1.tar.gz
Algorithm Hash digest
SHA256 6eb684e5a212742c506a40bc9ac7282b49e4410d672f5532f2baf987d01ef0ae
MD5 8d078db6d230f7ead38bd2fc538a7a2d
BLAKE2b-256 1b7a70ac83cfd4bdfc6255a78799014b81c2ed73c6d1d2adafd0cb490a19e281

See more details on using hashes here.

File details

Details for the file finance_calcs-0.2.1-cp310-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for finance_calcs-0.2.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 2e3d33804f3952f14f51819cb0864706981c4a6cc4cd7607750123751bb3e9bd
MD5 11f5f266acf9114693ce65c880a5c0c6
BLAKE2b-256 773c7039d096adb8508dbd2b5e2e970d79af310dc9b3eb66342d312f33adef43

See more details on using hashes here.

File details

Details for the file finance_calcs-0.2.1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for finance_calcs-0.2.1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c4131b77d7c5e89ee20ebb48bff8c6eb1f83d28eab6c2a232ec88359523138d9
MD5 b8a5085a12b4567f0ec56677e76ca8e6
BLAKE2b-256 bf4e8b152f56cd193214f3f02dd9e78b8fc179bf6178c8a13c69aeae5dfe766f

See more details on using hashes here.

File details

Details for the file finance_calcs-0.2.1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for finance_calcs-0.2.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1cb962fc87f1c93193e82207f2904ed1aa00b3b23d582528983a631b5f722125
MD5 5c57eeccb4e19674e440f5f0a619c57c
BLAKE2b-256 b8309ce6e582b171b3785328d05041eaab83825e94648255f2b0c265bfdb788c

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

4 files

This release

0.2.1 This release

4 files

0.2.0

4 files

0.1.1

4 files

0.1.0

4 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