Everything AlgoDeploy can do. Every indicator, exit rule, risk check, and engine feature — with tier availability and code examples.
Technical indicators available in YAML conditions, the dashboard UI, and the Python Indicators class. All computed as pandas Series from OHLCV data.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
ATR — Average True Range
Measures volatility using the true range over N bars.
atr(14)
|
✓ | ✓ | ✓ | ✓ |
Beta
Rolling beta against a benchmark return series over N bars.
indicators.beta(benchmark_series, 60)
|
— | ✓ | ✓ | ✓ |
Bollinger Bands
Upper, middle, and lower bands based on SMA ± N standard deviations. Use bollinger_upper, bollinger_mid, bollinger_lower in YAML.
bollinger_upper(20) bollinger_lower(20,2.5)
|
✓ | ✓ | ✓ | ✓ |
EMA — Exponential Moving Average
Exponentially weighted moving average of the close price.
ema(21)
|
✓ | ✓ | ✓ | ✓ |
MACD
Moving Average Convergence Divergence. Returns MACD line, signal line, and histogram. Use macd_line, macd_signal in YAML.
macd(12,26,9) macd_line(12,26,9) macd_signal(12,26,9)
|
✓ | ✓ | ✓ | ✓ |
Percentage Change
Close-to-close percentage change over N bars.
pct_change(5)
|
✓ | ✓ | ✓ | ✓ |
Rolling High
Highest close over the last N bars.
high(52)
|
✓ | ✓ | ✓ | ✓ |
Rolling Low
Lowest close over the last N bars.
low(10)
|
✓ | ✓ | ✓ | ✓ |
RSI — Relative Strength Index
Momentum oscillator measuring speed and magnitude of price changes. 0–100 scale.
rsi(14)
|
✓ | ✓ | ✓ | ✓ |
SMA — Simple Moving Average
Arithmetic mean of the close price over N bars.
sma(40)
|
✓ | ✓ | ✓ | ✓ |
VWAP — Volume-Weighted Average Price
Cumulative volume-weighted average price. No arguments.
vwap()
|
✓ | ✓ | ✓ | ✓ |
Operators for building entry conditions in YAML configs and the dashboard. Python API users can also use the rule factory functions.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
> Greater Than
close > sma(50)
|
✓ | ✓ | ✓ | ✓ |
< Less Than
close < sma(40)
|
✓ | ✓ | ✓ | ✓ |
>= Greater or Equal
rsi(14) >= 30
|
✓ | ✓ | ✓ | ✓ |
<= Less or Equal
rsi(14) <= 70
|
✓ | ✓ | ✓ | ✓ |
== Equal
close == sma(20)
|
✓ | ✓ | ✓ | ✓ |
!= Not Equal
close != sma(20)
|
✓ | ✓ | ✓ | ✓ |
crosses_above
Value crossed above threshold at the current bar.
ema(9) crosses_above ema(21)
|
✓ | ✓ | ✓ | ✓ |
crosses_below
Value crossed below threshold at the current bar.
ema(9) crosses_below ema(21)
|
✓ | ✓ | ✓ | ✓ |
within X% of
True when value is within X percent of another value. Great for proximity-to-support entries.
close within 0.3% of low(10)
|
✓ | ✓ | ✓ | ✓ |
above() — Python Rule Factory
Programmatic rule: latest indicator value must exceed threshold.
above(lambda ind: ind.rsi(14), 30)
|
— | ✓ | ✓ | ✓ |
below() — Python Rule Factory
Programmatic rule: latest indicator value must be below threshold.
below(lambda ind: ind.sma(40), "close")
|
— | ✓ | ✓ | ✓ |
between() — Python Rule Factory
Programmatic rule: value must fall within a range [low, high].
between(lambda ind: ind.rsi(14), 20, 40)
|
— | ✓ | ✓ | ✓ |
rising() — Python Rule Factory
True when current value exceeds value N bars ago.
rising(lambda ind: ind.ema(21), lookback=5)
|
— | ✓ | ✓ | ✓ |
CompositeRule — AND Composition
Combine multiple rules; all must pass for a signal.
CompositeRule([rule_a, rule_b, rule_c])
|
— | ✓ | ✓ | ✓ |
Custom Rule Subclass
Implement evaluate(indicators) → (bool, str) for any custom logic.
class MyRule(Rule): ...
|
— | ✓ | ✓ | ✓ |
Available in YAML exit: block, dashboard Exit Rules section, and programmatically via on_bar().
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
Hard Stop Loss
Close entire position if loss exceeds a fixed percentage of entry.
hard_stop: "2.75%"
|
✓ | ✓ | ✓ | ✓ |
Scale Out
Sell a percentage of the position when a profit target is reached. Lock in partial gains.
scale_out:
target: "12%"
percent: "60%"
|
— | ✓ | ✓ | ✓ |
Take Profit
Close entire position at a fixed profit target. Set to 0% to disable.
take_profit: "20%"
|
✓ | ✓ | ✓ | ✓ |
Trailing Stop
Activates after a gain threshold, then trails the peak price by a configurable ratio of the run-up.
trail_activation: "1.5%"
trail_ratio: 0.38
|
— | ✓ | ✓ | ✓ |
Control how many shares to buy per trade. All implement the PositionSizer interface.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
Fixed Dollar
Allocate a fixed dollar amount per position. Default: $10,000.
FixedDollar(amount=10_000)
|
— | ✓ | ✓ | ✓ |
Fixed Fractional
Risk a fixed percentage of equity per trade. Requires a stop price. Default: 1% risk, 25% max.
FixedFractional(risk_pct=0.01, max_pct=0.25)
|
— | ✓ | ✓ | ✓ |
Kelly Criterion
Optimal sizing based on historical win rate and average win/loss ratio. Fractional Kelly with safety cap.
KellyCriterion(fraction=0.5, max_pct=0.20)
|
— | ✓ | ✓ | ✓ |
Volatility Scaled
Size based on ATR to target a fixed dollar amount of daily volatility per position.
VolatilityScaled(target_risk=500, max_pct=0.25)
|
— | ✓ | ✓ | ✓ |
Pre-trade checks that run before every buy order. Configurable via RiskConfig with presets: conservative(), moderate(), aggressive().
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
Daily Loss Limit
Rejects orders if daily P&L exceeds dollar or percentage threshold.
max_daily_loss=2000, max_daily_loss_pct=0.02
|
— | ✓ | ✓ | ✓ |
Drawdown Circuit Breaker
Halts all trading if cumulative drawdown breaches the limit.
max_drawdown_pct=0.10
|
— | ✓ | ✓ | ✓ |
Max Open Positions
Caps the number of simultaneous open positions.
max_open_positions=10
|
— | ✓ | ✓ | ✓ |
Min Position Size
Rejects orders below a minimum dollar value.
min_position_dollar=500
|
— | ✓ | ✓ | ✓ |
Per-Trade Risk Limit
Caps dollar risk per trade as a percentage of equity. Requires stop price.
max_loss_per_trade_pct=0.02
|
— | ✓ | ✓ | ✓ |
Portfolio Exposure Limit
Caps total portfolio exposure as a percentage of equity.
max_portfolio_exposure_pct=0.80
|
— | ✓ | ✓ | ✓ |
Position Size Limit
Caps individual position value as percentage of equity and/or dollar amount.
max_position_pct=0.25, max_position_dollar=50000
|
— | ✓ | ✓ | ✓ |
Stop Loss Required
Rejects all orders that don't include a stop price. Forces risk discipline.
require_stop_loss=True
|
— | ✓ | ✓ | ✓ |
All data sources return normalized OHLCV DataFrames. Implement the DataSource interface for custom sources.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
Alpaca Markets (Equities + Crypto)
Historical bars from Alpaca API. Supports 1min, 5min, 15min, 30min, 1h, 1d. Auto-routes crypto symbols (BTC/USD, ETH/USD, etc.) to the crypto data feed. Free API key required.
data:
provider: alpaca
# Equities: symbol: SPY
# Crypto: symbol: BTC/USD
|
— | ✓ | ✓ | ✓ |
CSV Files
Bring your own data. Files named {symbol}.csv in a directory. Configurable timestamp column.
data:
provider: csv
path: ./data/
|
✓ | ✓ | ✓ | ✓ |
Custom DataSource
Implement DataSource.load(symbol, start, end) for any API, database, or file format.
class MySource(DataSource): ...
|
— | ✓ | ✓ | ✓ |
Yahoo Finance
Free daily data via yfinance. No API key needed. Auto-adjusts for splits and dividends.
data:
provider: yfinance
|
✓ | ✓ | ✓ | ✓ |
Core backtest engine capabilities, optimization tools, and analysis features.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
Commission Model
Per-share commission deducted on every fill.
commission_per_share: 0.005
|
— | ✓ | ✓ | ✓ |
Config-Driven Strategy (No Code)
Build strategies entirely from YAML or the dashboard. No Python needed.
algodeploy backtest my_strategy.yaml
|
— | ✓ | ✓ | ✓ |
Custom Regime Filter
Abstract base for your own market regime classification logic.
class MyRegime(RegimeFilter): ...
|
— | — | ✓ | ✓ |
Event-Driven Backtest
Bar-by-bar execution with on_bar(bar, ctx). Full state management, multi-leg entries, custom logic.
def on_bar(self, bar, ctx):
ctx.buy(shares, reason="entry")
|
— | ✓ | ✓ | ✓ |
Fill Modes
Fill on same-bar close or next-bar open for more realistic execution.
fill_on="next_open"
|
— | ✓ | ✓ | ✓ |
Long & Short Positions
Signal -1 opens short. Full flip handling between long and short.
ctx.short(shares, reason="breakdown")
|
— | ✓ | ✓ | ✓ |
Monte Carlo Simulation
Reshuffle actual trade returns N times. Confidence intervals on returns, drawdown, and ruin probability.
MonteCarloSimulation(results, n_simulations=1000)
|
— | — | ✓ | ✓ |
Parameter Sweep
Grid search over all parameter combinations. Data cached. Heatmap reports.
ParameterSweep(engine, {"period": [20,40,60]})
|
— | — | ✓ | ✓ |
Slippage Model
Basis-point slippage applied adversely on every fill.
slippage_bps: 5.0
|
— | ✓ | ✓ | ✓ |
SMA Regime Filter
Price above/below SMA classifies BULL/BEAR. No external data needed.
SMARegimeFilter(period=200)
|
— | — | ✓ | ✓ |
Vectorized Backtest
Fast signal-array engine. Return a Series of -1/0/1 from generate_signals().
def generate_signals(self, data):
return (sma50 > sma200).astype(int)
|
✓ | ✓ | ✓ | ✓ |
VIX Regime Filter
Classifies bars by VIX level: CALM / MODERATE / ELEVATED / PANIC. Configurable thresholds.
VIXRegimeFilter(thresholds=[13,18,25,30])
|
— | — | ✓ | ✓ |
Walk-Forward Optimization
N windows of in-sample optimization + out-of-sample testing. Detects overfitting via degradation ratio.
WalkForwardSweep(engine, params, n_windows=5)
|
— | — | ✓ | ✓ |
Automated scan-size-check-execute loop with broker integration.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
| Alpaca Broker Integration Paper + live trading. Market, limit, stop, stop-limit orders. Positions, quotes, historical bars, market clock. | — | ✓ | ✓ | ✓ |
Custom Broker Adapter
Implement BrokerInterface for any broker. Standardized Account, Position, Order models.
|
— | ✓ | ✓ | ✓ |
Dry Run Mode
Log orders without placing them. Validate your strategy before risking real capital.
TraderRunner(dry_run=True)
|
— | ✓ | ✓ | ✓ |
EOD Position Close
Optionally close all positions before market close. Configurable minutes-before-close.
close_positions_at_eod=True, eod_close_minutes_before=15
|
— | ✓ | ✓ | ✓ |
Signal Scanner
Evaluates rules against a symbol universe. Produces qualified candidates with pre-computed exit levels.
Scanner(rules, universe=["AAPL","MSFT",...])
|
— | ✓ | ✓ | ✓ |
| Timeframes 1-minute, 5-minute, 15-minute, 30-minute, 1-hour, and daily bars. | — | ✓ | ✓ | ✓ |
TraderRunner
Main trading loop: scan → risk check → size → execute. State machine with callbacks.
runner = TraderRunner(strategy, broker, risk_config)
runner.start()
|
— | ✓ | ✓ | ✓ |
Browser-based monitoring and control. WebSocket real-time updates. No code required for backtesting.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
| Account SummaryCash, portfolio value, buying power at a glance. | — | ✓ | ✓ | ✓ |
| Alert FeedReal-time risk alerts: warnings at 80% of limits, critical at breach. | — | ✓ | ✓ | ✓ |
| Backtest from BrowserConfigure and run backtests directly from the dashboard. Preset strategies, full form, instant results. | — | ✓ | ✓ | ✓ |
| Equity Curve ChartLive updating equity curve with time axis. | — | ✓ | ✓ | ✓ |
| Open Positions TableSymbol, side, quantity, entry, current, P&L, and P&L %. | — | ✓ | ✓ | ✓ |
| Risk Status PanelCurrent risk level (NORMAL/WARNING/CRITICAL/HALTED), drawdown %, exposure %. | — | ✓ | ✓ | ✓ |
| Runner ControlsStop and resume the trading runner from the browser. | — | ✓ | ✓ | ✓ |
| Trade HistoryRecent trades with symbol, side, quantity, entry/exit price, P&L, and status. | — | ✓ | ✓ | ✓ |
| WebSocket Real-Time UpdatesPushes account, positions, risk, and runner state every 5 seconds. | — | ✓ | ✓ | ✓ |
Interactive HTML reports, CSV data exports, and JSON summaries.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
CSV & JSON Export
Trade log CSV, equity curve CSV, and full metrics summary JSON.
results.save("./output/")
|
— | ✓ | ✓ | ✓ |
Equity Curve Chart
Basic equity curve plot with return, Sharpe, and max drawdown subtitle.
results.plot("chart.html")
|
✓ | ✓ | ✓ | ✓ |
Full Backtest Report
12-metric dashboard, equity chart, drawdown chart, per-regime breakdown, sortable trade log. Interactive HTML.
results.to_html("report.html")
|
— | ✓ | ✓ | ✓ |
Monte Carlo Report
Return distribution histogram, equity fan chart with percentile bands, ruin probability, 6 summary cards.
mc_results.to_html("mc_report.html")
|
— | — | ✓ | ✓ |
Parameter Sweep Report
Best params summary, sortable results table, Sharpe/Return/Drawdown heatmaps for 2-param sweeps.
sweep_results.to_html("sweep.html")
|
— | — | ✓ | ✓ |
Walk-Forward Report
IS vs OOS bar chart, degradation ratio, window detail table with per-window metrics.
wf_results.to_html("walkforward.html")
|
— | — | ✓ | ✓ |
Audit logging, failure detection, health monitoring, and user notification for live trading.
| Feature | FREE | $99 | $249 | $499 |
|---|---|---|---|---|
| Immutable Audit Trail Every order attempt, execution, and failure logged with timestamps, order details, and outcome. Tamper-evident append-only log. | — | ✓ | ✓ | ✓ |
| Error Classification Automatic categorization of failures: broker rejection, authentication expiry, network timeout, insufficient funds, and more. Clear root-cause attribution. | — | ✓ | ✓ | ✓ |
| Failure Notifications Real-time dashboard alerts on any execution failure. Ensures you know immediately when an order doesn't go through. | — | ✓ | ✓ | ✓ |
| Broker Health Checks Proactive validation of broker connection, authentication tokens, and account status before each trading session. | — | ✓ | ✓ | ✓ |
| Live Trading Acceptance Gate In-product risk acknowledgment required before enabling live trading. Users confirm they understand execution risks, broker dependencies, and their sole responsibility for monitoring. | — | ✓ | ✓ | ✓ |
| Webhook Failure Alerts Send execution failure alerts to external webhooks for integration with Slack, email, PagerDuty, or custom monitoring. | — | — | ✓ | ✓ |
Telegram Notifications
Native Telegram bot integration. Send critical alerts (order failures, broker errors, risk halts) and warnings to a Telegram chat with Markdown formatting.
notifications:
telegram:
bot_token: "..."
chat_id: "..."
|
— | — | ✓ | ✓ |
Discord Notifications
Native Discord webhook integration with embed formatting. Color-coded severity (red for critical, amber for warning). Drop in a channel webhook URL and you're done.
notifications:
discord:
webhook_url: "..."
|
— | — | ✓ | ✓ |
All tiers include the full source code. Start backtesting in minutes.
Get AlgoDeploy — From $99