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 seriesperiod: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)
intExtract hour from timestamp (0-23)
Parameters:
timestamp:int- Timestamp (e.g., timestamp column)
Returns:
int
hour(timestamp)
minute(timestamp)
intExtract 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
stringDate as string (e.g., "2025-01-15")
interval_id
stringInterval identifier
interval_start
series<int>Interval start timestamp
interval_index
intGlobal 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.
Keywords
View in Guide →inputfuncsignaloutputstatsbycountpercentavgifthenelseasintfloatboolstringtruefalseOperators
View in Guide →Arithmetic Operators
+-*/Comparison Operators
><>=<===!=Logical Operators
andornot