Inspired by DeepMind’s AlphaEvolve coding agent—this project applies the same evolutionary-LLM principles to financial markets.
Autonomously discovers and back‑tests high‑performing algorithmic‑trading strategies using evolutionary LLM prompts, Backtrader, and the Papers‑With‑Backtest data ecosystem.
# Clone and install in editable mode $ git clone https://github.com/paperswithbacktest/pwb-alphaevolve.git $ cd pwb-alphaevolve $ pip install -e . # Set your OpenAI key (model "o3" required) $ export OPENAI_API_KEY=sk-... # Set your Papers‑With‑Backtest dataset (e.g. "paperswithbacktest/Stocks-Daily-Price") $ export HF_ACCESS_TOKEN=hf_Launch the evolution controller
python scripts/run_example.pyMonitor the evolution process in real‑time using the optional Streamlit dashboard:
$ streamlit run scripts/dashboard.pyThe dashboard uses Streamlit to visualize the evolution process and back‑test results.
Python ≥ 3.10 required.
pip install pwb-alphaevolveOr install the bleeding‑edge version:
pip install git+https://github.com/paperswithbacktest/pwb-alphaevolve.git- pwb-toolbox
- pwb-backtrader
- openai ≥ 1.0 (structured output)
- tqdm, pandas, numpy, pydantic
(See pyproject.toml for the full list.)
| Layer | Highlights |
|---|---|
| Data | Zero‑setup loader for any Papers‑With‑Backtest dataset (pwb_toolbox) + caching to Feather |
| Strategies | Seed templates with EVOLVE‑BLOCK markers that the LLM mutates |
| Evaluator | Deterministic Backtrader walk‑forward, JSON KPIs (Sharpe, CAGR, Calmar, DD) |
| LLM Engine | OpenAI o3 structured‑output chat → JSON diff/patch system |
| Evolution | Async controller, SQLite hall‑of‑fame, optional MAP‑Elites niches |
| Dashboard | (optional) Streamlit live view of metrics & equity curves |
alphaevolve/ ├── engine.py # convenience wrapper to run the evolution loop ├── evaluator/ # data loading, metrics & Backtrader evaluation ├── evolution/ # controller, patching, islands ├── llm_engine/ # prompt builder + OpenAI client ├── strategies/ # seed strategies (EVOLVE‑BLOCK markers) └── store/ # SQLite persistence scripts/ # CLI entry‑points The PromptGenome dataclass allows the LLM instructions themselves to be evolved using a genetic algorithm. Set ENABLE_PROMPT_EVOLUTION = True in examples/settings.py to try this feature. New prompts are mutated, evaluated for a few iterations and stored in a separate SQLite database.
- Fork the repo & create your feature branch (
git checkout -b feat/new-feature). - Commit your changes (
git commit -m 'feat: add something'). - Push to the branch (
git push origin feat/new-feature). - Open a Pull Request.
Please run black + ruff before submitting.
MIT © 2025 Contributors