数据处理节点

一 节点概述

数据处理节点是量化策略的特征工程中心,负责计算技术指标和量化因子, 将 数据源节点 输出的原始 OHLCV 和 基本面数据 转换为策略可用的特征。 计算得到的因子可以直接用于 策略节点 的条件判断,也可以作为 AI模型节点 的输入特征。

数据流位置
数据源节点数据处理AI模型策略类型仓位管理风险控制交易引擎

二 模拟配置

下方是数据处理节点的真实配置面板,你可以直接操作体验各个配置项的功能。配置面板包含四个核心部分:向前取数据因子配置Label标注条件过滤

数据处理节点配置

所有因子计算需要的历史期数最大值,最大支持 10000(超出将自动按 10000 处理)

从因子库选择预设因子,或编写自定义表达式,两者自动合并

因子库
自定义表达式

2.1 向前取数据

设置因子计算所需的历史数据长度(期数)
什么是"向前取数据"?
在计算技术指标时,通常需要参考历史数据。例如计算 20 日均线,需要过去 20 根K线的收盘价。 "向前取数据"参数决定了系统在每个时间点向前回溯多少根K线用于因子计算。该值必须大于或等于所有因子表达式中最大的窗口期参数, 否则计算结果会出现 NaN(数据不足)。 默认值为 100,取值范围 1 - 1000
设置示例
使用的因子最大窗口期建议设置
ta_ma(close, 20)2025-30
ta_ma(close, 60)6070-80
ta_bbands(close, 20, 2)2025-30
t_std(close, 120)120140-150
建议:预留 10%-20% 的余量。 例如最大窗口期为 60,建议设置为 70-80,确保数据充足避免因边界问题产生 NaN。 如果不确定,可以设置一个较大的值(如 200),但会略微增加计算耗时。

2.2 因子配置

通过因子库选择或自定义表达式定义量化因子
什么是因子?
因子(Factor)是量化策略的核心,是从原始价量数据中提取的特征。 例如"20日均线"、"RSI指标"、"成交量比率"都是因子。 因子用于描述市场状态,帮助策略做出交易决策,或作为AI模型的输入特征。 系统支持两种方式定义因子:从因子库选择编写自定义表达式
因子库
因子库预置了常用的技术分析指标,点击即可添加。选中的因子会自动生成对应的表达式代码, 无需手动编写。因子库按类别组织,包含趋势、动量、波动率、成交量等多种类型。
因子类别包含指标用途说明
趋势类MA、EMA、WMA、MACD、布林带判断价格趋势方向和强度
动量类RSI、KDJ、威廉指标、ROC、CCI衡量价格变化速度,识别超买超卖
波动率类ATR、标准差、波动率、真实波幅衡量价格波动程度,用于风控
成交量类量比、OBV、成交额、换手率分析市场活跃度和资金流向
自定义表达式
当因子库无法满足需求时,可以手动编写因子表达式。表达式支持丰富的内置函数和数学运算。 格式为 因子名 = 表达式,多个因子用逗号分隔。 以 _ 开头的变量名为中间变量,仅用于计算过程,不会输出到结果。 详细语法规则请参考 表达式语法, 可用算子列表请参考 表达式算子
表达式示例说明输出
_ma_5 = ta_ma(close, 5)5周期均线(中间变量)不输出
momentum = close / _ma_5 - 1价格偏离5日均线的幅度输出
rsi_14 = ta_rsi(close, 14)14周期RSI指标输出
vol_ratio = volume / t_mean(volume, 20)量比(当前量/20日均量)输出
volatility = t_std(pct(close, 1), 20)20日收益率波动率输出
常用内置函数
完整函数列表请参考 表达式算子
移动平均
ta_ma, ta_ema, ta_wma, t_mean
动量指标
ta_rsi, ta_macd, ta_kdj, ta_cci
波动率
ta_atr, ta_bbands, t_std
数学运算
pct, log, abs, max, min, rank, shift
自动合并:因子库选择的因子和自定义表达式会自动合并,一起提交给后端计算。 你可以同时使用两种方式:从因子库快速选择常用指标,在自定义表达式中编写个性化因子。

2.3 Label标注

定义AI模型训练所需的标签数据(可选)
什么是 Label?
Label(标签)是机器学习中的核心概念,代表模型需要预测的目标变量。 在量化交易中,Label 通常是未来的收益率或价格变化。 模型通过学习因子(特征)与 Label 之间的关系,预测未来走势。 只有在使用 AI模型节点(如 LightGBM、Transformer)时才需要启用此功能。 默认表达式为 label = shift(close, -5) / shift(open, -1) - 1,表示以下根K线开盘价为基准的未来5期收益率。二分类任务时,引擎自动将收益率按阈值(默认0)转为 0/1。
Label 表达式详解
Label 表达式通常使用 shift() 函数获取未来数据。shift(close, -5) 表示"5个周期后的收盘价",负数表示向未来偏移。
Label 表达式含义任务类型取值范围
shift(close, -5) / shift(open, -1) - 1未来5期收益率(以下根K线开盘价为基准)回归 / 二分类-1 ~ +∞(二分类时引擎自动转0/1)
shift(t_max(high, 5), -5) / shift(open, -1) - 1未来5期最大涨幅回归-1 ~ +∞
shift(t_min(low, 5), -5) / shift(open, -1) - 1未来5期最大跌幅回归-1 ~ 0
c_pctrank(shift(close, -5) / shift(open, -1) - 1)未来收益率排名(截面)排序/回归0 ~ 1
变量引用

Label 表达式可以引用前面因子配置中定义的变量

NaN 处理

shift 到未来会产生末尾 NaN,系统会自动剔除

2.4 条件过滤

筛选满足条件的数据行(可选)
什么是条件过滤?
条件过滤用于筛选数据,只保留满足指定条件的数据行,不满足条件的数据将被剔除。 过滤后的数据会传递给下游节点(AI模型、策略等)。 常用场景包括:过滤低流动性标的剔除异常数据限定价格区间等。 默认条件为 volume > 1000000,保留成交量大于100万的数据。
过滤条件示例
条件表达式返回布尔值,True 保留,False 剔除
条件表达式说明使用场景
volume > 1000000成交量 > 100万过滤低流动性标的
(close > 1) & (close < 100000)价格在合理区间剔除极端价格
abs(pct(close, 1)) < 0.1涨跌幅 < 10%剔除异常波动
(rsi > 30) & (rsi < 70)RSI 在 30-70 区间过滤超买超卖
vol_ratio > 0.5量比 > 0.5过滤缩量标的
~isnan(label)Label 非空剔除无效样本
支持的运算符
比较运算符
>, <, >=, <=, ==, !=
逻辑运算符
& (与), | (或), ~ (非)
函数
abs, isnan, isinf
变量引用顺序:过滤条件可以引用:①基础列(open/high/low/close/volume/symbol/datetime) → ②因子表达式定义的变量 → ③Label定义的变量。 前面定义的变量后面都可以使用。

三 输出数据结构

数据处理节点在输入数据的基础上,添加计算得到的因子列。输出 DataFrame 保持与输入相同的行数和索引结构。

列名类型说明
timestampdatetimeK线时间戳(继承自输入)
symbolstring交易对符号(继承自输入)
open/high/low/close/volumefloat原始 OHLCV 数据(继承自输入)
[因子名]float计算得到的因子列(新增)
示例:添加 MA5、MA20、RSI 因子后的数据
timestampsymbolclosema5ma20rsi
2024-12-11 00:00:00BTCUSDT97800.097650.097120.558.32
2024-12-11 01:00:00BTCUSDT97750.097680.097156.855.18
2024-12-11 02:00:00BTCUSDT97820.097730.097203.259.45
2024-12-11 03:00:00BTCUSDT98050.097810.097268.563.21
2024-12-11 04:00:00BTCUSDT98150.097914.097345.165.87

四 常见问题

Q: 因子计算结果出现 NaN 怎么办?

A: 通常是"向前取数据"期数不足导致。移动平均等函数在数据不足时会返回 NaN。 请确保期数大于最大窗口期参数,例如使用 60 周期均线,至少设为 60(建议70-80)。

Q: 因子库和自定义表达式如何协作?

A: 两者会自动合并。因子库选择的预设因子会生成表达式代码,与自定义表达式一起提交给后端计算。 你可以在因子库快速选择常用指标,同时在自定义表达式中编写个性化因子。

Q: Label标注什么时候需要启用?

A: 只有在使用 AI模型节点(如 LightGBM、Transformer)进行机器学习时才需要。 Label 是模型训练的目标变量,定义了你希望模型预测什么(如未来收益率)。

Q: 条件过滤会影响后续节点吗?

A: 是的。过滤后的数据会传递给下游节点(AI模型、策略等)。 过滤条件常用于剔除低流动性标的(如 volume > 1000000)或异常数据。

Q: 如何在策略中引用计算的因子?

A: 在 策略节点 中,直接使用因子名称即可。例如定义了 momentum, 则可在开仓条件中写 momentum > 0