Find where your alpha breaks.

Lacuna checks statistical evidence, leakage, robustness, costs, and reproducibility before you trust a backtest. Completely open-source.

GitHub
Sharpe ratio · simulated
2.47→0.29
Expected±1σ, ±2σLive
Breaks below 2σ18 Dec 2023

Compatible with the
tools you already use

  • Polars
  • pandas
  • NumPy
  • Apache Arrow
  • any backtester

The evidence gap

A backtest can look convincing and still be wrong.

Apparent alpha can disappear under unseen data, realistic costs, and leakage-aware validation.

Where the edge wentSimulated · the strategy above
  1. Backtest

    In sample, 2018–2022

    2.47

  2. Look-ahead leakage

    Temporal validation

    −0.70

  3. Multiple testing

    Deflated Sharpe ratio

    −0.63

  4. Trading costs

    Execution realism

    −0.51

  5. Survivorship bias

    Survivorship controls

    −0.34

  6. Live

    Out of sample, 2023–

    0.29

How it works

Bring a signal.
Leave with evidence.

Lacuna turns your signal and prices into structured findings, uncertainty, and provenance you can inspect.

import lacuna as lc

study = lc.SignalStudy(

signal=signal,

prices=prices,

)

report = study.audit()

report.show()

One audit path

Your backtester stays in place.

01 · Input

Signal + prices

The research data you already have.

02 · Check

lc.audit()

Only supported checks run.

03 · Report

Findings + evidence

Inspect, export, and reproduce every result.

Structured findingsSource metricsInput provenance

Performance by architecture

Python outside.
Rust inside.

Write Python. Lacuna moves columnar data through Arrow and runs hot paths in Rust.

You write

Python API

Typed studies and audits

Data crosses

Arrow contract

Columnar and low-copy

Lacuna runs

Native analysis

Rust · Polars · SciPy

Every chart keeps its source data, method, and assumptions.

JSON · Markdown · HTML

Built in public

Make every backtest earn your trust.

Open source for quantitative researchers who want evidence, not another backtester.

Follow on GitHub