coding-kitties/investing-algorithm-framework: Framework for developing, backtesting, and deploying automated trading algorithms and trading bots.
Marcus Rivera
Full-stack developer and agent builder. Covers coding assistants and dev tools.
# Investing Algorithm Framework: The Complete Python Toolkit for Building, Testing, and Deploying Trading Algorithms 🚀 *From zero to live-trading bot — with backtesting, strategy comparison, and clo...
Investing Algorithm Framework: The Complete Python Toolkit for Building, Testing, and Deploying Trading Algorithms 🚀
From zero to live-trading bot — with backtesting, strategy comparison, and cloud deployment — all in one elegant Python framework.
In a world drowning in half-baked trading libraries and Jupyter notebooks that break the moment you look away, the Investing Algorithm Framework stands apart. It doesn't just backtest your strategy and hand you a number. It gives you the entire loop — from ideation to signal analysis, from rigorous comparison to production deployment — wrapped in a developer experience that feels genuinely thoughtful.
With 1,087+ stars, an Apache 2.0 license, and a thriving community on Discord and Reddit, this framework has quietly become one of the most complete open-source quant trading toolkits in the Python ecosystem. Let's dive in and see why.
🔗 Source Code: coding-kitties/investing-algorithm-framework
🎯 What Makes This Framework Different?
Most quantitative trading frameworks stop at the backtest. You get a Sharpe ratio, maybe a drawdown chart, and then you're on your own — stitching together deployment scripts, writing comparison logic, and praying your local notebook doesn't crash before you find the best strategy.
The Investing Algorithm Framework is built around a complete lifecycle:
Create strategies → Vector backtest for signal analysis → Compare them in a single report → Event-backtest the most promising candidates → Deploy the winner to production.
This isn't a collection of utilities. It's an opinionated workflow designed to take you from idea to live trading with confidence.
✨ Core Philosophy
| Principle | How It's Implemented |
|---|---|
| Full Loop | Create, backtest, compare, deploy — no external glue needed |
| Signal-First | Vector backtesting lets you validate strategy logic before committing to full simulation |
| Data-Driven Comparison | Interactive HTML dashboard ranks and filters all strategies side by side |
| Production-Ready | Deploy to AWS Lambda, Azure Functions, or run locally with minimal config |
| Statistical Rigor | Monte Carlo simulations and permutation testing to separate skill from luck |
🏗️ Architecture at a Glance
The framework is organized around a clean, modular architecture that separates concerns beautifully:
- Strategies — Define your trading logic as composable, testable units
- Vector Backtester — Lightning-fast signal analysis on historical data
- Event-Driven Backtester — Realistic simulation with order execution, slippage, and portfolio management
- Comparison Engine — Generates a self-contained HTML dashboard with 30+ metrics
- Deployment Layer — Push your winning strategy to the cloud with a single command
┌─────────────┐ ┌──────────────────┐ ┌───────────────────┐
│ Strategy │───▶│ Vector Backtest │───▶│ Compare & Rank │
│ Creation │ │ (Signal Analysis) │ │ (HTML Dashboard) │
└─────────────┘ └──────────────────┘ └────────┬──────────┘
│
▼
┌──────────────────┐ ┌───────────────────┐
│ Deployment │◀───│ Event-Driven │
│ (AWS / Azure / │ │ Backtesting │
│ Local) │ │ (Realistic Sim) │
└──────────────────┘ └───────────────────┘
📊 30+ Metrics at Your Fingertips
When you generate a comparison report, you're not just getting a Sharpe ratio and a "good luck." The framework computes a comprehensive suite of risk and performance metrics for every strategy you test:
- CAGR — Compound Annual Growth Rate
- Sharpe Ratio — Risk-adjusted return
- Sortino Ratio — Downside risk-adjusted return
- Calmar Ratio — Return vs. maximum drawdown
- Value at Risk (VaR) — Tail risk quantification
- Conditional VaR (CVaR) — Expected shortfall beyond VaR
- Max Drawdown — Worst peak-to-trough decline
- Recovery Factor — How quickly the strategy bounces back
- Win Rate, Profit Factor, Exposure — And many more...
💡 Pro Tip: The interactive HTML dashboard lets you sort and filter by any of these metrics. So if you care more about downside protection than raw returns, just sort by Sortino or Max Drawdown and the best candidate rises to the top.
⚡ Two-Phase Backtesting: Vector + Event-Driven
This is where the framework truly shines. Instead of forcing you into a single backtesting paradigm, it gives you two complementary approaches:
Phase 1: Vector Backtesting (Signal Analysis)
Before you commit to a full event-driven simulation (which can be slow), you can run a vectorized backtest to quickly validate your strategy logic. Think of it as a "smoke test" for your signals.
from investing_algorithm_framework import (
Strategy,
VectorBacktest,
PositionSizer
)
class MomentumStrategy(Strategy):
"""Buy when 20-day SMA crosses above 50-day SMA."""
def get_symbols(self):
return ["AAPL", "MSFT", "GOOGL", "AMZN"]
def get_data(self, symbol, lookback):
# Framework handles data fetching automatically
return self.market_data.get(symbol, lookback)
def generate_signals(self, data):
sma_short = data["close"].rolling(20).mean()
sma_long = data["close"].rolling(50).mean()
return (sma_short > sma_long).astype(int) * 2 - 1 # +1 or -1
# Run vector backtest — fast, no order simulation
vector_bt = VectorBacktest(
strategy=MomentumStrategy(),
start_date="2020-01-01",
end_date="2024-01-01",
)
result = vector_bt.run()
print(f"Signal accuracy: {result.signal_hit_rate:.1%}")
print(f"Total signals generated: {result.total_signals}")
Phase 2: Event-Driven Backtesting (Realistic Simulation)
Once your signals look promising, promote the strategy to a full event-driven backtest. This simulates realistic order execution, position sizing, portfolio rebalancing, and transaction costs.
from investing_algorithm_framework import (
EventDrivenBacktest,
PortfolioConfiguration
)
portfolio_config = PortfolioConfiguration(
initial_capital=100_000,
position_sizer=PositionSizer.EQUAL_WEIGHT,
max_positions=10,
commission=0.001 # 0.1% per trade
)
event_bt = EventDrivenBacktest(
strategy=MomentumStrategy(),
portfolio_configuration=portfolio_config,
start_date="2020-01-01",
end_date="2024-01-01",
)
event_result = event_bt.run()
print(f"CAGR: {event_result.cagr:.2%}")
print(f"Sharpe Ratio: {event_result.sharpe_ratio:.2f}")
print(f"Max Drawdown: {event_result.max_drawdown:.2%}")
🔑 Key Insight: The two-phase approach saves you enormous amounts of time. Instead of waiting for a full event-driven backtest to tell you your signals are garbage, you find out in seconds with vector backtesting.
⚔️ Multi-Strategy Comparison Dashboard
This is the killer feature. After backtesting multiple strategies, the framework generates a self-contained HTML dashboard that lets you:
- 📈 Overlay equity curves from all strategies on a single chart
- 📉 Compare drawdown profiles side by side
- 🗓️ View monthly heatmaps with return/growth toggles
- 📊 Rank by any metric — Sharpe, Sortino, CAGR, Max DD, you name it
- 🎯 See return scenario projections — good, average, bad, and very bad year estimates
- 📉 Benchmark comparison — beat-rate analysis vs. Buy & Hold, DCA, risk-free rate, or custom benchmarks
- 🪟 Multi-window robustness — test across different time periods with window coverage analysis
from investing_algorithm_framework import StrategyComparison
comparison = StrategyComparison(
strategies=[
MomentumStrategy(),
MeanReversionStrategy(),
BreakoutStrategy(),
PairsTradingStrategy(),
],
start_date="2018-01-01",
end_date="2024-01-01",
benchmark="SPY", # Compare against S&P 500
)
# Generates a self-contained HTML file
report = comparison.run()
report.save("strategy_comparison.html")
report.open() # Opens in your default browser
The dashboard is fully self-contained — a single HTML file with embedded charts and data. No server needed. Share it with your team, attach it to a research note, or just keep it for your own reference.
🔀 Monte Carlo & Permutation Testing
Here's a feature that separates serious quant work from curve-fitting theater. The framework includes Monte Carlo simulation and permutation testing to assess the statistical robustness of your strategies.
The question it answers: "Could my backtest results have happened by pure chance?"
from investing_algorithm_framework import PermutationTest
permutation = PermutationTest(
strategy=MomentumStrategy(),
start_date="2020-01-01",
end_date="2024-01-01",
n_simulations=1000,
)
result = permutation.run()
print(f"P-value: {result.p_value:.4f}")
print(f"Strategy outperformed {result.percentile_rank:.1f}% of random permutations")
if result.is_significant(alpha=0.05):
print("✅ Strategy performance is statistically significant")
else:
print("⚠️ Results could be due to chance — proceed with caution")
This kind of statistical rigor is typically reserved for institutional desks with custom-built infrastructure. Having it available in an open-source Python framework is genuinely remarkable.
🧮 Cross-Sectional Pipelines
For strategies that operate across a universe of assets (think: factor investing, sector rotation, momentum ranking), the framework provides cross-sectional pipelines that let you rank, filter, and score entire universes every iteration.
from investing_algorithm_framework import Pipeline, Factor
momentum_pipeline = Pipeline(
name="momentum_ranking",
universe=["AAPL", "MSFT", "GOOGL", "AMZN", "META",
"NVDA", "TSLA", "JPM", "V", "JNJ"],
factors=[
Factor("momentum_12_1", weight=0.5), # 12-month return, skip last month
Factor("volatility", weight=-0.3), # Lower vol preferred
Factor("market_cap", weight=0.2), # Slight large-cap tilt
],
top_n=5, # Select top 5 stocks each rebalance
rebalance_frequency="monthly",
)
This produces a clean factor table each iteration — exactly the kind of structured output that makes systematic strategies easy to reason about and debug.
🚀 Deployment: From Backtest to Live Trading
Once you've identified the winning strategy, the framework lets you deploy it with minimal friction:
Local Deployment
from investing_algorithm_framework import AlgorithmRunner
runner = AlgorithmRunner(
strategy=MomentumStrategy(),
portfolio_configuration=portfolio_config,
mode="live",
broker="alpaca", # Or any supported broker
)
runner.run() # Starts live trading loop
Cloud Deployment
The framework supports deployment to AWS Lambda and Azure Functions, letting you run your trading algorithm in the cloud without managing servers. Perfect for strategies that only need to execute at specific intervals (e.g., daily rebalancing).
☁️ Cloud Tip: For interval-based strategies (e.g., daily rebalance at market open), deploying to a serverless function is both cheaper and more reliable than running a persistent server.
🛠️ Quick Start
Getting up and running takes about 60 seconds:
Installation
# Clone the repository
git clone https://github.com/coding-kitties/investing-algorithm-framework.git
cd investing-algorithm-framework
pip install investing-algorithm-framework
Your First Strategy in 3 Steps
Step 1: Define your strategy
from investing_algorithm_framework import Strategy, PositionSizer
class SimpleMomentum(Strategy):
name = "simple_momentum"
def get_symbols(self):
return ["AAPL", "MSFT", "GOOGL"]
def generate_signals(self, data):
# Buy when price is above 20-day SMA
sma = data["close"].rolling(20).mean()
return (data["close"] > sma).astype(int) * 2 - 1
Step 2: Backtest it
from investing_algorithm_framework import EventDrivenBacktest, PortfolioConfiguration
bt = EventDrivenBacktest(
strategy=SimpleMomentum(),
portfolio_configuration=PortfolioConfiguration(
initial_capital=50_000,
position_sizer=PositionSizer.EQUAL_WEIGHT,
),
start_date="2021-01-01",
end_date="2024-01-01",
)
result = bt.run()
result.summary() # Prints all 30+ metrics
result.plot() # Generates equity curve and drawdown charts
Step 3: Deploy
# Switch from backtest to live mode
from investing_algorithm_framework import AlgorithmRunner
runner = AlgorithmRunner(
strategy=SimpleMomentum(),
portfolio_configuration=PortfolioConfiguration(
initial_capital=50_000,
position_sizer=PositionSizer.EQUAL_WEIGHT,
),
mode="live",
)
runner.run()
Three steps. Strategy → Backtest → Deploy. No glue code, no notebook gymnastics.
📐 How It Compares
| Feature | Investing Algorithm Framework | Backtrader | Zipline | VectorBT |
|---|---|---|---|---|
| Vector Backtesting | ✅ | ❌ | ❌ | ✅ |
| Event-Driven Backtesting | ✅ | ✅ | ✅ | ❌ |
| Multi-Strategy Comparison | ✅ (HTML Dashboard) | ❌ | ❌ | Partial |
| Monte Carlo / Permutation | ✅ | ❌ | ❌ | ❌ |
| Cross-Sectional Pipelines | ✅ | ❌ | ❌ | ❌ |
| Built-in Deployment | ✅ (AWS/Azure/Local) | ❌ | ❌ | ❌ |
| 30+ Metrics | ✅ | Partial | Partial | ✅ |
| Active Maintenance (2024+) | ✅ | ⚠️ | ⚠️ | ✅ |
| Self-Contained Reports | ✅ | ❌ | ❌ | Partial |
The framework occupies a unique niche: it combines the signal analysis speed of vectorized tools like VectorBT with the realistic simulation of event-driven engines like Backtrader, then adds deployment and comparison capabilities that neither offers.
🌐 Community & Ecosystem
The project isn't just code — it's a growing community:
- Discord Server — Active community for questions, strategy discussions, and feature requests
- Reddit: r/InvestingBots — Share strategies, results, and get feedback
- Documentation — Comprehensive docs with tutorials and API reference
- Sponsored by Finterion — Industry backing signals real-world adoption
🏁 Final Thoughts
The Investing Algorithm Framework solves a problem that most quant developers don't even realize they have until they've wasted weeks cobbling together disparate tools. It's not just a backtester. It's not just a deployment tool. It's the connective tissue between strategy ideation and live trading — and it does it with a level of polish that's rare in open-source quant software.
What we love:
- ✅ The two-phase backtesting (vector → event-driven) is genuinely brilliant for iteration speed
- ✅ The self-contained HTML comparison dashboard eliminates the need for custom visualization code
- ✅ Monte Carlo and permutation testing bring institutional-grade rigor to open source
- ✅ Built-in deployment means your strategy doesn't die in a Jupyter notebook
- ✅ Cross-sectional pipelines enable sophisticated multi-asset strategies out of the box
- ✅ Active maintenance with regular updates (latest: May 2026)
Where it could grow:
- 📝 More broker integrations beyond the current offerings
- 📝 Options and futures support would unlock additional strategy types
- 📝 More real-world tutorial notebooks for common strategy patterns
The verdict: If you're building trading algorithms in Python and you want a framework that respects the entire workflow — not just the backtest — the Investing Algorithm Framework is the best open-source option available today. It's opinionated in all the right ways, comprehensive where it matters, and backed by a community that clearly cares about doing quantitative trading properly.
⭐ Star it. Install it. Build something real.
pip install investing-algorithm-framework
Licensed under Apache 2.0. Created and maintained by coding-kitties.
📦 GitHub Repository: coding-kitties/investing-algorithm-framework | ⭐ Star the project if you find it useful!
📦 GitHub: coding-kitties/investing-algorithm-framework | 📄 License: Apache 2.0 | ⭐ Star the repo if you find it useful!