Skip to main content

MFDRO

PyPI Python Tests Documentation License: MIT

MFDRO estimates reproducible, point-in-time disagreement between multivariate return distributions observed at multiple frequencies. It constructs empirical measures, places them on comparable scales, estimates a Wasserstein center, and returns a non-negative squared dispersion rho together with a complete audit trail.

Status: alpha research software. The numerical core is tested, but the public API is not yet frozen. Pin an exact version when preserving a research environment.

Why MFDRO

  • Two or more user-configurable frequencies; three is only the default.
  • Free-support or projected-quantile barycenter construction.
  • Sliced or exact discrete transport dispersion where compatible.
  • Strict point-in-time rolling windows, memberships, and optional calendars.
  • Preflight diagnostics before expensive numerical work.
  • Deterministic seeds, versioned configuration JSON, and portable result bundles with checksums.
  • Typed public API, stable empty schemas, analytical tests, and a 95% branch coverage gate.

MFDRO does not acquire production data, infer investable universes, calibrate an ambiguity radius, optimize portfolios, or simulate trades. It is a focused signal component designed to work with whichever data, optimizer, and backtesting system a research project chooses.

Installation

Install the released package from PyPI:

python -m pip install mfdro

For a reproducible environment, pin the release:

python -m pip install "mfdro==0.2.0"

Clone the repository only when working with the bundled notebooks or source:

git clone https://github.com/jeyllani/mfdro.git
cd mfdro
python -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[notebooks]"

Quick start

import numpy as np
import pandas as pd

from mfdro import MultiFrequencySignal, SignalConfig

rng = np.random.default_rng(20250301)
dates = pd.bdate_range("2018-01-01", "2022-12-30")
returns = pd.DataFrame(
    rng.normal(0.0, 0.01, size=(len(dates), 6)),
    index=dates,
    columns=[f"asset_{index:02d}" for index in range(6)],
)

config = SignalConfig.projected(
    n_projections=100,
    n_quantiles=100,
    random_state=20250301,
)
engine = MultiFrequencySignal(config)

diagnostics = engine.validate_path_inputs(returns, lookback_months=36)
assert diagnostics.is_usable

path = engine.estimate_path(
    returns,
    lookback_months=36,
    on_insufficient="skip",
    seed_namespace="synthetic_example",
)

print(path.rho.tail())
print(path.audit[["date", "n_daily", "n_weekly", "n_monthly"]].tail())
print(path.skipped[["date", "reason"]].head())

config.write_json("artifacts/config.json")
path.save("artifacts/signal_path")

rho is a squared cross-frequency dispersion—not an expected return, trading direction, or automatically calibrated DRO radius. Any mapping into a portfolio policy is a separate point-in-time research decision.

More than three frequencies

from mfdro import FrequencySpec, SignalConfig

config = SignalConfig(
    frequency_specs=(
        FrequencySpec("daily", 1.0),
        FrequencySpec("weekly", 5.0, rule="W-FRI"),
        FrequencySpec("biweekly", 10.0, rule="2W-FRI"),
        FrequencySpec("monthly", 21.0, rule="ME"),
        FrequencySpec("quarterly", 63.0, rule="QE"),
    )
)

Horizons, resampling rules, boundary conventions, minimum observations, weights, and numerical settings all enter the configuration digest.

Documentation

The MkDocs site covers the data contract, configuration choices, output schemas, reproducibility, and backtesting integration. The notebook suite covers frequency construction, geometry, point-in-time controls, reproducible artifacts, and an optional Yahoo Finance case study.

Build the site locally:

python -m pip install -e ".[docs]"
python -m mkdocs serve

Then open http://127.0.0.1:8000.

Development

python -m pip install -e ".[test,docs,dev,notebooks]"
python -m pytest --cov=mfdro --cov-report=term-missing
python -m ruff check src tests examples
python -m ruff format --check src tests examples
python -m mypy src
python -m mkdocs build --strict
python -m build
python -m twine check dist/*

See CONTRIBUTING.md, SECURITY.md, and CHANGELOG.md before preparing a change or release.

Metadata

Release files for mfdro 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mfdro 0.2.0
File Size Uploaded
mfdro-0.2.0.tar.gz 81.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mfdro 0.2.0
File Interpreter ABI Platform
mfdro-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 111.2 kB

Release files / mfdro-0.2.0.tar.gz

Download URL mfdro-0.2.0.tar.gz
Size 81.7 kB
Tags Source
SHA-256 checksum
How to use checksums
fe27c1bb776d9da23a8aaf8a8918bbc874fb19b2356a9851eaf9821a80c58a85
BLAKE2b-256 checksum
How to use checksums
afd8db343f229384ac67ed15a26c50bb13a7bdcd187ffc706ca050e9cd38e387
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.

Transparency log

Release files / mfdro-0.2.0-py3-none-any.whl

Download URL mfdro-0.2.0-py3-none-any.whl
Size 29.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
00960f171d727c03ca26121aeee4c2a9b6ad7cae3b42bf555b7b7ae88450e98b
BLAKE2b-256 checksum
How to use checksums
684de609ef9eeb51e9dbf4147c67973f24903685179c3ff0f19f494b141b48d3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 19, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release 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