Inspiration

We were inspired by how quantitative hedge funds discover trading strategies — not by manually coding rules, but by systematically searching through massive combinations of ideas.

We wanted to explore whether we could automate the process of hypothesis generation, using alternative data (like environmental signals) and evolutionary algorithms. The goal was to build something that doesn’t just analyze data, but learns how to discover patterns on its own.

What it does

Our project builds and evolves trading strategies automatically.

It:

Takes in alternative data (e.g. water temperature) Applies transformations (trend, momentum, anomaly detection) Converts these into trading signals (buy/sell decisions) Backtests them on historical price data Scores them using financial metrics like Sharpe ratio and PnL Evolves better strategies over time using mutation and crossover

In short, it’s a system that generates, tests, and improves trading strategies without human intervention.

How we built it

We structured the system into modular components:

Strategy Representation Strategies are encoded as JSON objects defining features, transformations, lags, and signal rules. Signal Pipeline Raw data is transformed (e.g. rolling averages, z-scores), then converted into buy/sell signals using threshold, crossover, or percentile logic. Backtesting Engine Simulates trades on historical price data, incorporating slippage and computing metrics like PnL and Sharpe ratio. Metrics System Evaluates each strategy based on profitability, risk-adjusted returns, and realism. Evolution Engine Uses a genetic algorithm approach: Selection: keep top-performing strategies Mutation: randomly tweak parameters Crossover: combine strong strategies Leaderboard Ranks strategies to track the best performers and compare trade-offs.

Challenges we ran into Balancing exploration vs. stability Too much mutation leads to randomness, too little leads to stagnation. Avoiding overfitting It’s easy to find strategies that perform well historically but don’t generalize. Designing meaningful transformations Choosing transformations that actually extract signal (rather than noise) was non-trivial. Making backtests realistic Incorporating slippage and risk-adjusted metrics was necessary to avoid misleading results. Search space explosion The number of possible strategies grows extremely fast, so efficiency mattered.

Accomplishments that we're proud of Built a fully automated strategy discovery system Successfully implemented a genetic algorithm for financial modeling Created a pipeline that goes from raw data → signals → trades → evaluation Incorporated realistic trading assumptions like slippage Designed a system that is both modular and extensible Made the outputs interpretable — each strategy is explainable, not a black box What we learned

Financial modeling is not just about profit — risk and realism matter just as much Small changes in parameters (like lag or window size) can drastically affect outcomes Evolutionary algorithms are powerful for exploring large, complex search spaces The way you define fitness functions fundamentally shapes the results Good abstractions (like separating transforms, signals, and backtesting) make complex systems manageable

What's next for Concurrent Modification Exceptions Add more advanced transformations (e.g. volatility, seasonality, frequency analysis) Introduce multi-objective optimization (balancing Sharpe, drawdown, and return) Use real-time data feeds instead of static datasets Expand to multiple assets and portfolio-level strategies Incorporate machine learning models alongside rule-based signals Improve robustness with cross-validation and out-of-sample testing

Built With

Share this project:

Updates