Skip to main content

Synthetic alternative-history generation for backtest overfitting detection

Project description

sablier-flow

sablier-flow

Stop shipping overfit backtests.
Run your strategy on N alternative versions of history that share your data's statistical fingerprint.

PyPI Python versions License Docs


What it is

sablier-flow is a Python SDK that learns the joint dynamics of your market data — cross-asset correlations, vol clustering, regime structure — and generates synthetic alternative histories that share those statistics but produce different specific paths.

Run your existing backtest on N alternative versions of the same data and turn a single P&L number into a distribution. If your strategy only works on the one history that happened, that's overfit — now measurable.

Install

pip install sablier-flow

Sign up at sablier.ai for an API key (free starter credits cover the entire getting-started notebook).

Quickstart

import sablier_flow as sf
import numpy as np

# 1. Auth (one-time device flow; sets ~/.sablier/credentials)
sf.login()

# 2. Your backtest. Takes a price DataFrame, returns dict[str, float].
def my_backtest(prices):
    rets = prices['SPY'].pct_change().dropna()
    return {'sharpe': float(rets.mean() / rets.std() * np.sqrt(252))} if rets.std() > 0 else {'sharpe': 0.0}

# 3. Load data — bundled demo or your own DataFrame.
df = sf.demo_data()                          # SPY/QQQ/IWM/TLT + 3 macro features, 2010-2023
backtest_window = df.iloc[-252:]             # the slice you'll evaluate

# 4. Train + generate synthetic alternative versions of the backtest window.
fit   = sf.fit(df, features=list(df.columns), data_types=df.attrs['data_types'], horizon=252)
paths = sf.generate(fit.model_id, n_paths=200, like=backtest_window)

# 5. Run your backtest on each synth path and score robustness.
real_result   = my_backtest(backtest_window)
synth_results = [my_backtest(p) for p in paths.as_dataframes()]
report = sf.robustness(real_result, synth_results, primary_metric='sharpe')

print(report.summary())

Examples

Live empirical demos with executed outputs baked in. Preview links go to the rendered notebooks on the docs site (always works); source links go to the raw .ipynb on GitHub (clone, download, or — when GitHub's notebook viewer is operating — render inline). Why two links?

Notebook Preview Source What it proves
Backtest Robustness docs.sablier.ai .ipynb At the 0.7 overfit_score threshold: flags 29 of 30 selection-biased lucky strategies (top 30 of a 500-strategy pure-noise pool; lucky family min = 0.670, max = 0.875) vs 0 of 12 false positives on a designed honest family (max = 0.690)
TSTR Predictive Rank docs.sablier.ai .ipynb Spearman ρ = +0.7774, 95% bootstrap CI [+0.55, +0.89], p = 7.8e-06, n = 24 — synth ranks predict real OOS ranks
Memorization Audit docs.sablier.ai .ipynb NN-distance ratio R = 0.9288 vs replay-floor R = 0.0161 — 57.7× separation, synth is genuinely new
Getting Started docs.sablier.ai .ipynb End-to-end SDK tour: login → fit → validate → generate → robustness

Why use it

  • One call trains a model that handles cross-asset dependence, regime structure, and tail behavior — no hand-rolled copulas, no block-length tuning
  • Per-strategy overfit detection that classical CSCV-PBO can't surface (selection bias from parameter searches)
  • Train on synth, deploy on realsf.predictive_rank_score proves the ranking carries forward, so you don't have to burn real OOS data on strategy selection
  • Engine-agnostic: works with pandas, backtrader, vectorbt; LEAN CSV export adapter included

Docs + related projects

  • docs.sablier.ai — quickstart, examples, full SDK reference
  • Quickstartpip install to first verdict in 5 minutes
  • FinBench — public leaderboard for multivariate financial time-series generation; sablier-flow is ranked there alongside TimeGAN / KoVAE / Diffusion-TS / TimeVAE
  • finval — the validation suite that scores FinBench submissions and powers sf.validate(...) under the hood

License

Apache 2.0 (code) · CC BY 4.0 (docs)

Project details


Download files

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

Source Distribution

sablier_flow-1.1.1.tar.gz (1.0 MB view details)

Uploaded Source

Built Distribution

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

sablier_flow-1.1.1-py3-none-any.whl (1.0 MB view details)

Uploaded Python 3

File details

Details for the file sablier_flow-1.1.1.tar.gz.

File metadata

  • Download URL: sablier_flow-1.1.1.tar.gz
  • Upload date:
  • Size: 1.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sablier_flow-1.1.1.tar.gz
Algorithm Hash digest
SHA256 0474d033b1fb5b0ebe35357420f76698c7f980041313d58e94dbef8653c45de7
MD5 7d37e62b7a179d314f64f500a373fe35
BLAKE2b-256 68835b55717d57c49ea97359fb6e1880b5f836163e61a7d59f93c2f2872e1950

See more details on using hashes here.

Provenance

The following attestation bundles were made for sablier_flow-1.1.1.tar.gz:

Publisher: release.yml on sablier-ai/sablier-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sablier_flow-1.1.1-py3-none-any.whl.

File metadata

  • Download URL: sablier_flow-1.1.1-py3-none-any.whl
  • Upload date:
  • Size: 1.0 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sablier_flow-1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 af00a9a06971c6b1dbd7ce8ae8355e505aa2bae8d071f7b2c88a1982cf3c80f6
MD5 862f45ccacaa1386308880843b72054d
BLAKE2b-256 31817bef95e6ede0cc6affc26a481f50eced7ea92d74c10123638f83b48b23bd

See more details on using hashes here.

Provenance

The following attestation bundles were made for sablier_flow-1.1.1-py3-none-any.whl:

Publisher: release.yml on sablier-ai/sablier-flow

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page