Skip to main content

Portfolio research, end-to-end, with a Rust core.

Project description

Fundcloud

Portfolio research, end-to-end, with a Rust core.

PyPI Python License: MIT CI Coverage Docs Ruff uv

Fundcloud library overview

Fundcloud is a beginner-friendly, headless-for-advanced portfolio research framework. One install covers returns and risk analytics, drawdown analysis, portfolio optimisation, vectorised backtesting, technical indicators, purged cross-validation, multi-source market data loading, exploratory analysis, and HTML/PDF/Excel tear sheets — through a coherent .fc pandas surface for beginners and a full sklearn-compatible estimator API for advanced users. Matrix-heavy math lives in a Rust core via PyO3 and ships as a single abi3 wheel per platform.

Install

uv add fundcloud                  # core
uv add "fundcloud[data]"          # + all network data providers (yf, fmp, av, binance)
uv add "fundcloud[pf,ta,data]"    # + skfolio + TA-Lib + data sources
uv add "fundcloud[all]"           # everything
Extra Adds
pf skfolio — portfolio optimisation
ta TA-Lib — 170+ technical indicators
data-yf / data-fmp / data-av / data-bn individual data providers
data bundle of every data provider above
viz matplotlib + kaleido (static plot export)
reports WeasyPrint (PDF) + XlsxWriter (Excel)
all everything above

Exploratory data analysis (fundcloud.explore.{profile, compare, quickview}) ships in core — no extra needed.

Quickstart (60 seconds)

import pandas as pd
import fundcloud  # registers the .fc accessor on pandas

# Any returns Series gets instant analytics
returns = pd.Series([0.012, -0.005, 0.008, -0.010, 0.015], name="strategy")
returns.fc.sharpe(periods=252)           # annualised Sharpe
returns.fc.max_drawdown()
returns.fc.drawdown_series()

# Purged CV that plugs into sklearn out of the box
from fundcloud.validate import PurgedKFold
from sklearn.model_selection import cross_val_score

cv = PurgedKFold(n_splits=5, purge=3, embargo=1)
# cross_val_score(estimator, X, y, cv=cv)   # drop-in

The library ships DCA/Hold strategies, a simulator, skfolio-backed optimisers, native EDA, and HTML/PDF/Excel tear sheets out of the box. Prefer one composed figure over a full report? fundcloud.plots.summary(returns) returns a multi-panel plotly.graph_objects.Figure (cumulative, drawdown, rolling Sharpe, distribution, monthly heatmap) with Plotly theme support via fc.set_theme("dark") (re-exported at the top level for import fundcloud as fc); every builder also accepts multi-asset DataFrames so comparisons stay one line.

sklearn & skfolio interop

Every Fundcloud estimator, transformer, and CV splitter passes sklearn.utils.estimator_checks.check_estimator and round-trips through skfolio. Example:

from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from fundcloud.features import FeaturePipeline
from fundcloud.features.indicators import RSI, SMA
from fundcloud.optimize import MeanRisk, RiskMeasure
from fundcloud.validate import PurgedKFold

pipe = Pipeline([
    ("features", FeaturePipeline([("rsi", RSI(timeperiod=14)), ("sma", SMA(timeperiod=20))])),
    ("optim",    MeanRisk(risk_measure=RiskMeasure.CVAR)),
])
search = GridSearchCV(pipe, param_grid={"optim__min_weights": [0.0, 0.02, 0.05]},
                     cv=PurgedKFold(n_splits=5, purge=3))
search.fit(returns_panel)

Architecture

 ┌────────────────────────────────────────────────────────────────────┐
 │  End-user surfaces:  fluent accessor .fc   |   estimator API       │
 ├───────────────┬──────────────┬───────────────┬──────────────────────┤
 │   reports     │   explore    │    plots      │    datasets          │
 ├───────────────┴──────────────┴───────────────┴──────────────────────┤
 │                       metrics │ validate │ optimize                 │
 ├──────────────────────────┬──────────────────────────────────────────┤
 │      portfolio           │                    sim                   │
 ├──────────────────────────┼──────────────────────────────────────────┤
 │       strategies         │                features                  │
 ├──────────────────────────┴──────────────────────────────────────────┤
 │                              data                                   │
 │  Backends (YF, FMP, …, Parquet, DuckDB, Memory, CSV) ─ Catalog      │
 ├─────────────────────────────────────────────────────────────────────┤
 │                   kernels  (Rust, PyO3, abi3)                       │
 └─────────────────────────────────────────────────────────────────────┘

Python compatibility

Supported on Python 3.10, 3.11, 3.12, 3.13, 3.14. Wheels are built with PyO3's abi3-py310 feature, so one wheel per platform works across every supported version.

Acknowledgments

Fundcloud stands on the shoulders of excellent open-source work:

  • scikit-learn (BSD-3-Clause) — estimator, transformer, and CV-splitter contracts used throughout.
  • skfolio (BSD-3-Clause) — portfolio optimisation algorithms; Portfolio/Population objects. Install with uv add 'fundcloud[pf]'.
  • quantstats (Apache-2.0) — inspiration for our tear-sheet and pandas-accessor design.
  • vectorbt (Apache-2.0) and vectorbt.pro — inspiration for the vectorised simulation model.
  • TA-Lib / ta-lib-python (BSD-2-Clause) — all 170+ technical indicators in fundcloud.features.indicators.
  • PyO3, rust-numpy, maturin, uv — the build-and-ship story.

See NOTICE for the full attribution.

Contributing

Read CONTRIBUTING.md. TL;DR: uv sync, uv run pytest, cargo test --workspace, add a test, open a PR.

License

MIT.

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

fundcloud-0.6.0.tar.gz (307.3 kB view details)

Uploaded Source

Built Distributions

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

fundcloud-0.6.0-cp310-abi3-win_amd64.whl (633.8 kB view details)

Uploaded CPython 3.10+Windows x86-64

fundcloud-0.6.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (717.1 kB view details)

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

fundcloud-0.6.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (695.3 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

fundcloud-0.6.0-cp310-abi3-macosx_11_0_arm64.whl (668.9 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

fundcloud-0.6.0-cp310-abi3-macosx_10_12_x86_64.whl (687.2 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file fundcloud-0.6.0.tar.gz.

File metadata

  • Download URL: fundcloud-0.6.0.tar.gz
  • Upload date:
  • Size: 307.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fundcloud-0.6.0.tar.gz
Algorithm Hash digest
SHA256 3bd5c623b283fdf544a6033e1ec1c8a34b3adefc6a8cbc1728e4bc8c3ad2fe9c
MD5 ac53f1b161ca76010585cc1c36b653b6
BLAKE2b-256 1227d871f73cab2068d50f038f877b0ad945ba420db99fe9e1b018941a58153e

See more details on using hashes here.

File details

Details for the file fundcloud-0.6.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: fundcloud-0.6.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 633.8 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fundcloud-0.6.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 717c75b50095585584d4557bda7bf90cf34502141b9d8be2fb011ec97fb291e5
MD5 91ab8efb77c92753c544325256cce0db
BLAKE2b-256 5f610d97b47dab6dd12f41c3e8c1a3a92ec10ed00e6a0dacb3a50a49c1c774e2

See more details on using hashes here.

File details

Details for the file fundcloud-0.6.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: fundcloud-0.6.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 717.1 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fundcloud-0.6.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b1a66073b8185de117f91ad9448cac17b4e52c583a2648c1d3d77d085bd75b7f
MD5 9d3c42a4dbfb547906d4196e8c78a8a0
BLAKE2b-256 bd93a73b07cee5e757600790ac126cc9cbd38b6237b75ba6cd1164dca61f8b50

See more details on using hashes here.

File details

Details for the file fundcloud-0.6.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

  • Download URL: fundcloud-0.6.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 695.3 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fundcloud-0.6.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e6ae5d49f29fc5d12efd892497dd7aab06ea304072d35aa10b8ce8871ffde34e
MD5 09fd94cea52f9b54fac4d874cb4b47d0
BLAKE2b-256 dd97811325fe8406945ad47967ee2128b6137fb467ab1ab115245035d471852c

See more details on using hashes here.

File details

Details for the file fundcloud-0.6.0-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

  • Download URL: fundcloud-0.6.0-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 668.9 kB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fundcloud-0.6.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bcdc5fd4941b55cefa5361b0661fa256538c43bf671665702509ae94a53161e6
MD5 31f3db064781b83eb151d4ddb6ef3467
BLAKE2b-256 e0cf4d133dd801837a7b38ae070fd765299cdc5274b49c860c1e5a5ffa7df8a6

See more details on using hashes here.

File details

Details for the file fundcloud-0.6.0-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: fundcloud-0.6.0-cp310-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 687.2 kB
  • Tags: CPython 3.10+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fundcloud-0.6.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 66d586c519b177edb4942ddc950ba299c8d13a34c4925c11bf015225293b96a7
MD5 c4bc29278f68bedc671afbf01be114ac
BLAKE2b-256 cebf62dfc686caf2b330df122f5a91dbf5b17afeec8c94fa1f98dd3763fe20e1

See more details on using hashes here.

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