DuckScript API Reference

Complete reference for all DuckScript functions, columns, and syntax

Built-in Functions

View in Guide →

Moving Averages

sma(series, period)

series<float>

Simple Moving Average

Parameters:

  • series: series<float> - Price series (e.g., close)
  • period: int - Period length

Returns:

series<float>

ma20 = sma(close, 20)

ema(series, period)

series<float>

Exponential Moving Average

Parameters:

  • series: series<float> - Price series
  • period: int - Period length

Returns:

series<float>

ema50 = ema(close, 50)

Technical Indicators

rsi(series, period)

series<float>

Relative Strength Index (simplified approximation)

Parameters:

  • series: series<float> - Price series (typically close)
  • period: int - Period length (typically 14)

Returns:

series<float>

rsi14 = rsi(close, 14)

Volatility

atr(period)

series<float>

Average True Range (simplified approximation)

Parameters:

  • period: int - Period length

Returns:

series<float>

volatility = atr(14)

Volume

vwap()

series<float>

Volume Weighted Average Price

Returns:

series<float>

vwap_value = vwap()

Math Functions

abs(value)

series<float>

Absolute value

Parameters:

  • value: series<float>

Returns:

series<float>

abs_change = abs(close - open)

highest(series, period)

series<float>

Maximum value in a rolling window

Parameters:

  • series: series<float> - Price series (e.g., high)
  • period: int - Period length

Returns:

series<float>

highest_20 = highest(high, 20)

lowest(series, period)

series<float>

Minimum value in a rolling window

Parameters:

  • series: series<float> - Price series (e.g., low)
  • period: int - Period length

Returns:

series<float>

lowest_20 = lowest(low, 20)

Pattern Detection

crossover(series1, series2)

series<bool>

Detect when series1 crosses above series2

Parameters:

  • series1: series<float>
  • series2: series<float>

Returns:

series<bool>

golden_cross = crossover(ma_fast, ma_slow)

crossunder(series1, series2)

series<bool>

Detect when series1 crosses below series2

Parameters:

  • series1: series<float>
  • series2: series<float>

Returns:

series<bool>

death_cross = crossunder(ma_fast, ma_slow)

Pattern Functions

count_consecutive(condition)

series<float>

Count consecutive bars where condition is true

Parameters:

  • condition: series<bool>

Returns:

series<float>

count_consecutive(close > open)

bars_since(condition)

series<float>

Count bars since last time condition was true

Parameters:

  • condition: series<bool>

Returns:

series<float>

bars_since(close > high[1])

high_since(condition)

series<float>

Maximum high since last time condition was true

Parameters:

  • condition: series<bool>

Returns:

series<float>

high_since(close < open)

low_since(condition)

series<float>

Minimum low since last time condition was true

Parameters:

  • condition: series<bool>

Returns:

series<float>

low_since(close > open)

max_since(condition, series)

series<float>

Maximum value of series since last time condition was true

Parameters:

  • condition: series<bool>
  • series: series<float>

Returns:

series<float>

max_since(close < open, high)

min_since(condition, series)

series<float>

Minimum value of series since last time condition was true

Parameters:

  • condition: series<bool>
  • series: series<float>

Returns:

series<float>

min_since(close > open, low)

accumulate_while(condition, value)

series<float>

Accumulate value while condition is true, reset when false

Parameters:

  • condition: series<bool>
  • value: series<float>

Returns:

series<float>

accumulate_while(close > open, volume)

flag_once(condition)

series<bool>

Flag that becomes true once condition is true and stays true

Parameters:

  • condition: series<bool>

Returns:

series<bool>

flag_once(close > high[1])

Date / Time Functions

weekday(date)

series<float>

Day of week (0=Sunday, 1=Monday, ..., 6=Saturday)

Parameters:

  • date: string - Date column or string (e.g., date)

Returns:

series<float>

weekday(date)

hour(timestamp)

int

Extract hour from timestamp (0-23)

Parameters:

  • timestamp: int - Timestamp (e.g., timestamp column)

Returns:

int

hour(timestamp)

minute(timestamp)

int

Extract minute from timestamp (0-59)

Parameters:

  • timestamp: int - Timestamp

Returns:

int

minute(timestamp)

month(date)

series<float>

Extract month from date or timestamp (1-12)

Parameters:

  • date: string - Date column or timestamp

Returns:

series<float>

month(date)

day_of_month(date)

series<float>

Extract day of month from date or timestamp (1-31)

Parameters:

  • date: string - Date column or timestamp

Returns:

series<float>

day_of_month(date)

year(date)

series<float>

Extract year from date or timestamp

Parameters:

  • date: string - Date column or timestamp

Returns:

series<float>

year(date)

Built-in Columns

View in Guide →

OHLCV Prices

open

series<float>

Opening price of the bar

high

series<float>

Highest price of the bar

low

series<float>

Lowest price of the bar

close

series<float>

Closing price of the bar

volume

series<float>

Volume of the bar

Metadata

timestamp

series<int>

Timestamp of the bar

symbol

series<string>

Symbol identifier

Structural Columns

These columns are automatically generated based on your dataset metadata and can be used in aggregations.

session

series<string>

Session identifier (e.g., "premarket", "regular", "afterhours")

date

string

Date as string (e.g., "2025-01-15")

interval_id

string

Interval identifier

interval_start

series<int>

Interval start timestamp

interval_index

int

Global sequential index that continues summing across dates and sessions. Does NOT reset when date or session changes. Depends on interval_duration (e.g., with 90min intervals: 1010, 1011, 1012...).

interval_number

series<int>

Follows the sequence of interval_index but resets at the start of each session. Allows identifying position within each session (1, 2, 3, 4, 5... per session). Depends on interval_duration.

input
func
signal
output
stats
by
count
percent
avg
if
then
else
as
int
float
bool
string
true
false

Arithmetic Operators

+
-
*
/

Comparison Operators

>
<
>=
<=
==
!=

Logical Operators

and
or
not