8 Commits

Author SHA1 Message Date
2c28ac3b0a Add Disaggregated COT data support (2019–2026)
Integrates the CFTC Disaggregated Commitments of Traders reports
(com_disagg_txt_YYYY.zip) which break positions down by Producer/Merchant,
Swap Dealers, Managed Money, and Other Reportables — a different report
type from the existing legacy COT data.

- schema.sql: add disagg_reports, disagg_positions, disagg_concentration tables
- parser.py: add DisaggPositionRow/DisaggBlock dataclasses and
  parse_disagg_csv_text()/parse_disagg_zip_file() for c_year.txt format
- importer.py: add import_disagg_block(), import_disagg_zip_file(),
  run_disagg_historical_import() for 2019–2026 yearly ZIPs
- cli.py: add import-disagg-history subcommand
- docker-compose.yaml: run import-disagg-history on startup (idempotent
  via import_log, so re-deploys skip already-imported years)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 18:11:59 +01:00
495e0c9314 Remove manual coolify network config — Coolify manages this automatically
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 17:28:29 +01:00
051514ced1 Connect web service to Coolify's Traefik proxy network
Without joining the external 'coolify' network, Traefik cannot reach
the container and the reverse proxy returns 502.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 13:43:04 +01:00
b17b781839 Publish web service on port 31478
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 13:38:10 +01:00
3199a04014 Use expose instead of ports for Coolify deployment
Coolify handles reverse proxying internally, so binding to a host port
is unnecessary and causes conflicts. expose makes port 8000 available
within the Docker network without publishing it to the host.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 13:28:14 +01:00
5f694ca6ed Rename docker-compose.yml to docker-compose.yaml
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 13:25:24 +01:00
503f959a39 Remove local data bind mount from cron service
All COT data (database and downloaded HTML files) is stored on the
cot_data Docker volume via DB_PATH=/data/cot.db. The ./data bind mount
was redundant and could leak local files into the container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 11:29:08 +01:00
37f8eac932 Initial commit: CFTC COT Explorer
FastAPI application that ingests CFTC Commitments of Traders data into SQLite
and exposes it via a REST API with analytics endpoints (screener, percentile rank,
concentration). Includes CLI for historical and weekly data ingestion, Docker setup,
and a frontend.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 11:23:00 +01:00