AI agents that actually place the trade. 12 brokers, real backtests, stocks options futures forex crypto and prediction markets.
See the codeAI agents that actually place the trade. Twelve broker integrations, real backtests, and stocks, options, futures, forex, crypto and prediction markets. Most AI trading projects stop at a recommendation. LumiBot sends the order.
Read this in 中文 · Español · Français · Deutsch · 日本語 · 한국어 · Português · Русский
pip install lumibot
lumibot demo
That runs a real backtest on free daily data and writes a tearsheet. No API key, no broker account, no configuration.
Then make it yours:
lumibot init my-bot --template ai # writes an ordinary, editable Strategy subclass
lumibot backtest my-bot --days 90
lumibot run my-bot --paper
lumibot init writes the same Python you would have written by hand. Nothing is hidden behind the CLI, and you keep an editable file.
The strategy class can stay the same. The code that starts it must select a
backtest or a broker run. Strategy.backtest(...) always backtests;
Trader.run_all() or strategy.run_live() starts a configured broker. Setting
IS_BACKTESTING=false alone cannot turn a backtest-only example into a broker
runner. Check every AI example's run mode
Prefer traditional trading strategies? Use --template python instead. Write your own rules, indicators, and order logic in a normal Strategy subclass. No AI model or model API key is required.
Python quickstart · AI quickstart · Python examples · AI examples
Strategy lifecycle.AI trading projects have proved that people want agentic trading workflows. Lumibot's edge is that those workflows run inside a real Python trading framework: you can backtest the agent decisions, inspect artifacts, add Python guardrails, paper trade, and connect to brokers without rewriting the strategy.
That matters because an AI trading demo is not the same thing as a trading system. Without backtests and broker-aware strategy code, you are mostly trusting prompts. Lumibot lets you iterate faster: test the agent flow on historical data, see what it would have bought or sold, tighten the Python risk checks, then run the same lifecycle in paper or live trading.
| Project | Main angle | AI agents / teams | Backtest agent decisions | Paper/live broker path | Deterministic Python strategies | Hosted data/deploy/monitoring |
|---|---|---|---|---|---|---|
| Lumibot + BotSpot | Python strategies, flexible AI trading teams, hybrid guardrails, backtests, brokers, hosted deployment | Flexible teams, debates, specialist desks, and deterministic gates | Replayable decisions, orders, traces, artifacts, charts, logs | Yes: Alpaca, IBKR, Tradier, Schwab, Tradovate, ProjectX, Bitunix, Polymarket, selected CCXT | Yes | Hosted data, parallel backtests, deployment, monitoring, MCP, alerts, kill switches |
| TradingAgents | Multi-agent LLM trading research framework | Yes, with a specific research/debate structure | Research/demo oriented | Not the main focus | Limited | No |
| ai-hedge-fund | Educational AI hedge fund with named investor-style agents | Yes, with investor-style personas | Demo/backtest oriented | Not the main focus | Limited | No |
| OpenAlice | One-person Wall Street agent concept | Yes, end-to-end agent concept | Emerging/experimental | Local/self-run focus | Limited | No |
| QuantDinger | Self-hosted AI quant operating system | Yes | Yes | Crypto, IBKR, MT5, Alpaca | Yes | Self-hosted |
| Vibe-Trading | Personal trading agent | Yes | Yes | Agent trading platform focus | Limited | Platform-specific |
| AI-Trader | Agent-native trading platform | Yes | Platform focus | Platform focus | Limited | Platform-specific |
| OpenBB | Financial data platform for analysts, quants, and AI agents | Tooling for agents | Not a strategy backtester | No broker execution framework | No | OpenBB workspace/platform |
| Qlib | AI-oriented quant research platform | Research/ML agents | Quant research backtests | Limited live focus | Research pipelines | No |
See the docs comparison pages for more detail: Lumibot vs TradingAgents, Lumibot vs ai-hedge-fund, Lumibot vs OpenAlice, and Lumibot vs QuantDinger.
| Feature | Lumibot | Backtrader | Freqtrade | Zipline | Backtesting.py | Jesse | vectorbt | NautilusTrader | Hummingbot |
|---|---|---|---|---|---|---|---|---|---|
| Same code: backtest + live | Yes | Yes | Yes (crypto) | No | No | Yes (paid) | No | Yes | Yes (crypto) |
| Stocks | Yes | Yes | No | Yes | Yes | No | Yes | Yes | No |
| Options | Yes | No | No | No | No | No | No | Limited | No |
| Crypto | Yes | Limited | Yes | No | Yes | Yes | Yes | Yes | Yes |
| Prediction markets | Polymarket trading and backtesting | No | No | No | No | No | No | No | Limited/no |
| Futures | Yes | Limited | Crypto only | Partial | Yes | Crypto only | Yes | Yes | Perpetuals/crypto venues |
| Forex | Yes | Outdated | No | No | Yes | No | Yes | Yes | No |
| AI agent runtime | Built-in | No | FreqAI (ML) | No | No | ML pipeline | No | No | Scripts/controllers |
| Broker execution | Alpaca, IBKR, Tradier, Schwab, Tradovate, TopstepX (via ProjectX), Bitunix, Polymarket, selected CCXT | IB only (outdated) | Crypto exchanges | None | None | Crypto exchanges | No | Exchange adapters | Crypto exchanges |
| Hosted deployment path | BotSpot | No | No | No | No | Paid cloud | No | No | Hummingbot Foundation/enterprise ecosystem |
| License | GPL-3.0 | GPL-3.0 | GPL-3.0 | Apache-2.0 | AGPL-3.0 | MIT | Apache-2.0 | LGPL-3.0 | Apache-2.0 |
Switching from Backtrader? See our migration guide for a side-by-side comparison with code examples.
Start with SPY. A research agent analyzes its trend; a trading agent checks the evidence and account, then decides whether to buy, hold, or sell. This example limits a new position to 10% of the simulated portfolio.
You need Python 3.10+ and an OpenAI API key (OPENAI_API_KEY). The default model is openai/gpt-6-luna on medium reasoning. Historical prices come from Yahoo; this backtest does not connect to a broker account. Model usage may incur charges.
python -m pip install "git+https://github.com/Lumiwealth/lumibot.git@version/4.6.3"
export OPENAI_API_KEY="your-openai-api-key"
export BACKTESTING_DATA_SOURCE=yahoo
python -m lumibot.example_strategies.ai_researcher_trader
The command runs a historical backtest of the complete SPY example. Watch the research and trading decisions, then inspect the generated simulated order records. Open its source.
Save as my_ai_strategy.py:
from datetime import datetime
from lumibot.backtesting import YahooDataBacktesting
from lumibot.example_strategies.ai_researcher_trader import ResearcherTraderStrategy
if __name__ == "__main__":
ResearcherTraderStrategy.backtest(
YahooDataBacktesting,
datetime(2026, 4, 6),
datetime(2026, 4, 11),
budget=100_000,
benchmark_asset="SPY",
parameters={"symbol": "SPY", "max_position_pct": 10},
)
python my_ai_strategy.py
Watch the research and trading decisions in the log, then inspect the orders and backtest report. The $100,000 is simulated portfolio capital. The example uses openai/gpt-6-luna on medium reasoning.
Open the complete strategy code to change the prompts, tools, or trading rules. Follow the walkthrough for the agent setup and how to read the results. Prefer rules without AI? Run a conventional Python strategy.
Recorded run (made with Gemini, before GPT-6 Luna became the default): ten fresh agent runs across April 6 to 10, with one verified fill for 15 SPY shares. Inspect the source, decisions, and trade records. Fresh AI decisions can vary.
If this helps you build, star LumiBot so you can find it again and share your strategy with the community.
The large-cap stock example has four agents: a researcher ranks stocks, a bull makes the case, a bear challenges it, and a trader decides what to do.
See the code, run commands, and recorded results. A fresh model run can choose different trades and returns. Replaying saved decisions is different from asking the model to reason again.
Join the free challenge with Rob Grzesik, creator of LumiBot. Follow the training and learn how to turn an idea into an AI trading strategy.
Looking for deeper training? Explore the AI Trading Bootcamp. Prefer a hosted workspace? Explore BotSpot.
🌐 Community
Reddit Community
Discord Community
Start with the open-source docs, then deploy when you are ready: Lumibot documentation · Try a sample Lumibot strategy on BotSpot
Choose a starting point:
Building a product on LumiBot? Partner with LumiBot through funded integrations, open-source maintenance, joint tutorials, or strategic collaboration.
This is a traditional rules-based strategy: buy 10 AAPL shares on the first iteration and hold. It uses Yahoo historical prices, requires internet access, and makes no AI calls. Use Python 3.10 or later.
pip install lumibot
Save this as my_strategy.py:
from datetime import datetime
from lumibot.strategies import Strategy
from lumibot.backtesting import YahooDataBacktesting
class MyStrategy(Strategy):
def on_trading_iteration(self):
if self.first_iteration:
aapl = self.create_order("AAPL", 10, "buy")
self.submit_order(aapl)
MyStrategy.backtest(
YahooDataBacktesting,
datetime(2023, 1, 1),
datetime(2024, 1, 1),
)
python my_strategy.py
After the backtest works, keep the MyStrategy class and replace the final MyStrategy.backtest(...) call with a broker runner. This example uses Alpaca paper trading:
export ALPACA_API_KEY='your-alpaca-key'
export ALPACA_API_SECRET='your-alpaca-secret'
export ALPACA_IS_PAPER=true
python my_strategy.py
import os
from lumibot.brokers import Alpaca
from lumibot.traders import Trader
ALPACA_CONFIG = {
"API_KEY": os.environ["ALPACA_API_KEY"],
"API_SECRET": os.environ["ALPACA_API_SECRET"],
"PAPER": os.environ.get("ALPACA_IS_PAPER", "true").lower() != "false",
}
broker = Alpaca(ALPACA_CONFIG)
strategy = MyStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Start with paper trading. When you are ready for live trading, use the same strategy class and switch your broker account/configuration intentionally.
For full setup guides, broker tutorials, AI-agent docs, examples, and deployment notes, use the Lumibot documentation.
Lumibot now includes a built-in AI agent runtime for financial research, reasoning, debate, risk review, and trade execution. Agents can inspect market data, read filings, query indicators, search memory, compare macro context, and submit orders through the same Lumibot strategy loop used by normal backtests and live trading.
Classic Python strategies are still first-class. Lumibot lets you choose the right level of intelligence: fixed rules, AI agents, or a hybrid where Python handles the hard gates and agents reason through evidence.
Built-in AI agent tools include market/account state, order inspection, DuckDB queries, documentation search, Alpaca news when credentials exist, technical indicators, SEC fundamentals and filings, FRED macro data, local memory, and Telegram notifications.
Start with stock opening range breakout, large-cap stock teams, or macro research.
Explore the public Macro Insight AI: Bridgewater-Style Strategy listing on BotSpot. Inspect their published code and available observations before using them.
These educational implementations have no affiliation or endorsement from the named firms or people. BotSpot plans, model usage, broker access, and data requirements may apply.
An AI trading team is just a group of agents with different jobs inside the same Lumibot strategy. You can build a single-agent strategy, a specialist research flow, bull/bear/neutral teams, model-vs-model debates, deterministic execution gates, or agent reviewers layered on top of normal Python logic.
Here is one example pattern: a researcher gathers evidence, bull and bear agents debate the trade, and a trader agent decides what to buy or sell.
In this pattern, each agent has a job:
The copy-paste example below implements that exact team. It uses GPT-6 Luna on medium reasoning, LumiBot's default model.
To run it with a broker in paper mode, set your AI and Alpaca credentials and run the file:
export OPENAI_API_KEY='your-key-here'
export ALPACA_API_KEY='your-alpaca-key'
export ALPACA_API_SECRET='your-alpaca-secret'
export ALPACA_IS_PAPER=true
python ai_trading_team_bull_bear_leveraged_etf.py
To backtest the same strategy instead, change IS_BACKTESTING = False to IS_BACKTESTING = True in the runner:
export OPENAI_API_KEY='your-key-here'
python ai_trading_team_bull_bear_leveraged_etf.py
Save this as ai_trading_team_bull_bear_leveraged_etf.py. If an AI key is missing or invalid, Lumibot stops and prints a clear provider key error with a link to create a key.
import os
from datetime import datetime
from lumibot.strategies.strategy import Strategy
class AITradingTeamBullBearLeveragedETFStrategy(Strategy):
parameters = {
"universe": ["TQQQ", "SQQQ", "UPRO", "SPXU", "UDOW", "SDOW", "TNA", "TZA", "TECL", "TECS", "SOXL", "SOXS", "WEBL", "WEBS", "FAS", "FAZ", "LABU", "LABD", "ERX", "ERY", "GUSH", "DRIP", "DRN", "DRV", "TMF", "TMV", "NUGT", "DUST"],
}
def initialize(self):
self.sleeptime = "1D"
model = os.environ.get("AI_TRADING_TEAM_MODEL", "openai/gpt-6-luna")
# The first three agents are read-only. They can reason, but cannot trade.
self.agents.create(
name="researcher",
model=model,
allow_trading=False,
system_prompt="Rank the ETFs by upside. Be direct.",
)
self.agents.create(
name="bull",
model=model,
allow_trading=False,
system_prompt="Argue for the strongest money-making trade.",
)
self.agents.create(
name="bear",
model=model,
allow_trading=False,
system_prompt="Point out the biggest risk, briefly.",
)
# Only this final agent can submit orders through Lumibot.
self.agents.create(
name="trader",
model=model,
allow_trading=True,
system_prompt="Buy one ETF from the universe aggressively. Use nearly all cash.",
)
def on_trading_iteration(self):
# Each trading day, pass the same market context through the team.
context = {
"date": self.get_datetime().date().isoformat(),
"universe": self.parameters["universe"],
}
research = self.agents["researcher"].run(
task_prompt="Pick the strongest ETF.",
context=context,
)
bull = self.agents["bull"].run(
task_prompt="Make the bull case.",
context={**context, "research": research.summary},
)
bear = self.agents["bear"].run(
task_prompt="Make the bear case.",
context={**context, "research": research.summary, "bull": bull.summary},
)
self.agents["trader"].run(
task_prompt="Sell anything that is not the pick, then buy the best ETF with nearly all available cash.",
context={**context, "research": research.summary, "bull": bull.summary, "bear": bear.summary},
)
if __name__ == "__main__":
IS_BACKTESTING = False
if IS_BACKTESTING:
from lumibot.backtesting import YahooDataBacktesting
AITradingTeamBullBearLeveragedETFStrategy.backtest(
YahooDataBacktesting,
datetime(2026, 4, 7),
datetime(2026, 5, 22),
)
else:
from lumibot.brokers import Alpaca
from lumibot.traders import Trader
ALPACA_CONFIG = {
"API_KEY": os.environ["ALPACA_API_KEY"],
"API_SECRET": os.environ["ALPACA_API_SECRET"],
"PAPER": os.environ.get("ALPACA_IS_PAPER", "true").lower() != "false",
}
broker = Alpaca(ALPACA_CONFIG)
strategy = AITradingTeamBullBearLeveragedETFStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Backtests are not expected future performance. The point is that the full AI trading team runs inside Lumibot's normal broker and backtest loops, so the decisions, orders, and artifacts are inspectable before you connect real money.
These examples show different ways to organize an AI trading team. Each page explains the inspiration, the agent flow, how to run it with a broker in paper mode, and how to backtest it.
ai_trading_team_citadel_sector_pods.py.ai_trading_team_warren_buffett_value.py.ai_trading_team_ray_dalio_idea_meritocracy.py.ai_trading_team_bill_ackman_concentrated.py.ai_trading_team_bull_bear_leveraged_etf.py.ai_trading_team_bull_bear_large_cap_stocks.py.BotSpot is the managed cloud built around Lumibot. It makes Lumibot easier and cheaper to run because the data, backtesting workers, broker connections, scheduling, monitoring, logs, alerts, and kill switches are already wired together.
BotSpot is not a generic chatbot bolted onto a broker account. Its AI workflows, prompts, MCP tools, backtest setup, broker paths, and deployment flow are built for Lumibot.
BotSpot is the managed path for taking a Lumibot strategy from idea to backtest to paper or live trading. It handles the expensive and fragile parts around the strategy: hosted data setup for supported backtests, parallel backtest runs, broker connections, scheduling, logs, alerts, monitoring, audit history, and kill-switch controls.
This is especially useful when your strategy only needs to run daily or periodically. You get the same Lumibot code path without paying for always-on infrastructure, maintaining a scheduler, hand-wiring broker secrets, or building your own log and alerting stack.
Run Lumibot on your own machine with any supported broker:
from lumibot.brokers import Alpaca
from lumibot.traders import Trader
ALPACA_CONFIG = {
"API_KEY": "your-key",
"API_SECRET": "your-secret",
"PAPER": True,
}
broker = Alpaca(ALPACA_CONFIG)
strategy = MyStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Lumibot supports stocks, options, crypto, futures, forex, indexes, and prediction contracts across several broker integrations:
Lumibot can backtest from free daily data, broker data, premium market data, and your own files:
For the deepest historical coverage (stocks, options, futures, indexes), we recommend ThetaData. Use promo code BotSpot10 for 10% off your first order.
Lumibot includes a built-in AI trading agent runtime. Build agents that run identically in backtests and live trading.
self.agents.create(...)openai/gpt-6-luna on medium reasoning; set model= per agent to use any other LiteLLM/ADK-supported provider stringallow_trading=FalseUse BotSpot MCP when you want an AI coding agent to create and edit Lumibot strategies, run historical backtests, inspect artifacts, and iterate without leaving your editor. The maintained setup guide includes client instructions and starter prompts. A paid BotSpot plan is required; public store availability is tracked separately.
Start here:
AI strategies can record proposals, risk notes, actual trading decisions, submitted orders, lessons, open theses, tool calls, and run artifacts as local SQLite and Parquet files. This makes an AI backtest reviewable instead of a black box: you can inspect why the agent traded, which tools it used, what memory it retrieved, and what it remembered for later iterations. Memory events include agent/model-call provenance when they come from agent tools.
Browse and contribute open-source strategies: lumibot-strategies. For hosted strategy discovery with performance, descriptions, visuals, and deploy flows, use the BotSpot marketplace.
Lumibot includes 25+ example strategies covering stocks, options, crypto, futures, forex, and Polymarket prediction contracts:
# Run a simple buy-and-hold backtest
python -m lumibot.example_strategies.stock_buy_and_hold
# Or explore all examples
ls lumibot/example_strategies/
Browse all examples: example_strategies/
Polymarket example: polymarket_prediction_contract.py
External example repo: stock_example_algo shows a minimal strategy repository you can run yourself or adapt inside BotSpot.
Select a data source via environment variable (overrides code):
export BACKTESTING_DATA_SOURCE=thetadata # or yahoo, ibkr, polygon, polymarket
Multi-provider routing by asset type:
export BACKTESTING_DATA_SOURCE='{"default":"thetadata","option":"thetadata","crypto":"ibkr","crypto_future":"ibkr","future":"ibkr","cont_future":"ibkr"}'
Crypto futures/perpetual backtests can route Asset.AssetType.CRYPTO_FUTURE through spot crypto history. Quote symbols are preserved: BTCUSDT uses BTC/USDT spot history when that pair is available from the selected crypto data source. LumiBot must not silently replace a requested USDT, USDC, EUR, or other quote with USD; missing pairs should fail honestly or be changed explicitly in strategy code.
| Data Source | OHLCV | Split Adjusted | Dividends | Dividend Adjusted Returns |
|---|---|---|---|---|
| Yahoo | Yes | Yes | Yes | Yes |
| Alpaca | Yes | Yes | No | No |
| Polygon | Yes | Yes | No | No |
| Tradier | Yes | Yes | No | No |
| Polymarket | Yes | N/A | N/A | N/A |
| Pandas* | Yes | Yes | Yes | Yes |
*Pandas loads CSV files in Yahoo dataframe format, which can contain dividends.
Learn to build, backtest, and deploy trading strategies using AI. Join 2,400+ traders.
We welcome contributions! Here's a video to help you get started: Watch The Video
Steps:
git switch -c my-featurepip install -r requirements_dev.txt && pip install -e .pytestpytest # Run all tests
pytest tests/test_asset.py # Run a specific test file
coverage run; coverage report # Show code coverage
Lumibot can mirror its local parquet caches to AWS S3. See docs/remote_cache.md for configuration.
This software is provided for educational and informational purposes only. It is not financial advice and does not constitute a recommendation to buy or sell any security. Lumibot and BotSpot are not registered broker-dealers or financial advisors. Algorithmic trading involves substantial risk of loss, including the possibility of losses greater than your initial investment. Software bugs and errors can lead to rapid financial losses. Past backtest performance does not guarantee future results. Use this software at your own risk. You are solely responsible for compliance with all applicable laws and regulations regarding the assets you choose to trade.
Affiliate disclosure: some provider links or promo codes, including ThetaData, may support continued Lumibot development.
GNU General Public License v3.0 - View License
See CONTRIBUTING.md for reproducible bugs, examples, tests, and focused pull requests. If LumiBot is useful to your work, star the repository and share an example with another developer.
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
373 followers · starred Sep 2022
31 followers · starred Oct 2023
316 followers · starred Aug 2023
122 followers · starred Jul 2026
AI agents that actually place the trade. 12 brokers, real backtests, stocks options futures forex crypto and prediction markets.
See the codeAI agents that actually place the trade. Twelve broker integrations, real backtests, and stocks, options, futures, forex, crypto and prediction markets. Most AI trading projects stop at a recommendation. LumiBot sends the order.
Read this in 中文 · Español · Français · Deutsch · 日本語 · 한국어 · Português · Русский
pip install lumibot
lumibot demo
That runs a real backtest on free daily data and writes a tearsheet. No API key, no broker account, no configuration.
Then make it yours:
lumibot init my-bot --template ai # writes an ordinary, editable Strategy subclass
lumibot backtest my-bot --days 90
lumibot run my-bot --paper
lumibot init writes the same Python you would have written by hand. Nothing is hidden behind the CLI, and you keep an editable file.
The strategy class can stay the same. The code that starts it must select a
backtest or a broker run. Strategy.backtest(...) always backtests;
Trader.run_all() or strategy.run_live() starts a configured broker. Setting
IS_BACKTESTING=false alone cannot turn a backtest-only example into a broker
runner. Check every AI example's run mode
Prefer traditional trading strategies? Use --template python instead. Write your own rules, indicators, and order logic in a normal Strategy subclass. No AI model or model API key is required.
Python quickstart · AI quickstart · Python examples · AI examples
Strategy lifecycle.AI trading projects have proved that people want agentic trading workflows. Lumibot's edge is that those workflows run inside a real Python trading framework: you can backtest the agent decisions, inspect artifacts, add Python guardrails, paper trade, and connect to brokers without rewriting the strategy.
That matters because an AI trading demo is not the same thing as a trading system. Without backtests and broker-aware strategy code, you are mostly trusting prompts. Lumibot lets you iterate faster: test the agent flow on historical data, see what it would have bought or sold, tighten the Python risk checks, then run the same lifecycle in paper or live trading.
| Project | Main angle | AI agents / teams | Backtest agent decisions | Paper/live broker path | Deterministic Python strategies | Hosted data/deploy/monitoring |
|---|---|---|---|---|---|---|
| Lumibot + BotSpot | Python strategies, flexible AI trading teams, hybrid guardrails, backtests, brokers, hosted deployment | Flexible teams, debates, specialist desks, and deterministic gates | Replayable decisions, orders, traces, artifacts, charts, logs | Yes: Alpaca, IBKR, Tradier, Schwab, Tradovate, ProjectX, Bitunix, Polymarket, selected CCXT | Yes | Hosted data, parallel backtests, deployment, monitoring, MCP, alerts, kill switches |
| TradingAgents | Multi-agent LLM trading research framework | Yes, with a specific research/debate structure | Research/demo oriented | Not the main focus | Limited | No |
| ai-hedge-fund | Educational AI hedge fund with named investor-style agents | Yes, with investor-style personas | Demo/backtest oriented | Not the main focus | Limited | No |
| OpenAlice | One-person Wall Street agent concept | Yes, end-to-end agent concept | Emerging/experimental | Local/self-run focus | Limited | No |
| QuantDinger | Self-hosted AI quant operating system | Yes | Yes | Crypto, IBKR, MT5, Alpaca | Yes | Self-hosted |
| Vibe-Trading | Personal trading agent | Yes | Yes | Agent trading platform focus | Limited | Platform-specific |
| AI-Trader | Agent-native trading platform | Yes | Platform focus | Platform focus | Limited | Platform-specific |
| OpenBB | Financial data platform for analysts, quants, and AI agents | Tooling for agents | Not a strategy backtester | No broker execution framework | No | OpenBB workspace/platform |
| Qlib | AI-oriented quant research platform | Research/ML agents | Quant research backtests | Limited live focus | Research pipelines | No |
See the docs comparison pages for more detail: Lumibot vs TradingAgents, Lumibot vs ai-hedge-fund, Lumibot vs OpenAlice, and Lumibot vs QuantDinger.
| Feature | Lumibot | Backtrader | Freqtrade | Zipline | Backtesting.py | Jesse | vectorbt | NautilusTrader | Hummingbot |
|---|---|---|---|---|---|---|---|---|---|
| Same code: backtest + live | Yes | Yes | Yes (crypto) | No | No | Yes (paid) | No | Yes | Yes (crypto) |
| Stocks | Yes | Yes | No | Yes | Yes | No | Yes | Yes | No |
| Options | Yes | No | No | No | No | No | No | Limited | No |
| Crypto | Yes | Limited | Yes | No | Yes | Yes | Yes | Yes | Yes |
| Prediction markets | Polymarket trading and backtesting | No | No | No | No | No | No | No | Limited/no |
| Futures | Yes | Limited | Crypto only | Partial | Yes | Crypto only | Yes | Yes | Perpetuals/crypto venues |
| Forex | Yes | Outdated | No | No | Yes | No | Yes | Yes | No |
| AI agent runtime | Built-in | No | FreqAI (ML) | No | No | ML pipeline | No | No | Scripts/controllers |
| Broker execution | Alpaca, IBKR, Tradier, Schwab, Tradovate, TopstepX (via ProjectX), Bitunix, Polymarket, selected CCXT | IB only (outdated) | Crypto exchanges | None | None | Crypto exchanges | No | Exchange adapters | Crypto exchanges |
| Hosted deployment path | BotSpot | No | No | No | No | Paid cloud | No | No | Hummingbot Foundation/enterprise ecosystem |
| License | GPL-3.0 | GPL-3.0 | GPL-3.0 | Apache-2.0 | AGPL-3.0 | MIT | Apache-2.0 | LGPL-3.0 | Apache-2.0 |
Switching from Backtrader? See our migration guide for a side-by-side comparison with code examples.
Start with SPY. A research agent analyzes its trend; a trading agent checks the evidence and account, then decides whether to buy, hold, or sell. This example limits a new position to 10% of the simulated portfolio.
You need Python 3.10+ and an OpenAI API key (OPENAI_API_KEY). The default model is openai/gpt-6-luna on medium reasoning. Historical prices come from Yahoo; this backtest does not connect to a broker account. Model usage may incur charges.
python -m pip install "git+https://github.com/Lumiwealth/lumibot.git@version/4.6.3"
export OPENAI_API_KEY="your-openai-api-key"
export BACKTESTING_DATA_SOURCE=yahoo
python -m lumibot.example_strategies.ai_researcher_trader
The command runs a historical backtest of the complete SPY example. Watch the research and trading decisions, then inspect the generated simulated order records. Open its source.
Save as my_ai_strategy.py:
from datetime import datetime
from lumibot.backtesting import YahooDataBacktesting
from lumibot.example_strategies.ai_researcher_trader import ResearcherTraderStrategy
if __name__ == "__main__":
ResearcherTraderStrategy.backtest(
YahooDataBacktesting,
datetime(2026, 4, 6),
datetime(2026, 4, 11),
budget=100_000,
benchmark_asset="SPY",
parameters={"symbol": "SPY", "max_position_pct": 10},
)
python my_ai_strategy.py
Watch the research and trading decisions in the log, then inspect the orders and backtest report. The $100,000 is simulated portfolio capital. The example uses openai/gpt-6-luna on medium reasoning.
Open the complete strategy code to change the prompts, tools, or trading rules. Follow the walkthrough for the agent setup and how to read the results. Prefer rules without AI? Run a conventional Python strategy.
Recorded run (made with Gemini, before GPT-6 Luna became the default): ten fresh agent runs across April 6 to 10, with one verified fill for 15 SPY shares. Inspect the source, decisions, and trade records. Fresh AI decisions can vary.
If this helps you build, star LumiBot so you can find it again and share your strategy with the community.
The large-cap stock example has four agents: a researcher ranks stocks, a bull makes the case, a bear challenges it, and a trader decides what to do.
See the code, run commands, and recorded results. A fresh model run can choose different trades and returns. Replaying saved decisions is different from asking the model to reason again.
Join the free challenge with Rob Grzesik, creator of LumiBot. Follow the training and learn how to turn an idea into an AI trading strategy.
Looking for deeper training? Explore the AI Trading Bootcamp. Prefer a hosted workspace? Explore BotSpot.
🌐 Community
Reddit Community
Discord Community
Start with the open-source docs, then deploy when you are ready: Lumibot documentation · Try a sample Lumibot strategy on BotSpot
Choose a starting point:
Building a product on LumiBot? Partner with LumiBot through funded integrations, open-source maintenance, joint tutorials, or strategic collaboration.
This is a traditional rules-based strategy: buy 10 AAPL shares on the first iteration and hold. It uses Yahoo historical prices, requires internet access, and makes no AI calls. Use Python 3.10 or later.
pip install lumibot
Save this as my_strategy.py:
from datetime import datetime
from lumibot.strategies import Strategy
from lumibot.backtesting import YahooDataBacktesting
class MyStrategy(Strategy):
def on_trading_iteration(self):
if self.first_iteration:
aapl = self.create_order("AAPL", 10, "buy")
self.submit_order(aapl)
MyStrategy.backtest(
YahooDataBacktesting,
datetime(2023, 1, 1),
datetime(2024, 1, 1),
)
python my_strategy.py
After the backtest works, keep the MyStrategy class and replace the final MyStrategy.backtest(...) call with a broker runner. This example uses Alpaca paper trading:
export ALPACA_API_KEY='your-alpaca-key'
export ALPACA_API_SECRET='your-alpaca-secret'
export ALPACA_IS_PAPER=true
python my_strategy.py
import os
from lumibot.brokers import Alpaca
from lumibot.traders import Trader
ALPACA_CONFIG = {
"API_KEY": os.environ["ALPACA_API_KEY"],
"API_SECRET": os.environ["ALPACA_API_SECRET"],
"PAPER": os.environ.get("ALPACA_IS_PAPER", "true").lower() != "false",
}
broker = Alpaca(ALPACA_CONFIG)
strategy = MyStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Start with paper trading. When you are ready for live trading, use the same strategy class and switch your broker account/configuration intentionally.
For full setup guides, broker tutorials, AI-agent docs, examples, and deployment notes, use the Lumibot documentation.
Lumibot now includes a built-in AI agent runtime for financial research, reasoning, debate, risk review, and trade execution. Agents can inspect market data, read filings, query indicators, search memory, compare macro context, and submit orders through the same Lumibot strategy loop used by normal backtests and live trading.
Classic Python strategies are still first-class. Lumibot lets you choose the right level of intelligence: fixed rules, AI agents, or a hybrid where Python handles the hard gates and agents reason through evidence.
Built-in AI agent tools include market/account state, order inspection, DuckDB queries, documentation search, Alpaca news when credentials exist, technical indicators, SEC fundamentals and filings, FRED macro data, local memory, and Telegram notifications.
Start with stock opening range breakout, large-cap stock teams, or macro research.
Explore the public Macro Insight AI: Bridgewater-Style Strategy listing on BotSpot. Inspect their published code and available observations before using them.
These educational implementations have no affiliation or endorsement from the named firms or people. BotSpot plans, model usage, broker access, and data requirements may apply.
An AI trading team is just a group of agents with different jobs inside the same Lumibot strategy. You can build a single-agent strategy, a specialist research flow, bull/bear/neutral teams, model-vs-model debates, deterministic execution gates, or agent reviewers layered on top of normal Python logic.
Here is one example pattern: a researcher gathers evidence, bull and bear agents debate the trade, and a trader agent decides what to buy or sell.
In this pattern, each agent has a job:
The copy-paste example below implements that exact team. It uses GPT-6 Luna on medium reasoning, LumiBot's default model.
To run it with a broker in paper mode, set your AI and Alpaca credentials and run the file:
export OPENAI_API_KEY='your-key-here'
export ALPACA_API_KEY='your-alpaca-key'
export ALPACA_API_SECRET='your-alpaca-secret'
export ALPACA_IS_PAPER=true
python ai_trading_team_bull_bear_leveraged_etf.py
To backtest the same strategy instead, change IS_BACKTESTING = False to IS_BACKTESTING = True in the runner:
export OPENAI_API_KEY='your-key-here'
python ai_trading_team_bull_bear_leveraged_etf.py
Save this as ai_trading_team_bull_bear_leveraged_etf.py. If an AI key is missing or invalid, Lumibot stops and prints a clear provider key error with a link to create a key.
import os
from datetime import datetime
from lumibot.strategies.strategy import Strategy
class AITradingTeamBullBearLeveragedETFStrategy(Strategy):
parameters = {
"universe": ["TQQQ", "SQQQ", "UPRO", "SPXU", "UDOW", "SDOW", "TNA", "TZA", "TECL", "TECS", "SOXL", "SOXS", "WEBL", "WEBS", "FAS", "FAZ", "LABU", "LABD", "ERX", "ERY", "GUSH", "DRIP", "DRN", "DRV", "TMF", "TMV", "NUGT", "DUST"],
}
def initialize(self):
self.sleeptime = "1D"
model = os.environ.get("AI_TRADING_TEAM_MODEL", "openai/gpt-6-luna")
# The first three agents are read-only. They can reason, but cannot trade.
self.agents.create(
name="researcher",
model=model,
allow_trading=False,
system_prompt="Rank the ETFs by upside. Be direct.",
)
self.agents.create(
name="bull",
model=model,
allow_trading=False,
system_prompt="Argue for the strongest money-making trade.",
)
self.agents.create(
name="bear",
model=model,
allow_trading=False,
system_prompt="Point out the biggest risk, briefly.",
)
# Only this final agent can submit orders through Lumibot.
self.agents.create(
name="trader",
model=model,
allow_trading=True,
system_prompt="Buy one ETF from the universe aggressively. Use nearly all cash.",
)
def on_trading_iteration(self):
# Each trading day, pass the same market context through the team.
context = {
"date": self.get_datetime().date().isoformat(),
"universe": self.parameters["universe"],
}
research = self.agents["researcher"].run(
task_prompt="Pick the strongest ETF.",
context=context,
)
bull = self.agents["bull"].run(
task_prompt="Make the bull case.",
context={**context, "research": research.summary},
)
bear = self.agents["bear"].run(
task_prompt="Make the bear case.",
context={**context, "research": research.summary, "bull": bull.summary},
)
self.agents["trader"].run(
task_prompt="Sell anything that is not the pick, then buy the best ETF with nearly all available cash.",
context={**context, "research": research.summary, "bull": bull.summary, "bear": bear.summary},
)
if __name__ == "__main__":
IS_BACKTESTING = False
if IS_BACKTESTING:
from lumibot.backtesting import YahooDataBacktesting
AITradingTeamBullBearLeveragedETFStrategy.backtest(
YahooDataBacktesting,
datetime(2026, 4, 7),
datetime(2026, 5, 22),
)
else:
from lumibot.brokers import Alpaca
from lumibot.traders import Trader
ALPACA_CONFIG = {
"API_KEY": os.environ["ALPACA_API_KEY"],
"API_SECRET": os.environ["ALPACA_API_SECRET"],
"PAPER": os.environ.get("ALPACA_IS_PAPER", "true").lower() != "false",
}
broker = Alpaca(ALPACA_CONFIG)
strategy = AITradingTeamBullBearLeveragedETFStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Backtests are not expected future performance. The point is that the full AI trading team runs inside Lumibot's normal broker and backtest loops, so the decisions, orders, and artifacts are inspectable before you connect real money.
These examples show different ways to organize an AI trading team. Each page explains the inspiration, the agent flow, how to run it with a broker in paper mode, and how to backtest it.
ai_trading_team_citadel_sector_pods.py.ai_trading_team_warren_buffett_value.py.ai_trading_team_ray_dalio_idea_meritocracy.py.ai_trading_team_bill_ackman_concentrated.py.ai_trading_team_bull_bear_leveraged_etf.py.ai_trading_team_bull_bear_large_cap_stocks.py.BotSpot is the managed cloud built around Lumibot. It makes Lumibot easier and cheaper to run because the data, backtesting workers, broker connections, scheduling, monitoring, logs, alerts, and kill switches are already wired together.
BotSpot is not a generic chatbot bolted onto a broker account. Its AI workflows, prompts, MCP tools, backtest setup, broker paths, and deployment flow are built for Lumibot.
BotSpot is the managed path for taking a Lumibot strategy from idea to backtest to paper or live trading. It handles the expensive and fragile parts around the strategy: hosted data setup for supported backtests, parallel backtest runs, broker connections, scheduling, logs, alerts, monitoring, audit history, and kill-switch controls.
This is especially useful when your strategy only needs to run daily or periodically. You get the same Lumibot code path without paying for always-on infrastructure, maintaining a scheduler, hand-wiring broker secrets, or building your own log and alerting stack.
Run Lumibot on your own machine with any supported broker:
from lumibot.brokers import Alpaca
from lumibot.traders import Trader
ALPACA_CONFIG = {
"API_KEY": "your-key",
"API_SECRET": "your-secret",
"PAPER": True,
}
broker = Alpaca(ALPACA_CONFIG)
strategy = MyStrategy(broker=broker)
trader = Trader()
trader.add_strategy(strategy)
trader.run_all()
Lumibot supports stocks, options, crypto, futures, forex, indexes, and prediction contracts across several broker integrations:
Lumibot can backtest from free daily data, broker data, premium market data, and your own files:
For the deepest historical coverage (stocks, options, futures, indexes), we recommend ThetaData. Use promo code BotSpot10 for 10% off your first order.
Lumibot includes a built-in AI trading agent runtime. Build agents that run identically in backtests and live trading.
self.agents.create(...)openai/gpt-6-luna on medium reasoning; set model= per agent to use any other LiteLLM/ADK-supported provider stringallow_trading=FalseUse BotSpot MCP when you want an AI coding agent to create and edit Lumibot strategies, run historical backtests, inspect artifacts, and iterate without leaving your editor. The maintained setup guide includes client instructions and starter prompts. A paid BotSpot plan is required; public store availability is tracked separately.
Start here:
AI strategies can record proposals, risk notes, actual trading decisions, submitted orders, lessons, open theses, tool calls, and run artifacts as local SQLite and Parquet files. This makes an AI backtest reviewable instead of a black box: you can inspect why the agent traded, which tools it used, what memory it retrieved, and what it remembered for later iterations. Memory events include agent/model-call provenance when they come from agent tools.
Browse and contribute open-source strategies: lumibot-strategies. For hosted strategy discovery with performance, descriptions, visuals, and deploy flows, use the BotSpot marketplace.
Lumibot includes 25+ example strategies covering stocks, options, crypto, futures, forex, and Polymarket prediction contracts:
# Run a simple buy-and-hold backtest
python -m lumibot.example_strategies.stock_buy_and_hold
# Or explore all examples
ls lumibot/example_strategies/
Browse all examples: example_strategies/
Polymarket example: polymarket_prediction_contract.py
External example repo: stock_example_algo shows a minimal strategy repository you can run yourself or adapt inside BotSpot.
Select a data source via environment variable (overrides code):
export BACKTESTING_DATA_SOURCE=thetadata # or yahoo, ibkr, polygon, polymarket
Multi-provider routing by asset type:
export BACKTESTING_DATA_SOURCE='{"default":"thetadata","option":"thetadata","crypto":"ibkr","crypto_future":"ibkr","future":"ibkr","cont_future":"ibkr"}'
Crypto futures/perpetual backtests can route Asset.AssetType.CRYPTO_FUTURE through spot crypto history. Quote symbols are preserved: BTCUSDT uses BTC/USDT spot history when that pair is available from the selected crypto data source. LumiBot must not silently replace a requested USDT, USDC, EUR, or other quote with USD; missing pairs should fail honestly or be changed explicitly in strategy code.
| Data Source | OHLCV | Split Adjusted | Dividends | Dividend Adjusted Returns |
|---|---|---|---|---|
| Yahoo | Yes | Yes | Yes | Yes |
| Alpaca | Yes | Yes | No | No |
| Polygon | Yes | Yes | No | No |
| Tradier | Yes | Yes | No | No |
| Polymarket | Yes | N/A | N/A | N/A |
| Pandas* | Yes | Yes | Yes | Yes |
*Pandas loads CSV files in Yahoo dataframe format, which can contain dividends.
Learn to build, backtest, and deploy trading strategies using AI. Join 2,400+ traders.
We welcome contributions! Here's a video to help you get started: Watch The Video
Steps:
git switch -c my-featurepip install -r requirements_dev.txt && pip install -e .pytestpytest # Run all tests
pytest tests/test_asset.py # Run a specific test file
coverage run; coverage report # Show code coverage
Lumibot can mirror its local parquet caches to AWS S3. See docs/remote_cache.md for configuration.
This software is provided for educational and informational purposes only. It is not financial advice and does not constitute a recommendation to buy or sell any security. Lumibot and BotSpot are not registered broker-dealers or financial advisors. Algorithmic trading involves substantial risk of loss, including the possibility of losses greater than your initial investment. Software bugs and errors can lead to rapid financial losses. Past backtest performance does not guarantee future results. Use this software at your own risk. You are solely responsible for compliance with all applicable laws and regulations regarding the assets you choose to trade.
Affiliate disclosure: some provider links or promo codes, including ThetaData, may support continued Lumibot development.
GNU General Public License v3.0 - View License
See CONTRIBUTING.md for reproducible bugs, examples, tests, and focused pull requests. If LumiBot is useful to your work, star the repository and share an example with another developer.
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
373 followers · starred Sep 2022
31 followers · starred Oct 2023
316 followers · starred Aug 2023
122 followers · starred Jul 2026