HarvestGroup360
Empowering quantitative research with high-frequency market data and analytics.
Every quantitative project starts with data. But the moment you transition from a clean, daily CSV file in a Jupyter notebook to a live, multi-exchange websocket feed, the illusion of perfectly continuous markets shatters.
At HarvestGroup360, we build institutional-grade execution environments. We've seen countless brilliant Machine Learning models fail in production not because the math was wrong, but because the foundational data pipeline didn't respect the physical reality of market microstructure.
Here are the three silent killers of algorithmic trading backtests:
If you feed raw, unfiltered tick data into a deep learning model, it will often learn to predict the "bid-ask bounce." If the last trade was at the bid and the next is at the ask, the raw feed shows a price increase. The fundamental value hasn't changed a single tick, but your model thinks it found alpha. It will confidently tell you to buy the bid and sell the ask—a strategy that is mathematically impossible to execute unless you are a tier-1 market maker with zero latency.
Missing data is a quiet source of backtest bugs. Your feed goes silent for a few minutes due to a dropped connection, and your 1-minute series jumps from 09:31 straight to 09:36. If you don't handle this explicitly, every rolling window, every lag feature, and every "N bars ago" lookup silently shifts by the gap. Your model ends up learning on a timeline that never actually existed.
The moment you pull data from more than one venue, life gets exponentially harder. Feeds arrive interleaved, exchange clocks don't line up neatly, and every reconnect quietly replays a handful of trades you've already seen. Merge this naively, and your "consolidated tape" is suddenly double-counting fills and jumping back in time.
We got tired of rewriting the same deduplication logic, gap-filling algorithms, and VWAP-resampling math every time we started a new project. Every quant project starts and ends with a CSV. You grab a dump of trades, write the same tired loader, guess the columns, handle the one venue that spells everything differently, and dump it all back out. Nobody enjoys this part, but everybody rebuilds it anyway.
That's why we built and open-sourced market-data-normalizer. It's a pure Python, zero-dependency library designed to be the unglamorous first and last mile of every quantitative data pipeline.
market-data-normalizer v0.9.0 closes that loop: read_csv_trades turns a CSV straight into clean, normalized events, and write_records_csv sends events or bars back out to a tidy file. One import instead of the fifty lines you've written a dozen times before.
Build on robust data pipelines and institutional infrastructure. Check out our open-source tools or explore the full platform.