Pure-Python (Numba-accelerated) machine learning, econometrics and statistical tools for financial analysis and backtesting
Project description
Fynance
Pure-Python package (Numba-accelerated kernels) providing machine learning, econometric and statistical tools for financial analysis and backtesting of trading strategies.
Installation
pip install fynance
From source:
git clone https://github.com/ArthurBernard/Fynance.git
cd Fynance
pip install -e ".[dev]"
The build is pure-Python — there is no compile step (numerical kernels are
Numba @njit, JIT-compiled on first call).
Architecture
A complete, layered ML/DL backtesting tool — data → features → signal →
portfolio → backtest → metrics — composed through typing.Protocol seams.
numpy is the lingua franca; PyTorch is confined to fynance.models. Each piece
is usable standalone; fynance.strategy.Strategy is an optional orchestrator.
2.0 is a breaking release. See
doc/MIGRATION-2.0.mdfor the import-path map (e.g.fynance.algorithms→fynance.portfolio, performance metrics →fynance.metrics).
Subpackages
Core fynance.core — PriceSeries value object (thin, numpy-backed) and the
pipeline protocols (DataSource, FeatureTransform, SignalModel, Allocator,
CostModel, Metric); executable conformance/causality checks (check_conforms,
assert_causal) and duck-typed pandas/polars seams (from_pandas/to_pandas).
Data fynance.data — file adapters (load for CSV/Parquet → PriceSeries),
alignment/resampling, no-lookahead temporal splits (train_test_split,
walk_forward, combinatorial-purged combinatorial_purged_cv) and vendor-agnostic
intraday session utilities (session_mask/session_id/split_sessions).
Features fynance.features — technical indicators (Bollinger, RSI, MACD, ROC,
realized volatility, rolling skew/kurtosis/autocorr, …), OHLCV indicators (ATR,
ADX, Williams %R, OBV, VWAP), a causal GARCH(1,1) conditional-volatility feature,
momentums (SMA, EMA, WMA) and adaptive windows, NaN-aware cross-sectional
operators (cs_rank/cs_zscore/cs_neutralize, …), pairwise rolling stats
(roll_corr/roll_beta, cross_corr), fractional differentiation (fracdiff),
AFML labeling (triple_barrier, meta_labels, uniqueness weights), scaling
(incl. rolling rank), statistics, feature engineering (multi-resolution, Granger
causality) and market-regime detection.
Metrics fynance.metrics — performance/evaluation metrics (Sharpe, Sortino,
Calmar, drawdown, …) and a one-call summary; tail risk (VaR/CVaR/CDaR,
tail dependence), benchmark-relative metrics (alpha, beta, tracking error,
information ratio, capture), factor evaluation (quantile returns, rolling IC,
IC decay), and turnover/exposure and per-trade analytics.
Signal fynance.signal — prediction → position mappers (sign, threshold,
rank, vol-targeting) and a model+mapper pipeline.
Portfolio fynance.portfolio — allocation (ERC, HRP, IVP, MDP, MVP, plus
risk-budgeting RBP) with an opt-in cov= seam over conditioned covariance
estimators (Ledoit-Wolf, EWMA, factor, Marchenko-Pastur denoising); risk
attribution, an exposure-constraints overlay (project_weights),
rebalancing policies (calendar/band/turnover-cap, lot discretization) and
sizing (fractional Kelly, single-series and book-level volatility targeting,
transaction costs).
Backtest fynance.backtest — vectorized engine (backtest: positions +
returns/prices + cost → BacktestResult), cost models (ProportionalCost, the
non-linear MarketImpactCost, per-bar HoldingCost and CompositeCost stacking)
and capacity analysis (capacity_curve, breakeven_fee).
Plot fynance.plot — composable matplotlib figures and one-call tearsheet
and factor_tearsheet reports.
Models fynance.models — econometric models (MA, ARMA, ARMA-GARCH, plus
GJR/EGARCH kernels) and PyTorch nets (MLP, RNN, GRU, LSTM, MultiHeadAttention,
TCN, Transformer), a direction+magnitude stacking ensemble, RegimeMoE
(regime-conditioned mixture-of-experts), objective-aligned training with
cross-asset pretraining, distributional QuantileModel, uncertainty wrappers
(DeepEnsemble, MCDropout), causal conformal intervals, purged walk-forward
hyperparameter search, differentiable losses (Sharpe, Sortino, Calmar, Omega,
directional, hybrid, pinball), and robust-training utilities.
Estimator fynance.estimator — volatility-model MLE: fit_volatility fits
GARCH / GJR-GARCH / EGARCH with Gaussian or Student-t innovations, returning a
VolatilityResult (AIC/BIC, conditional vol, forecast, simulate).
Strategy fynance.strategy — optional orchestrator composing the maillons
end-to-end, with single-run and walk-forward evaluation.
Research fynance.research — data-agnostic experiment harness: Experiment
(serializable run record), run_experiment (seeded, cost-aware, walk-forward),
write_report (portable markdown + tearsheet PNG + notebook), synthetic data
generators (gbm, regime_switching) and overfitting guards (permutation and
block bootstrap, deflated Sharpe, PBO/CSCV, walk-forward MDA feature importance).
Results are written only to a caller-provided output_dir — fynance never stores
them itself.
Quick start
import numpy as np
import fynance as fy
# 1. Data — load a CSV/Parquet file, or build a PriceSeries directly
prices = fy.PriceSeries(100 * np.cumprod(1 + np.random.randn(750) * 0.01))
# 2. Compose a strategy: momentum feature -> position -> backtest with costs
strat = fy.Strategy(
features=lambda p: np.sign(np.diff(p, prepend=p[0])),
signal=lambda x: x,
cost=fy.ProportionalCost(fee=0.0005),
)
result = strat.run(prices)
# 3. Evaluate and report
print(result.summary()) # Sharpe, Sortino, Calmar, max drawdown, ...
fig = fy.tearsheet(result) # one-call performance report
See Notebooks/quickstart_v2.ipynb for the full
runnable tour (data, features, walk-forward, reporting). An optional Streamlit
playground ships under apps/playground/
(pip install -e ".[ui]" && streamlit run apps/playground/app.py).
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fynance-2.13.1.tar.gz.
File metadata
- Download URL: fynance-2.13.1.tar.gz
- Upload date:
- Size: 426.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63aefa56d66a46c67422ed01eb8702749c0db2dbe92a5464b4516a7d178c4ad1
|
|
| MD5 |
8ac4b4a60c1da715d2199fe388dfc9e1
|
|
| BLAKE2b-256 |
c0425e11b17513e5739f88863991b2e311409ad831beea5fd120c71a84203553
|
Provenance
The following attestation bundles were made for fynance-2.13.1.tar.gz:
Publisher:
release.yml on ArthurBernard/Fynance
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fynance-2.13.1.tar.gz -
Subject digest:
63aefa56d66a46c67422ed01eb8702749c0db2dbe92a5464b4516a7d178c4ad1 - Sigstore transparency entry: 2084915472
- Sigstore integration time:
-
Permalink:
ArthurBernard/Fynance@1ae9d0352bd3dee6a14c363e199787d1895ec985 -
Branch / Tag:
refs/tags/v2.13.1 - Owner: https://github.com/ArthurBernard
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1ae9d0352bd3dee6a14c363e199787d1895ec985 -
Trigger Event:
push
-
Statement type:
File details
Details for the file fynance-2.13.1-py3-none-any.whl.
File metadata
- Download URL: fynance-2.13.1-py3-none-any.whl
- Upload date:
- Size: 541.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
55af7eed527d05fdddbd3948b9785aeacc1027a4861fc8805522aa93e377bd33
|
|
| MD5 |
9b097e2beea67f91ea2d21fc2019d857
|
|
| BLAKE2b-256 |
0a65212695039fada2e7a1bcf0e233e310ceb018c0cc558c54c21d8c2002525e
|
Provenance
The following attestation bundles were made for fynance-2.13.1-py3-none-any.whl:
Publisher:
release.yml on ArthurBernard/Fynance
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
fynance-2.13.1-py3-none-any.whl -
Subject digest:
55af7eed527d05fdddbd3948b9785aeacc1027a4861fc8805522aa93e377bd33 - Sigstore transparency entry: 2084915488
- Sigstore integration time:
-
Permalink:
ArthurBernard/Fynance@1ae9d0352bd3dee6a14c363e199787d1895ec985 -
Branch / Tag:
refs/tags/v2.13.1 - Owner: https://github.com/ArthurBernard
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1ae9d0352bd3dee6a14c363e199787d1895ec985 -
Trigger Event:
push
-
Statement type: