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.4.0.tar.gz (235.6 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.4.0-cp310-abi3-win_amd64.whl (521.8 kB view details)

Uploaded CPython 3.10+Windows x86-64

fundcloud-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (608.4 kB view details)

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

fundcloud-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (592.3 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

fundcloud-0.4.0-cp310-abi3-macosx_11_0_arm64.whl (565.2 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

fundcloud-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl (578.3 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: fundcloud-0.4.0.tar.gz
  • Upload date:
  • Size: 235.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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.4.0.tar.gz
Algorithm Hash digest
SHA256 58fd08b01e6a30ac87cd7b589d9ff4bac9f172f4198bb543abb8ca5192a7683b
MD5 c8df2beecf31d3b762d62c7e2b47b93a
BLAKE2b-256 ba341956c42fa27cead9b5296f9afef393f91de208e729c9f3a5e9c9c9cc4200

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.4.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 521.8 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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.4.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 d2db27f484349a70aeb97114f88811099c2eab9298afefadc07792c8a5cbb0b4
MD5 2b758dba0b992bb49c814887e90a4ce7
BLAKE2b-256 94192c5725ccadeea66bb70f6f2d5ff4c1c82881804c129bd7a0040f6dd65ff9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 608.4 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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.4.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0907cfcbbe88ccae53f07a1174421ec57dd3544f4ab940586927703808d857ca
MD5 281cae8043cbd3c2160f1fc60375c87f
BLAKE2b-256 069f9a5eb2a7aed60e434da9c0721ca3bdbaace3fc6eb83edf3d6619f51a8dc9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 592.3 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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.4.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 629e83c29a4d8acbf30cd885684151a31f95c5a54cf2c790f27d1c45716e8d6b
MD5 0fd5f9e02fb249fb437ac451bc271ecb
BLAKE2b-256 588b9e6ce4a8b0ec5e50460a15078efe7514b9a4e344996dccab0eedacb8ca76

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.4.0-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 565.2 kB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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.4.0-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 dbcd2cae66c024320d0c54b2d2c11cc71120ab4e2e6880a615dbb23f09bbe7fb
MD5 262a9ae78462a5baa7306658f3cf208b
BLAKE2b-256 1b2a44eb801610fa6d4fe839b6e650a45496d647645b7392a4c1caa8afcdfe8b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.4.0-cp310-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 578.3 kB
  • Tags: CPython 3.10+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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.4.0-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 bf3bbd85a67902d40e0d5f265dfc258dec3de73132920630215aad6f60dcf1c9
MD5 1a86b7c5c4f1de2e59d4c12a7b800b1b
BLAKE2b-256 a022147dd2adb6fdbe35f3b4d257660c9ea1378739c7ad13f744eefd4a94111f

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