Complete DSL Primitive Reference — 506 Primitives Across 16 Categories
packages/be/src/algorithms/dsl/types.ts
All primitives are pure functions with no side effects.
No look-ahead — data is asOf-frozen at evaluation time.
Sandboxed — no eval(), no arbitrary code execution.
Whitelisted — LLMs cannot invent primitives; only registered primitives are valid.
| Primitive | Args | Returns | Description |
|---|---|---|---|
| price(symbol) | symbol | number | Latest price for symbol |
| vwap(symbol, duration) | symbol, duration | number | Volume-weighted average price over window |
| volume_z(symbol, duration) | symbol, duration | number | Z-score of current volume vs window mean |
| spread(symbol) | symbol | number | Bid-ask spread |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| rsi(period) | number | number | Relative Strength Index (default 14) |
| macd() | — | number | MACD histogram value |
| bb_upper(period, stddev) | number, number | number | Bollinger upper band |
| bb_lower(period, stddev) | number, number | number | Bollinger lower band |
| atr(period) | number | number | Average True Range |
| obv() | — | number | On-balance volume |
| adx(period) | number | number | Average Directional Index |
| sma(period) | number | number | Simple Moving Average |
| roc(period) | number | number | Rate of Change (%) |
| volume() | — | number | Current bar volume |
| volume_avg(period) | number | number | Average volume over period |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| garch_volatility(lookback) | number | number | GARCH(1,1) conditional volatility (annualized %) |
| egarch_volatility(lookback) | number | number | EGARCH volatility (asymmetric) |
| gjr_volatility(lookback) | number | number | GJR-GARCH volatility |
| gjr_leverage_gamma(lookback) | number | number | GJR leverage coefficient |
| gjr_asymmetry_ratio(lookback) | number | number | Bad vs good news vol response ratio |
| figarch_volatility(lookback) | number | number | FIGARCH long-memory volatility |
| figarch_d(lookback) | number | number | Fractional differencing parameter |
| figarch_forecast(lookback, horizon) | number, number | number | FIGARCH forecast at horizon |
| has_long_memory(lookback) | number | boolean | True if d > 0.35 |
| realized_vol(symbol, window) | symbol, number | number | Realized volatility |
| vol_forecast(symbol) | symbol | number | 1-day GARCH forecast |
| vol_percentile(symbol) | symbol | number | Percentile vs history (0-100) |
| vol_regime(symbol) | symbol | string | 'low'/'normal'/'high'/'extreme' |
| is_vol_elevated(symbol) | symbol | boolean | True if percentile ≥ 75 |
| vol_of_vol(symbol) | symbol | number | Volatility of volatility |
| rough_vol_hurst(lookback) | number | number | Rough volatility Hurst exponent |
| is_vol_rough(lookback, threshold) | number, number | boolean | True if vol Hurst < threshold |
| leverage_effect(lookback) | number | number | EGARCH leverage coefficient |
| news_impact_asymmetry(lookback) | number | number | Bad/good news impact ratio |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| cointegrated(symbolA, symbolB, lookback) | symbol, symbol, number | boolean | True if pair is cointegrated (p<0.05) |
| spread_zscore(symbolA, symbolB, lookback) | symbol, symbol, number | number | Z-score of pairs spread |
| halflife(symbolA, symbolB, lookback) | symbol, symbol, number | number | Mean-reversion half-life in bars |
| hedge_ratio(symbolA, symbolB, lookback) | symbol, symbol, number | number | Optimal hedge ratio β |
| johansen_rank(symbolA, symbolB, lookback) | symbol, symbol, number | number | Johansen cointegration rank |
| johansen_cointegrated(symbolA, symbolB, lookback) | symbol, symbol, number | boolean | True if Johansen rank > 0 |
| johansen_zscore(symbolA, symbolB, lookback) | symbol, symbol, number | number | Johansen portfolio spread z-score |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| correlation(symbolA, symbolB, window) | symbol, symbol, number | number | Pearson correlation (-1 to 1) |
| correlation_change(symbolA, symbolB) | symbol, symbol | number | Short vs long window delta |
| is_correlation_breakdown(symbolA, symbolB) | symbol, symbol | boolean | Significant z-score deviation |
| downside_correlation(symbolA, symbolB) | symbol, symbol | number | Correlation in down markets |
| correlation_asymmetry(symbolA, symbolB) | symbol, symbol | number | Down - up market correlation |
| correlation_to_btc(lookback) | number | number | Rolling correlation to BTC |
| correlation_to_spy(lookback) | number | number | Rolling correlation to SPY |
| beta_to_market(lookback) | number | number | Beta to market benchmark |
| decoupled_from_btc(lookback, threshold) | number, number | boolean | True if BTC correlation below threshold |
| dcc_correlation(sym1, sym2, lookback) | symbol, symbol, number | number | DCC-GARCH dynamic correlation |
| dcc_correlation_forecast(sym1, sym2, lookback) | symbol, symbol, number | number | DCC correlation forecast |
| dcc_persistence(sym1, sym2, lookback) | symbol, symbol, number | number | Correlation persistence |
| correlation_half_life(sym1, sym2, lookback) | symbol, symbol, number | number | Half-life of correlation shocks |
| is_correlation_elevated(sym1, sym2, lookback, threshold) | symbol, symbol, number, number | boolean | True if |corr| > threshold |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| book_imbalance(symbol) | symbol | number | -1 to 1 (negative = more asks) |
| depth_pressure(symbol) | symbol | number | Bid/Ask depth ratio |
| spread_bps(symbol) | symbol | number | Bid-ask spread in basis points |
| microprice(symbol) | symbol | number | Volume-weighted mid price |
| imbalance_zscore(symbol) | symbol | number | Imbalance vs recent history |
| has_bid_wall(symbol) | symbol | boolean | Large bid order detected |
| has_ask_wall(symbol) | symbol | boolean | Large ask order detected |
| vpin(symbol) | symbol | number | Volume-synchronized PIN |
| kyles_lambda(symbol) | symbol | number | Price impact coefficient |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| ts_momentum(symbol, days) | symbol, number | number | Time-series momentum (return) |
| xs_momentum_rank(symbol, universe) | symbol, string | number | Cross-sectional rank (0-100) |
| momentum_acceleration(symbol) | symbol | number | Change in momentum |
| risk_adjusted_momentum(symbol) | symbol | number | Sharpe-like momentum ratio |
| is_momentum_positive(symbol, days) | symbol, number | boolean | True if momentum > 0 |
| price_velocity(lookback) | number | number | Price change rate per bar |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| sector_momentum(sector, months) | string, number | number | Sector return |
| sector_relative_strength(sector) | string | number | Relative to SPY |
| is_sector_leading(sector) | string | boolean | Top 3 by momentum |
| sector_quadrant(sector) | string | string | leading/weakening/lagging/improving |
| sector_breadth() | — | number | % positive (0-100) |
| sector_rank(sector) | string | number | 1=best, 11=worst |
| sector_rotation_score() | — | number | Rotation strength |
| sector_rotation_phase() | — | string | Current rotation phase |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| has_recent_break(symbol, days) | symbol, number | boolean | Break detected in window |
| regime_count(symbol) | symbol | number | Number of regimes in year |
| stability_score(symbol) | symbol | number | 0-100 (higher = stable) |
| is_regime_change(symbol) | symbol | boolean | New regime in last 20 days |
| cusum_break_detected(symbol) | symbol | boolean | CUSUM test positive |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| hurst_exponent(lookback) | number | number | Hurst [0-1]: <0.5=mean-reverting, >0.5=trending |
| is_mean_reverting(lookback, threshold) | number, number | boolean | True if Hurst < 0.4 |
| is_trending(lookback, threshold) | number, number | boolean | True if Hurst > 0.6 |
| trend_up() | — | boolean | True if in uptrend |
| higher_highs() | — | boolean | Consecutive higher highs |
| lower_lows() | — | boolean | Consecutive lower lows |
Physics-Informed Neural Networks embed trading constraints (Kelly sizing, liquidation risk, mean-reversion) directly into the loss function. 16 input features, 3 output heads, TensorFlow.js inference, S3-persisted weights with 24h cache.
| Primitive | Args | Returns | Description |
|---|---|---|---|
| pinn_direction(symbol) | symbol | number | Predicted direction (-1/0/+1) |
| pinn_confidence(symbol) | symbol | number | Prediction confidence (0-1) |
| pinn_predicted_return(symbol) | symbol | number | Predicted return |
| pinn_velocity(symbol) | symbol | number | Price velocity prediction |
| pinn_accuracy(symbol) | symbol | number | Historical accuracy |
| pinn_is_bullish(symbol) | symbol | boolean | Bullish prediction |
| pinn_is_bearish(symbol) | symbol | boolean | Bearish prediction |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| pinn_market_regime(symbol) | symbol | string | Market regime: bull/bear/sideways/crisis/recovery |
| pinn_regime_confidence(symbol) | symbol | number | Regime confidence |
| pinn_regime_duration(symbol) | symbol | number | Regime duration |
| pinn_regime_is(symbol, regime) | symbol, string | boolean | Check specific regime |
| pinn_crisis_warning(symbol) | symbol | number | Crisis warning level (0-1) |
| pinn_recovery_signal(symbol) | symbol | number | Recovery signal strength |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| pinn_liquidation_risk(symbol) | symbol | number | Liquidation risk (0-1) |
| pinn_optimal_size(symbol) | symbol | number | Optimal position size (USD) |
| pinn_expected_slippage(symbol, size) | symbol, number | number | Expected slippage (bps) |
| pinn_market_impact(symbol, size) | symbol, number | number | Market impact estimate |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| pinn_is_cointegrated(symbolA, symbolB) | symbol, symbol | boolean | Cointegration prediction |
| pinn_spread_zscore(symbolA, symbolB) | symbol, symbol | number | Spread z-score prediction |
| pinn_halflife(symbolA, symbolB) | symbol, symbol | number | Half-life prediction |
| pinn_hedge_ratio(symbolA, symbolB) | symbol, symbol | number | Hedge ratio prediction |
| pinn_pair_entry_signal(symbolA, symbolB) | symbol, symbol | boolean | Pair entry signal |
| pinn_pair_exit_signal(symbolA, symbolB) | symbol, symbol | boolean | Pair exit signal |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| factor_alpha(lookback) | number | number | Fama-French alpha (annualized %) |
| factor_beta_market(lookback) | number | number | Market beta (MKT-RF) |
| factor_beta_smb(lookback) | number | number | Size factor beta (SMB) |
| factor_beta_hml(lookback) | number | number | Value factor beta (HML) |
| factor_r_squared(lookback) | number | number | Factor model R² |
| capm_beta(lookback) | number | number | Single-factor CAPM beta |
| capm_alpha(lookback) | number | number | Single-factor CAPM alpha |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| pe_ratio(symbol) | symbol | number | Price/Earnings ratio |
| price_to_book(symbol) | symbol | number | Price/Book ratio |
| debt_equity(symbol) | symbol | number | Debt/Equity ratio |
| return_on_equity(symbol) | symbol | number | Return on Equity |
| dividend_yield(symbol) | symbol | number | Dividend yield |
| revenue_growth(symbol) | symbol | number | Revenue growth rate |
| earnings_growth(symbol) | symbol | number | Earnings growth rate |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| institutional_ownership_pct(symbol) | symbol | number | Institutional ownership % |
| institutional_change_qoq(symbol) | symbol | number | QoQ ownership change |
| top_holder_concentration(symbol) | symbol | number | Top 10 holder concentration |
| smart_money_accumulating(symbol) | symbol | boolean | Smart money buying |
| institutional_holders_count(symbol) | symbol | number | Number of holders |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| has_activist_position(symbol) | symbol | boolean | Any activist >5% |
| activist_ownership_pct(symbol) | symbol | number | Total activist ownership |
| activist_count(symbol) | symbol | number | Number of activists |
| is_activist_accumulating(symbol) | symbol | boolean | Activists increasing |
| largest_activist_position(symbol) | symbol | number | Largest stake % |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| resilience_score(symbol) | symbol | number | Crisis resilience (0-100) |
| resilience_tier(symbol) | symbol | string | fortress/defensive/moderate/aggressive/speculative |
| crisis_beta(symbol) | symbol | number | Beta during crises |
| is_crisis_hedge(symbol) | symbol | boolean | Positive in crises |
| is_fortress_stock(symbol) | symbol | boolean | Top-tier resilience |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| option_delta(symbol, strike, expiry, type) | symbol, number, number, string | number | Option delta |
| option_price(symbol, strike, expiry, type) | symbol, number, number, string | number | Black-Scholes price |
| iv_rank(symbol) | symbol | number | IV rank (0-100) |
| iv_percentile(symbol) | symbol | number | IV percentile |
| put_call_ratio(symbol) | symbol | number | Put/Call ratio |
| gamma_exposure(symbol) | symbol | number | Dealer gamma exposure |
| options_volume_ratio(symbol) | symbol | number | Options/stock volume |
| put_call_skew(symbol) | symbol | number | Put-call IV skew |
| iv_rv_spread(lookback) | number | number | IV-RV spread |
| variance_risk_premium(lookback) | number | number | Variance risk premium |
| vol_selling_signal() | — | number | Vol selling signal |
| is_iv_cheap() | — | boolean | IV < 25th percentile |
| is_iv_expensive() | — | boolean | IV > 75th percentile |
| iv_term_structure_slope() | — | number | Term structure slope |
| iv_skew() | — | number | IV skew |
TWAP/VWAP execution, Almgren-Chriss market impact model, transaction cost analysis. Used for large order execution and optimal trade scheduling.
| Primitive | Args | Returns | Description |
|---|---|---|---|
| expected_impact_bps(qty, adv, vol) | number, number, number | number | Expected market impact (Almgren-Chriss) |
| optimal_duration_hours(qty, adv, vol, max) | number, number, number, number | number | Optimal execution duration |
| should_use_vwap(qty, adv) | number, number | boolean | Order > 1% ADV |
| is_execution_aggressive(participation) | number | boolean | Participation > 20% |
| avg_slippage_bps(symbol, days) | symbol, number | number | Average slippage |
| execution_score(symbol, days) | symbol, number | number | Execution score (0-100) |
| market_impact_estimate(qty, adv, vol) | number, number, number | number | Impact estimate |
| is_execution_poor(symbol, days) | symbol, number | boolean | Score < 40 |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| kelly(win_rate, payoff_ratio) | number, number | number | Kelly criterion: f* = (p*b - q) / b |
| kelly_adaptive() | — | number | Adaptive Kelly with posterior |
| kelly_regime_aware() | — | number | Regime-adjusted Kelly |
| fixed_usd(amount) | number | number | Fixed dollar amount |
| risk_pct(pct) | number | number | Risk percentage |
| risk_parity_weight(symbol) | symbol | number | Risk parity weight |
| portfolio_effective_factors() | — | number | Effective factors |
| is_factor_balanced() | — | boolean | Factor balanced |
| diversification_ratio() | — | number | Diversification ratio |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| vix() | — | number | VIX value |
| move_index() | — | number | MOVE index (bond VIX) |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| treasury_2y10y_spread() | — | number | 2Y-10Y spread |
| curve_slope_2s10s() | — | number | 10Y-2Y slope |
| curve_slope_3m10y() | — | number | 10Y-3M slope |
| credit_ratio_hy_ig() | — | number | HYG/LQD ratio |
| real_yield_10y() | — | number | 10Y TIPS real yield |
| breakeven_5y5y() | — | number | 5Y5Y forward inflation |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| markov_regime(lookback) | number | string | HMM regime: bull/bear/sideways/crisis |
| markov_regime_prob(lookback) | number | number | Regime probability |
| markov_regime_duration(lookback) | number | number | Expected duration |
| is_regime_bull(lookback) | number | boolean | Bull regime |
| is_regime_bear(lookback) | number | boolean | Bear regime |
| is_regime_crisis(lookback) | number | boolean | Crisis regime |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| sentiment(source, window) | string, duration | number | Sentiment score (-1 to 1) |
| whale_activity(symbol) | symbol | number | Whale activity score |
| human_automation_score(symbol) | symbol | number | Human vs bot score |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| funding_rate(symbol) | symbol | number | Perpetual funding rate |
| funding_rate_extreme(symbol, threshold) | symbol, number | boolean | Extreme funding |
| liquidation_cascade(symbol) | symbol | boolean | Liquidation cascade |
| open_interest_change(symbol, hours) | symbol, number | number | OI change % |
| fear_greed_index() | — | number | Fear & Greed (0-100) |
| btc_dominance() | — | number | BTC dominance % |
| altcoin_season() | — | boolean | Altcoin season |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| pump_dump_detected(lookback) | number | boolean | Pump & dump detected |
| is_pump_dump_active(symbol) | symbol | boolean | Active pump & dump |
| manipulation_risk_score(symbol) | symbol | number | Manipulation risk |
| wash_trading_detected(symbol) | symbol | boolean | Wash trading detected |
| is_spoofing_detected(symbol) | symbol | boolean | Spoofing detected |
| is_stop_hunt(symbol) | symbol | boolean | Stop hunt detected |
| is_long_squeeze(symbol) | symbol | boolean | Long squeeze |
| is_short_squeeze(symbol) | symbol | boolean | Short squeeze |
| Primitive | Args | Returns | Description |
|---|---|---|---|
| mailbox_sentiment(topic) | string | number | Mailbox sentiment |
| mailbox_mention_frequency(topic) | string | number | Mention frequency |
| mailbox_bullish_ratio(topic) | string | number | Bullish ratio |
| mailbox_consensus_score(topic) | string | number | Consensus score |
| mailbox_has_bullish_consensus(topic) | string | boolean | Bullish consensus |
| mailbox_has_bearish_consensus(topic) | string | boolean | Bearish consensus |
Candlestick patterns (doji, hammer, engulfing_bullish, morning_star, etc.), chart patterns (double_top, bull_flag), Fair Value Gaps (fvg_bullish, fvg_bearish), DTW template matching (dtw_template_match), and pattern intelligence (pattern_hit_rate, pattern_confidence_lower).
Position P&L (position_pnl_pct), age (position_age_hours), drawdown (account_drawdown_pct, drawdown_from_peak), time in drawdown (time_in_drawdown, underwater_bars), and risk metrics (profit_at_risk, risk_reward_current).
Calendar events: is_ramadan, is_chinese_new_year, is_diwali, is_easter_week, is_eid, is_thanksgiving, is_christmas_season, is_golden_week. Seasonality analysis: days_until_event, event_seasonality_signal, event_excess_return, event_consistency, event_p_value.
Climate: temperature, weather_anomaly, global_temp_anomaly, is_warming_trend. ENSO: el_nino_index, enso_phase, is_el_nino, is_la_nina. Storms: hurricane_season, active_hurricanes, major_hurricane_active. Agriculture: heating_degree_days, cooling_degree_days, climate_risk.
Market probabilities: prediction_market_prob, prediction_market_delta, prediction_market_volume. Polymarket wallet clustering: polymarket_smart_money_consensus, polymarket_manipulation_risk, polymarket_whale_flow, polymarket_has_suspicious_activity, polymarket_coordination_score, is_coordinated_activity.
Signal combination: all(signals...) — all signals true, any(signals...) — any signal true, xor(a, b) — exclusive or.
AI-assisted confirmation: llm_confirms(claim, confidence_min) — LLM confirms a claim with minimum confidence threshold.
strategy: "Multi-Factor Quant" universe: ["AAPL", "MSFT", "GOOGL", "AMZN"] horizon: position entry: when: ts_momentum(symbol, 126) > 0 AND xs_momentum_rank(symbol, "SP500") > 60 AND factor_alpha(symbol) > 0.03 AND stability_score(symbol) > 50 AND pinn_direction(symbol) > 0 AND pinn_confidence(symbol) > 0.7 exit: when: ts_momentum(symbol, 21) < -0.05 OR is_correlation_breakdown(symbol, "SPY") OR pinn_liquidation_risk(symbol) > 0.3 sizing: kelly_regime_aware() * (1 / realized_vol(symbol, 20)) * (1 - expected_impact_bps(position_size, adv, vol) / 100) risk: max_position_usd: 50000 max_drawdown_pct: 15 stop_loss_pct: 5