Data processing node
1. Node overview
The data processing node is the strategy's feature-engineering hub and the only node that actually retrieves base market fields (OHLCV). It reads parameters from the upstream data source card, calls exchange APIs to retrieve raw OHLCV and fundamental data, and computes technical indicators and quantitative factors as strategy-ready features. The resulting factors can be used directly in strategy-node conditions or as input features for an AI model node.
2. Interactive configuration
The panel below is the actual data processing configuration. Explore its four core sections directly: historical lookback, factor configuration, labeling, and conditional filtering.
Current expressions require at least 0 periods. Nested factors accumulate lookback windows; maximum supported: 10000.
Select preset factors from the library or write custom expressions; both are merged automatically
2.1 Historical lookback
Sets the amount of historical data, in periods, required for factor calculations.100, and the allowed range is 1 - 1000.| Factor used | Largest window | Recommended value |
|---|---|---|
ta_ma(close, 20) | 20 | 25-30 |
ta_ma(close, 60) | 60 | 70-80 |
ta_bbands(close, 20, 2) | 20 | 25-30 |
t_std(close, 120) | 120 | 140-150 |
2.2 Factor configuration
Define quantitative factors from the factor library or with custom expressions.| Category | Included indicators | Purpose |
|---|---|---|
| Trend | MA, EMA, WMA, MACD, Bollinger Bands | Determine trend direction and strength |
| Momentum | RSI, KDJ, Williams %R, ROC, CCI | Measure the speed of price changes and identify overbought or oversold conditions |
| Volatility | ATR, standard deviation, volatility, true range | Measure price variation for risk control |
| Volume | Volume ratio, OBV, turnover value, turnover rate | Analyze market activity and capital flows |
factor_name = expression and separate multiple factors with commas. A name beginning with _ is an intermediate variable used only during calculation and is not emitted. See expression syntax and expression operators.| Example expression | Description | Output |
|---|---|---|
_ma_5 = ta_ma(close, 5) | Five-period moving average (intermediate variable) | Not emitted |
momentum = close / _ma_5 - 1 | Price deviation from the five-period moving average | Emitted |
rsi_14 = ta_rsi(close, 14) | Fourteen-period RSI | Emitted |
vol_ratio = volume / t_mean(volume, 20) | Volume ratio: current volume / 20-period average volume | Emitted |
volatility = t_std(pct(close, 1), 20) | Twenty-period return volatility | Emitted |
ta_ma, ta_ema, ta_wma, t_meanta_rsi, ta_macd, ta_kdj, ta_ccita_atr, ta_bbands, t_stdpct, log, abs, max, min, rank, shift2.3 Labeling
Defines optional target data for AI-model training.label = shift(close, -5) / shift(open, -1) - 1, the next five-period return measured from the next candlestick's open. For binary classification, the engine converts returns to 0 or 1 using a threshold, 0 by default.shift() to access future data. shift(close, -5) means the closing price five periods later; a negative offset points into the future.| Label expression | Meaning | Task | Range |
|---|---|---|---|
shift(close, -5) / shift(open, -1) - 1 | Future five-period return from the next candlestick open | Regression / binary classification | -1 to +∞; converted to 0/1 for binary classification |
shift(t_max(high, 5), -5) / shift(open, -1) - 1 | Maximum upside over the next five periods | Regression | -1 to +∞ |
shift(t_min(low, 5), -5) / shift(open, -1) - 1 | Maximum downside over the next five periods | Regression | -1 to 0 |
shift(close, -6) / shift(open, -1) - 1 | Future six-period return; the engine performs the ranking-label conversion | Ranking | -1 to +∞; converted internally for ranking |
A label expression may reference variables defined earlier in factor configuration.
Shifting into the future creates trailing NaN values, which the system removes automatically.
2.4 Conditional filtering
Optionally retains only rows that meet a condition.volume > 1000000, keeps rows whose volume exceeds one million.| Condition | Meaning | Use case |
|---|---|---|
volume > 1000000 | Volume > 1,000,000 | Remove illiquid instruments |
(close > 1) & (close < 100000) | Price lies in a reasonable range | Exclude extreme prices |
abs(pct(close, 1)) < 0.1 | Absolute return < 10% | Exclude abnormal moves |
(rsi > 30) & (rsi < 70) | RSI lies between 30 and 70 | Exclude overbought and oversold regions |
vol_ratio > 0.5 | Volume ratio > 0.5 | Remove low-volume instruments |
~isnan(label) | Label is not null | Remove invalid samples |
>, <, >=, <=, ==, !=& (and), | (or), ~ (not)abs, isnan, isinfA base column used only in a filter is still retrieved: even if a base column such as
marketcap appears only in the filter and not in factors or labels, the engine loads it. Filtering controls rows, however, not output columns. To pass a raw column downstream, assign it explicitly in a factor expression, for example close = close.3. Output data structure
The output contains only timestamp, symbol, and assigned factor variables whose names do not begin with _. Referencing raw OHLCV does not emit it: raw columns may participate in factors, labels, and filters, but must be passed through explicitly, for example close = close, to appear downstream. The output DataFrame retains the input row count and index structure.
| Column | Type | Description |
|---|---|---|
timestamp | datetime | Candlestick timestamp inherited from input |
symbol | string | Trading symbol inherited from input |
open/high/low/close/volume | float | Not emitted by default, though available in factor, label, and filter expressions. Assign explicitly, such as close = close, to pass downstream. |
[factor_name] | float | Newly calculated factor column |
close appears only because the factor expression passes it through explicitly with close = close. Without that assignment, the output contains no raw OHLCV columns.| timestamp | symbol | close | ma5 | ma20 | rsi |
|---|---|---|---|---|---|
| 2024-12-11 00:00:00 | BTCUSDT | 97800.0 | 97650.0 | 97120.5 | 58.32 |
| 2024-12-11 01:00:00 | BTCUSDT | 97750.0 | 97680.0 | 97156.8 | 55.18 |
| 2024-12-11 02:00:00 | BTCUSDT | 97820.0 | 97730.0 | 97203.2 | 59.45 |
| 2024-12-11 03:00:00 | BTCUSDT | 98050.0 | 97810.0 | 97268.5 | 63.21 |
| 2024-12-11 04:00:00 | BTCUSDT | 98150.0 | 97914.0 | 97345.1 | 65.87 |
4. FAQ
volume > 1000000, or invalid data.momentum, for example, write momentum > 0 in an entry condition.