canopy-lang

Canopy

A domain-specific language for trading strategy development and backtesting.

⚠️ Alpha release — data provider adapters coming soon.

pip install canopy-lang

What's in the box

Intuitive DSL

Express strategies in a clear, Python-like syntax.

Backtest Engine

Vectorized walk-forward with Sharpe, Sortino, MDD.

Portfolio Mode

Multi-asset backtesting and portfolio construction.

Optimizers

Bayesian, Genetic, and Grid Search parameter tuning.

Quickstart

Install canopy-lang and run a backtest with synthetic data — no data provider setup required.

quickstart.py
import pandas as pd
import numpy as np
from canopy.domain.timeseries import TimeSeries
from canopy.domain.strategy import MACrossoverStrategy
from canopy.adapters.engines.simple_engine import SimpleBacktestEngine
from canopy.application.run_backtest import RunBacktestUseCase

# Synthetic OHLC
dates = pd.date_range("2024-01-01", periods=252, freq="D")
np.random.seed(42)
close = 100 + np.cumsum(np.random.randn(252) * 2)
ts = TimeSeries(
    open=pd.Series(close - 0.5, index=dates),
    high=pd.Series(close + 1, index=dates),
    low=pd.Series(close - 1, index=dates),
    close=pd.Series(close, index=dates),
    volume=pd.Series([1_000_000] * 252, index=dates),
)

strategy = MACrossoverStrategy(name="SMA 10/30", fast_period=10, slow_period=30)
engine = SimpleBacktestEngine()
use_case = RunBacktestUseCase(engine)
backtest, metrics = use_case.execute(strategy, ts, initial_capital=10000, commission=0.001)

print(f"Sharpe: {metrics.sharpe_ratio:.2f}")
print(f"Return: {metrics.total_return:.2f}%")
print(f"MDD:    {metrics.max_drawdown:.2f}%")