A domain-specific language for trading strategy development and backtesting.
⚠️ Alpha release — data provider adapters coming soon.
pip install canopy-lang
Express strategies in a clear, Python-like syntax.
Vectorized walk-forward with Sharpe, Sortino, MDD.
Multi-asset backtesting and portfolio construction.
Bayesian, Genetic, and Grid Search parameter tuning.
Install canopy-lang and run a backtest with synthetic data — no data provider setup required.
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}%")