Skip to content

Designing a Reproducible ETF Decision-Support System

I designed a reproducible decision-support system that turns market and risk data into monthly ETF allocation recommendations with backtests and operational checks.

Product owner, system architect, developer · 2026 · Python, data ingestion, feature engineering, backtesting, dashboard/API, testing workflows

Context

Portfolio decisions become inconsistent when they rely on ad hoc judgment. The goal was to make allocation recommendations a repeatable decision process rather than a one-off prediction.

Decisions

  • Frame the system as decision support, not a stock-picking oracle.
  • Separate ingest, features, decisioning, backtesting, and dashboard layers.
  • Build operational checks and documentation into the product.

Solution

The system includes ETF price and macro input ingestion, leakage-safe feature computation, regime signals, monthly allocations, weekly diagnostics, backtests, robustness checks, integrity gates, a local dashboard/API, and documentation.

TODO_ASSET: dashboard + architecture diagram

Insert a dashboard screenshot and a simple data-to-dashboard flow diagram with dummy or simulated data.

Repository Structure

config/       contracts, universe, policy, versioning, run identity
ingest/       raw data fetch, logging, scheduling, bundle creation
features/     feature computation and eligibility checks
decisioning/  regime scoring, tilts, allocation, artifacts
backtest/     timing, costs, baselines, robustness, validation
ops/          orchestration, integrity checks, alerts, releases, gates
dashboard/    API services and UI
tests/        milestone, regression, and live-data smoke coverage
documents/    specs, playbooks, decisions, roadmap docs
tools/        recurring developer automation

Outcome

  • Created a reproducible ETF allocation workflow.
  • Built a documented repo with clear system boundaries.
  • Created a dashboard/API surface for run status and artifacts.
  • Added test workflows for smoke, regression, fetch, and full checks.