Software Engineer · Aspiring Intern at Publicis Sapient

Building reliable systems at the intersection of software engineering and quantitative research.

I am Hugo Hoenn, a self-taught developer who has spent years turning curiosity into production-grade software. This site is a deep dive into my most ambitious side project: a fully automated, multi-asset trading system built end-to-end in Python, with the same engineering rigor I would bring to any client product.

  • 30+Python modules
  • 15k+lines of code
  • 32assets monitored live
  • 5+years backtested

About me

A global upbringing, a lifelong love of code.

I am half French, half Senegalese, and I grew up across three continents : childhood in Senegal, formative years in Shanghai, and later in Europe and the United States. That mix of cultures taught me to listen carefully, adapt quickly, and bridge perspectives that do not obviously belong together.

Coding has been my constant since I was a child. While my friends played video games, I was reverse-engineering them. Every free moment turned into a side project: small games, scrapers, automation scripts, data tools — and a habit of finishing what I start. The trading system featured on this page is the most developed of these efforts, and the one I am most proud to share.

Featured project

The Hurst Cyclic Trading System

A production-grade automated trading platform that ingests real market data, detects patterns across multiple time horizons, generates trading signals, and executes orders through a broker API all while being continuously monitored and validated. I designed and built every layer of it on my own.

What it does

Every day at market open, the system pulls fresh price data for 32 assets, runs a mathematical model to identify high-probability trading opportunities, and decides, autonomously whether to enter, hold, or skip a trade. A real-time dashboard tracks every decision.

Why it matters

Building it required solving the same problems any serious software product faces: clean architecture, reliable data pipelines, automated testing, observability, deployment, and graceful failure handling. Finance was the playground; software engineering was the lesson.

What it proves

I can take a complex domain, decompose it into well-defined modules, validate them rigorously, and ship something that runs in production unattended. That is the same skill set I want to bring to client work at Publicis Sapient.

System architecture

Six layers, one clean pipeline.

I designed the system as a series of independently testable layers. Each one has a single responsibility, a clear contract with its neighbours, and can be swapped out without touching the rest. This is the same separation-of-concerns principle that underpins any well-structured backend service.

  1. 01

    Data ingestion

    A pipeline that pulls multi-year historical and real-time price data from multiple providers (Yahoo Finance, Alpaca), normalises it into a common schema, validates for missing or corrupted bars, and caches it for fast iteration.

    pandas · yfinance · alpaca-py

  2. 02

    Signal engine

    The mathematical core. Implements spectral analysis (FFT), digital filters, and a signal-generation module that scores each candidate opportunity on a 0–1 confidence scale. Pure functions, no side effects, fully unit-testable.

    numpy · scipy · custom CombFilterBank

  3. 03

    Backtesting framework

    Replays years of historical data through the signal engine to measure performance — win rate, risk-adjusted return, drawdown, under realistic constraints (transaction costs, slippage, position sizing). The same framework powers walk-forward validation, Monte Carlo simulation, and component-level ablation studies.

    walk-forward · Monte Carlo · ablation testing

  4. 04

    Risk & execution layer

    Translates signals into actual orders. Computes position size from a fixed-risk formula, places bracket orders (entry + stop-loss + target) atomically through the broker API, and refuses any trade that breaches global risk limits (daily loss cap, max drawdown, position concentration).

    Alpaca Trading API · idempotent order placement

  5. 05

    Scheduler & orchestration

    A daemon that runs the daily cycle on a cron-like schedule, monitors open positions every five minutes, handles graceful shutdown, and logs a complete audit trail to disk. Designed to recover cleanly from network drops or restarts.

    schedule · structured logging · stateful recovery

  6. 06

    Real-time dashboard

    A Flask web application that reads the system state and renders a live operations view: open positions, signal confluence per asset, P&L, risk metrics, recent decisions. Auto-refreshes every few seconds. It is what an SRE would call a "single pane of glass."

    Flask · Jinja2 · vanilla JS

Engineering practices

The discipline behind the code.

Anyone can write a script that "kind of works." Building something a real business could rely on means investing just as much effort in the things you cannot see : testing, validation, monitoring, documentation. Here is what that looked like for this project.

Modular architecture

The codebase is organised into 30+ Python modules with a single shared core (hurst_cyclic_trading.py). Every backtest, validation pipeline, and the live trading bot all import from the same source of truth — so what is tested in simulation is exactly what runs in production. No drift, no surprises.

Validation pipeline

Three independent layers of validation prove the system works: walk-forward testing on unseen historical data, Monte Carlo simulation to stress-test against thousands of randomised scenarios, and ablation studies that disable individual components to measure their isolated contribution. Together they answer the only question that matters: is this real, or did I overfit?

Observability

Structured logging at every stage with consistent timestamps and severity levels, a per-session JSON metrics file, and a trade journal that records the full lifecycle of every decision. When something goes wrong, the first 30 seconds of debugging start from data, not guesswork.

Configuration as code

All tunable parameters — risk per trade, confidence thresholds, asset universe, schedule, live in versioned configuration files. Switching between paper trading and live deployment is a single flag, not a code change.

Defensive design

Hard-coded daily loss limits, mandatory stop-loss orders, automatic position size caps, and graceful handling of API failures. The system is built on the assumption that things will go wrong, and that the right response is to fail safely and log loudly, not silently.

Version control & documentation

The whole project is tracked in Git with descriptive commits and feature branches. Architecture decisions, validation results, and operational runbooks are documented in over 100 markdown files alongside the code, so the project remains understandable to a future maintainer — including future me.

Tech stack

Tools chosen on purpose, not by default.

Languages

  • Python (primary)
  • Java
  • C++ (low-latency components)
  • SQL · HTML · CSS · JavaScript

Data & numerics

  • pandas, NumPy, SciPy
  • Custom signal-processing primitives
  • Time-series cleaning & alignment

Web & integration

  • Flask (dashboard)
  • REST API integration (Alpaca)
  • Pydantic (typed validation)
  • Jinja2, vanilla JS

Operations

  • Git & GitHub
  • schedule for cron-like jobs
  • Render-ready deployment configs
  • Structured logging & JSON metrics

Why Publicis Sapient

I want to build software that helps real businesses transform.

What I have done on my own taught me how to architect, validate, and ship a complete system. What I am missing, and what I am most excited to learn, is the experience of doing that inside a team, against real client constraints, across the kind of digital-transformation problems Publicis Sapient solves every day. I would love the chance to contribute, to learn from senior engineers, and to bring the same discipline I applied to my own project to your clients' work.

Contact

Let's talk.

The fastest way to reach me is by email. I respond within 24 hours.