FTSFR is an open benchmark for evaluating time-series forecasting methods across equity, credit, rates, currency, and real-asset markets. The repository automates data acquisition from both public and subscription-based sources, standardizes each dataset into a common panel format, and provides reproducible forecasting experiments and research outputs.
- Modular data pipeline that mirrors the datasets described in
reports/draft_ftsfr.tex - Reproducible pulls for Bloomberg Terminal and WRDS feeds controlled through
subscriptions.toml - Standardized parquet datasets (
ftsfr_<name>.parquet) with metadata defined indatasets.toml - Forecasting jobs and evaluation utilities that benchmark classical and modern global models
- Documentation and LaTeX paper build scripts for publishing results
src/– Data modules, forecasting code, and utilities (each asset class lives in its own subdirectory)dodo_00_pull_bloomberg.py– Bloomberg Terminal pulls (run only where Bloomberg Desktop API is available)dodo_01_pull.py– Core data pulls, formatting, and documentation tasksdodo_02_forecasting.py– Forecast generation pipelinedodo_03_sensitivity.py– Data-cleaning sensitivity analysis (alternate-cleaning panels and LaTeX exhibits)dodo_04_paper.py– Report and website assembly_data/– Raw and processed data artifacts produced by the pipeline_output/– Forecasts, diagnostics, documentation assets, and timing logsreports/– LaTeX sources for the draft paper (draft_ftsfr.texis the current manuscript)
- Install Miniconda or another Conda distribution.
- Create the project environment and install core dependencies:
conda create -n ftsfr python=3.12 conda activate ftsfr pip install -r requirements.txt
- To run the forecasting suite, install the additional dependencies:
pip install -r requirements_forecasting.txt
- (Optional) If you will pull Bloomberg data via the Bloomberg API, install their Python package (as noted here: https://www.bloomberg.com/professional/support/api-library/):
python -m pip install --index-url=https://blpapi.bloomberg.com/repository/releases/python/simple/ blpapi
- (Optional) Install TeX Live if you plan to compile the LaTeX paper or PDF documentation.
- Confirm the tooling is available:
doit --version
- Create a
.envfile (see.env.example) containing identifiers such as WRDS usernames and any other secrets required by your subscriptions. - Edit
subscriptions.tomlto describe which data feeds and models you can access. The key sections are:The[cache] use_cache = true # set to false to force fresh pulls [data_sources] bloomberg = true # enable when running on a Bloomberg terminal wrds = true # enable for WRDS-sourced modules public = true # toggle free/public datasets [models] darts_tcn = true prophet = false
doittasks read this file to decide which modules to execute and whether cached extracts can be reused. Make sure the flags reflect the subscriptions and permissions available on the machine you are using.
dodo_00_pull_bloomberg.py contains every Bloomberg-only pull task. Launch it on a machine with the Bloomberg Desktop API running:
doit -f dodo_00_pull_bloomberg.pyOnly the modules enabled in subscriptions.toml with bloomberg = true will execute. Targets are saved under _data/<module>/.
dodo_01_pull.py is the main entry point for building the benchmark panel:
# Download and format data from all enabled sources
doit -f dodo_01_pull.pydodo_03_sensitivity.py builds the alternate-cleaning panels referenced in the paper's "Sensitivity to cleaning method" section. The panel builders and the standalone replication tables do not depend on forecasting and should be run before the forecasting step so the new datasets are picked up automatically:
doit -f dodo_03_sensitivity.py build_sensitivity_panels build_replication_tablesForecasting jobs live in dodo_02_forecasting.py and the src/forecasting/ package. Typical usage:
doit -f dodo_02_forecasting.pyJob definitions are generated from subscriptions.toml, datasets.toml, and src/forecasting/models_config.toml. Results (error metrics, predictions, timing) land in _output/forecasting/.
Once forecasting has finished on the sensitivity panels, render the LaTeX exhibits that aggregate per-model metrics:
doit -f dodo_03_sensitivity.py build_sensitivity_tablesUse dodo_04_paper.py to rebuild the website and LaTeX report once data and forecasts are in place:
doit -f dodo_04_paper.pyThis compiles the manuscript in reports/draft_ftsfr.tex and refreshes site assets under docs/.
- Each data module under
src/owns its extraction scripts (pull_*), formatting logic, and notebook utilities. datasets.tomldocuments every dataset, its frequency, and the data sources it depends on—use it to understand prerequisites before toggling modules insubscriptions.toml.- Helper utilities in
src/determine_available_datasets.pyandsrc/organize_ftsfr_datasets.pyensure parquet outputs conform to the benchmark schema (id,ds,y, plus optional covariates).
- Error metrics:
_output/forecasting/error_metrics/<dataset>/<model>.csv - Timing logs:
_output/forecasting/timing/<model>/<dataset>_timing.csv - Generated job list:
src/forecasting/forecasting_jobs.txt
Check _output/available_datasets.csv and _output/forecasting/summary/ (if present) to confirm coverage before writing up results.
- The full narrative, methodology, and empirical results are documented in
reports/draft_ftsfr.tex. - The static site under
docs/mirrors the paper’s structure and is rebuilt through the dodo tasks above.
For questions or contributions, follow the structure outlined here to extend data modules, add forecasting models, or refine the documentation.