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 replaces the usual stack of quantstats + pyportfolioopt + skfolio + vectorbt + xlsxwriter, with 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.2.1.tar.gz (170.5 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.2.1-cp310-abi3-win_amd64.whl (440.4 kB view details)

Uploaded CPython 3.10+Windows x86-64

fundcloud-0.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (525.9 kB view details)

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

fundcloud-0.2.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (513.0 kB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

fundcloud-0.2.1-cp310-abi3-macosx_11_0_arm64.whl (486.7 kB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

fundcloud-0.2.1-cp310-abi3-macosx_10_12_x86_64.whl (495.9 kB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: fundcloud-0.2.1.tar.gz
  • Upload date:
  • Size: 170.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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.2.1.tar.gz
Algorithm Hash digest
SHA256 971a377a9acf24e4985be0ed2bc6b9a5c7ab6353d8144f0ee0e5c86993b30392
MD5 951f1ab0d34773de4211a7ab08a14ac7
BLAKE2b-256 07e9a4184943c4c154f825f8280b2ad8aa53c81fc9df6569083e38986ab6d269

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.2.1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 440.4 kB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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.2.1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6a77b07aeeda72ea6712f0e684794d2f08e749242ef1b1cfd85d38bfc6a636b3
MD5 f76dc32d7492a06ef97d5cbb53e448b5
BLAKE2b-256 1269464ff51e2ecc660e19a7b8147c317f09ecfc96485008fb0be3fd9824141b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 525.9 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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.2.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 66d18604eca0154976b406706dad8b2b50a063b2f50ad74e47b001574d86474e
MD5 d3487652d68da1696298292095655ca4
BLAKE2b-256 2c19316db31653f5e238af761b17f2702705af987343f9de96b3cff7fb787b64

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.2.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 513.0 kB
  • Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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.2.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8bbdf699bef7b59e87af945f57e5ed6cef283e2b005081928bfd8b3ae638ec5b
MD5 f1e630c2686937e2fb3c7ab7a9cf8f2a
BLAKE2b-256 199af5897a083e73ad5335fe7f77ffa5ed24eae93014f87941edcf7a658396b5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.2.1-cp310-abi3-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 486.7 kB
  • Tags: CPython 3.10+, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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.2.1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 50a5fde089d9628c1569d9cddab81cc09fdff9ce717f3bea3e1d5975b158b642
MD5 9224c92df911eae2fae369bdc9b5a842
BLAKE2b-256 12543d596370f6028f9d94c36b4ac0a5efc6342beb80362dacad070f0b15566c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fundcloud-0.2.1-cp310-abi3-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 495.9 kB
  • Tags: CPython 3.10+, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","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.2.1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 55a5945857aceefe9b1916bb27d2a14b58a31eb438ee63a670d8d5d6904b3aa2
MD5 e13a25a2114d841b7bc2399f387b08ff
BLAKE2b-256 2605898b0dcd48d019ba0ad800e79057d9adb913cfad43882095bd26d3a058f9

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