Skip to content

SDK Reference

The published contract for AlphaProve strategy code: the strategy_sdk.v1 surface. v1.0.0 is frozen: minor versions add only, never remove (see the version policy note below and strategy_sdk/SUPPORTED.txt).

In the AlphaProve editor these names (Signal, StrategyContext, Indicators, CandleSeries, ...) are pre-injected into your namespace by the sandbox executor. User-submitted code MUST NOT import them. Imports are blocked by the AST validator. The signatures below are exactly what the in-editor IntelliSense mirrors.

How this page is generated

This reference is rendered statically from the published type contract (packages/strategy_sdk/v1/__init__.pyi and errors.py) via mkdocstrings. The docs build performs no import of the engine runtime, so the signatures here are the frozen contract, not whatever the engine happens to expose today.

Core types

The single argument to evaluate(ctx) is a StrategyContext; its return value is an optional Signal.

Strategy SDK v1.0.0 — runtime exports.

This module is the published runtime surface for user strategy code AND the engine's own in-process sandbox path. Names re-exported here are the contract: Signal, StrategyContext, Indicators, CandleSeries, Portfolio, Position, TimeframeView, Candle.

The companion __init__.pyi describes the published types for static analysers / Monaco IntelliSense; at runtime Python uses this file and consumers get the concrete engine classes by identity.

v1.0.0 is an honest mirror of the engine's current surface (uppercase Direction, indicator-by-pd.Series signatures, ...). Future minor versions may curate from Langfuse runtime_attr_error:<attr> data; those revisions land as v1.1.0+ ADDITIONS — never breaking removals.

StrategyContext

Bases: Protocol

current_time instance-attribute

current_time: datetime

symbol instance-attribute

symbol: str

timeframe instance-attribute

timeframe: str

bar_index instance-attribute

bar_index: int

current_bar instance-attribute

current_bar: Candle

candles instance-attribute

candles: CandleSeries

indicators instance-attribute

indicators: Indicators

latest_funding_rate instance-attribute

latest_funding_rate: Optional[float]

cvd_offset instance-attribute

cvd_offset: float

htf instance-attribute

htf: Dict[str, TimeframeView]

portfolio instance-attribute

portfolio: Portfolio

state instance-attribute

state: Dict[str, Any]

params instance-attribute

params: Mapping[str, Union[int, float, bool]]

risk instance-attribute

risk: Optional[RiskView]

position property

position: Optional[Position]

get_htf

get_htf(timeframe: str) -> TimeframeView

Signal

Signal(direction: Direction, stop_loss: Optional[float] = ..., take_profit: Optional[float] = ..., confidence: float = ..., setup_id: str = ..., order_type: OrderType = ..., entry_price: Optional[float] = ..., add_to_position: bool = ..., metadata: Optional[Dict[str, Any]] = ..., max_hold_bars: Optional[int] = ..., trailing_stop_distance: Optional[float] = ..., breakeven_at_profit_pct: Optional[float] = ..., risk_pct: Optional[float] = ...)

direction instance-attribute

direction: Direction

stop_loss instance-attribute

stop_loss: Optional[float]

take_profit instance-attribute

take_profit: Optional[float]

confidence instance-attribute

confidence: float

setup_id instance-attribute

setup_id: str

order_type instance-attribute

order_type: OrderType

entry_price instance-attribute

entry_price: Optional[float]

add_to_position instance-attribute

add_to_position: bool

metadata instance-attribute

metadata: Dict[str, Any]

max_hold_bars instance-attribute

max_hold_bars: Optional[int]

trailing_stop_distance instance-attribute

trailing_stop_distance: Optional[float]

breakeven_at_profit_pct instance-attribute

breakeven_at_profit_pct: Optional[float]

risk_pct instance-attribute

risk_pct: Optional[float]

CandleSeries

Bases: Protocol

open property

open: Series

high property

high: Series

low property

low: Series

close property

close: Series

volume property

volume: Series

delta property

delta: Series

buy_volume property

buy_volume: Series

sell_volume property

sell_volume: Series

trade_count property

trade_count: Series

df property

df: DataFrame

Candle

occurred_at instance-attribute

occurred_at: datetime

instrument_id instance-attribute

instrument_id: str

timeframe instance-attribute

timeframe: str

open instance-attribute

open: float

high instance-attribute

high: float

low instance-attribute

low: float

close instance-attribute

close: float

volume instance-attribute

volume: float

buy_volume instance-attribute

buy_volume: float

sell_volume instance-attribute

sell_volume: float

trade_count instance-attribute

trade_count: int

delta instance-attribute

delta: float

Indicators

Bases: Protocol

ema

ema(series: Series, period: int) -> pd.Series

sma

sma(series: Series, period: int) -> pd.Series

rsi

rsi(series: Series, period: int = 14) -> pd.Series

atr

atr(high: Series, low: Series, close: Series, period: int = 14) -> pd.Series

cvd

cvd(delta: Series, offset: float = 0.0) -> pd.Series

choppiness

choppiness(high: Series, low: Series, close: Series, period: int = 14) -> pd.Series

williams_fractals

williams_fractals(high: Series, low: Series, width: int) -> Tuple[pd.Series, pd.Series]

bollinger_bands

bollinger_bands(series: Series, period: int = 20, num_std: float = 2.0) -> Tuple[pd.Series, pd.Series, pd.Series]

macd

macd(series: Series, fast: int = 12, slow: int = 26, signal: int = 9) -> Tuple[pd.Series, pd.Series, pd.Series]

stochastic

stochastic(high: Series, low: Series, close: Series, period: int = 14, smooth_k: int = 3, smooth_d: int = 3) -> Tuple[pd.Series, pd.Series]

obv

obv(close: Series, volume: Series, offset: float = 0.0) -> pd.Series

donchian

donchian(high: Series, low: Series, period: int = 20) -> Tuple[pd.Series, pd.Series]

keltner

keltner(high: Series, low: Series, close: Series, period: int = 20, atr_period: int = 10, mult: float = 2.0) -> Tuple[pd.Series, pd.Series, pd.Series]

roc

roc(series: Series, period: int = 12) -> pd.Series

cci

cci(high: Series, low: Series, close: Series, period: int = 20) -> pd.Series

adx

adx(high: Series, low: Series, close: Series, period: int = 14) -> Tuple[pd.Series, pd.Series, pd.Series]

supertrend

supertrend(high: Series, low: Series, close: Series, period: int = 10, mult: float = 3.0) -> Tuple[pd.Series, pd.Series]

wma

wma(series: Series, period: int) -> pd.Series

trima

trima(series: Series, period: int) -> pd.Series

hull_ma

hull_ma(series: Series, period: int) -> pd.Series

efficiency_ratio

efficiency_ratio(series: Series, period: int = 10) -> pd.Series

kama

kama(series: Series, period: int = 10, fast: int = 2, slow: int = 30) -> pd.Series

williams_r

williams_r(high: Series, low: Series, close: Series, period: int = 14) -> pd.Series

mfi

mfi(high: Series, low: Series, close: Series, volume: Series, period: int = 14) -> pd.Series

cmo

cmo(series: Series, period: int = 14) -> pd.Series

stoch_rsi

stoch_rsi(series: Series, period: int = 14, stoch_period: int = 14, smooth_k: int = 3, smooth_d: int = 3) -> Tuple[pd.Series, pd.Series]

tsi

tsi(series: Series, slow: int = 25, fast: int = 13) -> pd.Series

trix

trix(series: Series, period: int = 15, signal: int = 9) -> Tuple[pd.Series, pd.Series]

fisher_transform

fisher_transform(high: Series, low: Series, period: int = 10) -> Tuple[pd.Series, pd.Series]

inverse_fisher_rsi

inverse_fisher_rsi(series: Series, period: int = 14, smooth_period: int = 9) -> pd.Series

vwap

vwap(high: Series, low: Series, close: Series, volume: Series) -> pd.Series

rolling_vwap

rolling_vwap(high: Series, low: Series, close: Series, volume: Series, period: int = 20) -> pd.Series

pivot_points

pivot_points(high: Series, low: Series, close: Series) -> Tuple[pd.Series, pd.Series, pd.Series, pd.Series, pd.Series]

linreg_slope

linreg_slope(series: Series, period: int = 14) -> pd.Series

linreg_forecast

linreg_forecast(series: Series, period: int = 14, ahead: int = 0) -> pd.Series

linreg_r2

linreg_r2(series: Series, period: int = 14) -> pd.Series

linreg_channel

linreg_channel(series: Series, period: int = 100, num_std: float = 2.0) -> Tuple[pd.Series, pd.Series, pd.Series]

parabolic_sar

parabolic_sar(high: Series, low: Series, af_start: float = 0.02, af_step: float = 0.02, af_max: float = 0.2) -> Tuple[pd.Series, pd.Series]

divergence

divergence(price: Series, osc: Series, width: int = 2, lookback: int = 90, method: str = 'peaks') -> pd.Series

Portfolio

Bases: Protocol

equity instance-attribute

equity: float

cash instance-attribute

cash: float

sizing_equity instance-attribute

sizing_equity: float

open_orders_count instance-attribute

open_orders_count: int

open_positions property

open_positions: Tuple[Position, ...]

position

position(symbol: str) -> Optional[Position]

Position

Bases: Protocol

symbol instance-attribute

symbol: str

side instance-attribute

side: Literal['LONG', 'SHORT']

qty instance-attribute

qty: float

avg_entry_price instance-attribute

avg_entry_price: float

unrealized_pnl instance-attribute

unrealized_pnl: float

unrealized_pnl_pct instance-attribute

unrealized_pnl_pct: float

opened_at instance-attribute

opened_at: datetime

add_count instance-attribute

add_count: int

bars_since_entry instance-attribute

bars_since_entry: int

stop_loss instance-attribute

stop_loss: Optional[float]

take_profit instance-attribute

take_profit: Optional[float]

size property

size: float

TimeframeView

Bases: Protocol

timeframe instance-attribute

timeframe: str

candles instance-attribute

candles: CandleSeries

indicators instance-attribute

indicators: Indicators

expected_bars instance-attribute

expected_bars: int

Errors

The exception taxonomy a strategy author may except against. The engine raises these; future runtimes wrap their own failures into the same hierarchy so strategy code stays portable.

SDK error taxonomy (v1).

These are user-facing exceptions a strategy author should except against. Engine internals raise them; future Tier-A/Tier-B runtimes wrap their own errors into the same hierarchy so user code is portable across runtimes.

SDKError

Bases: Exception

Base class for every error a v1 strategy may encounter.

InvalidSignal

Bases: SDKError

Signal(...) constructed with values the engine refuses.

IndicatorParamError

Bases: SDKError

An indicator was called with an invalid period / series shape.

DataNotAvailable

Bases: SDKError

The strategy requested data the runtime cannot produce (missing HTF window, no orderbook, etc.).

BudgetExceeded

Bases: SDKError

The strategy exceeded a runtime budget (wall-clock, memory, ...).