A Dash application for ingesting, storing, and visualizing European stock market data from Euronext and Boursorama, backed by TimescaleDB.

Day-level data in .csv and .xlsx formats, depending of the year. Columns include ISIN, symbol, open/high/low/last prices,
volume, and turnover. We have a big drop in data quality starting from mid 2022 to 2024 that have significant gaps in
key columns (high, low, close). Missing values are kept as-is rather than removed, since stock data is inherently difficult to interpolate.
Hour-level snapshots stored as Python pickle files, organized by year. Each file contains symbol, last price, and volume
at a specific timestamp. Boursorama symbols carry exchange prefixes
(1rP for Paris, 1rA for Amsterdam, etc.) which are stripped during ETL to match Euronext symbols.
From the project root:
docker-compose up --buildThe initial data load can take 10–15 minutes depending on the date range and number of files. We tried to optimize it the best we could but due to the amount of files and data it is still taking some time.
The dashboard is available at http://localhost:8050 once the import completes.
# Rebuild after code changes
docker-compose up --build
# Connect to the database
docker exec -it bourse-database psql -U bourse -d bourse
# Check data counts
# SELECT count(*) FROM companies;
# SELECT count(*) FROM daystocks;
# Full reset (wipe database and restart)
docker-compose down -v
docker-compose up --buildThe ETL date range and source are configured in bourse/app.py:
store_files("2020-01-01", "2025-12-31", "euronext", db)The third argument controls which source to load: "euronext", "boursorama", or "all".
The web interface provides two main views: a market overview and a detailed stock analysis page.
A grid of stock cards showing each company's name, symbol, sparkline, latest price, and percentage variation. Click "Voir" to access the detail view.
An interactive analysis page with:
- Key metrics - Latest price, variation, high, low, and average volume
- Sidebar - Select a stock, compare with another, adjust date range, toggle between line/candlestick chart, and switch linear/log scale
- Tabs - Price chart, Bollinger Bands, Volume, and raw data table
![]() |
![]() |
|---|---|
![]() |
![]() |



