针对数字特征,可以采用如下方法:·
特征生成伪算法
```
基于交易数据的特征工程,通过统计学方法和金融指标计算生成组合特征
输入数据格式:
- 时间序列交易数据 (OHLCV: Open, High, Low, Close, Volume)
- 交易时间戳、交易量、成交额等基础字段
- 其他辅助数据(如市场深度、订单簿数据等)
特征生成步骤伪算法:
1. 数据预处理阶段
- 时间序列对齐和重采样 (统一时间间隔)
- 异常值检测和处理 (Winsorization, Z-score)
- 缺失值填充 (前向填充、线性插值等)
- 数据类型转换和标准化
2. 基础价格特征
- 价格变化率: (Close_t - Close_t-1) / Close_t-1
- 对数收益率: log(Close_t / Close_t-1)
- 价格振幅: (High_t - Low_t) / Close_t-1
- 开盘跳空: (Open_t - Close_t-1) / Close_t-1
- 收盘价相对位置: (Close_t - Low_t) / (High_t - Low_t)
3. 移动窗口统计特征
- 滑动平均: MA_n = mean(Close_t, Close_t-1, ..., Close_t-n+1)
- 指数移动平均: EMA_n = α * Close_t + (1-α) * EMA_t-1
- 移动标准差: STD_n = std(Close_t, ..., Close_t-n+1)
- 移动最大值/最小值: MAX_n, MIN_n
- 移动分位数: Q25_n, Q50_n, Q75_n
4. 动量指标特征
- RSI (相对强弱指数):
RSI_n = 100 - (100 / (1 + RS))
RS = Average_Gain_n / Average_Loss_n
- MACD (异同移动平均线):
MACD = EMA_12 - EMA_26
Signal = EMA_9(MACD)
Histogram = MACD - Signal
- 动量指标: MOM_n = Close_t - Close_t-n
- 变化率指标: ROC_n = (Close_t - Close_t-n) / Close_t-n
5. 波动率特征
- 历史波动率: HV_n = STD(Returns_n) * sqrt(252)
- 平均真实波幅: ATR_n = mean(TR_n)
TR = max(High-Low, |High-Close_t-1|, |Low-Close_t-1|)
- Parkinson波动率: sqrt(ln(High/Low)² / (4*ln(2)))
- Garman-Klass波动率:
GK = 0.5*ln(H/L)² - (2*ln(2)-1)*ln(C/O)²
6. 成交量特征
- 成交量变化率: (Volume_t - Volume_t-1) / Volume_t-1
- 成交量移动平均: VMA_n = mean(Volume_t, ..., Volume_t-n+1)
- 价量相关性: corr(Price_changes, Volume_changes)
- 成交量加权平均价格: VWAP = Σ(Price * Volume) / Σ(Volume)
- 能量潮指标: OBV = OBV_t-1 + sign(Close_t - Close_t-1) * Volume_t
7. 技术形态特征
- 支撑阻力位: 基于历史高低点识别
- 趋势强度: ADX指标
- 布林带位置: (Close - Lower_Band) / (Upper_Band - Lower_Band)
- 威廉姆斯%R: (Highest_High_n - Close) / (Highest_High_n - Lowest_Low_n)
8. 时间特征
- 小时/分钟/秒特征
- 周几/月份特征
- 节假日标识
- 交易时段标识
- 周期性特征(傅里叶变换)
9. 滞后特征
- 多期滞后: Close_t-1, Close_t-2, ..., Close_t-n
- 滞后收益率: Return_t-1, Return_t-2, ...
- 交互项: Price_t * Volume_t, High_t - Low_t, etc.
10. 高阶特征
- 价格导数: 二阶导数(加速度)
- 滚动相关系数: Price与Volume的相关性
- 滚动Beta: 资产收益与市场收益相关性
- Z-Score标准化: (X - μ) / σ
- Min-Max标准化: (X - min) / (max - min)
11. 风险指标特征
- 最大回撤: max(Peak - Trough) / Peak
- 夏普比率: (Return - Risk_free_rate) / Volatility
- 卡尔马比率: Return / Max_Drawdown
- VaR (风险价值): 分位数方法计算
- 偏度和峰度: 收益率分布的高阶矩
12. 特征选择和降维
- 相关性过滤: 去除高相关性特征
- 方差阈值过滤: 去除低方差特征
- 互信息分析: 特征与目标变量相关性
- PCA主成分分析: 降维去噪
- 递归特征消除: RFE选择重要特征
输出特征矩阵:
- N个样本 × M个特征
- 包含时间戳、特征名称、特征值
- 可用于机器学习模型训练
注意事项:
1. 避免未来信息泄露 (Look-ahead bias)
2. 保持时间序列因果关系
3. 特征缩放和标准化
4. 处理不同时间尺度的特征
5. 特征稳定性和鲁棒性验证
```
|
按类别特征进行分组
|
- 基于秒级流水合成天特征
- Amount_sum = df_tra.groupby('time8')['Amount'].sum()
- Amount_mean = df_tra.groupby('time8')['Amount'].mean()
- 基于天再合成最近3天,7天特征
- 基于天的特征只做Amount_sum,Amount_mean两列,然后以此列按3天的维度进行聚合
- 基于天的特征只做Amount_sum,Amount_mean两列,然后以此列按7天的维度进行聚合
基于秒级流水合成天特征
```
# 调用按天聚合方法
print("开始调用data_agg_byday方法进行按天聚合...")
df_final_result = dtf.data_agg_byday(
df=df_tra,
col_time='time8',
interval=1,
win_len=1,
identifys=[['From','time8'],['To','time8']],
num_type=['Amount'],
classify_type=['Payment Format', 'Currency'],
merge_del_cols=['From','To'],
new_col_name='key'
)
```
|
|
|
|
|
- count: 计数
- sum: 求和
- mean: 均值
- std: 标准差
- min: 最小值
- max: 最大值
- median: 中位数
- q25: 25%分位数
- q75: 75%分位数
- skew: 偏度
- kurtosis: 峰度
- cv: 变异系数
- iqr: 四分位距
- range: 极差
- se: 标准误差
|
- 当天的交易额,与历史交易的对比,不包括当天
- 实际上就是波动率
|
|
|
|
|
|
|
```
主要改进:
1. 引入列名配置结构体
pub struct ColumnConfig {
pub time_col: String, // 时间列
pub price_col: String, // 价格列
pub balance_col: String, // 余额列
pub amount_col: String, // 金额列
}
2. 参数化设计
默认配置:保持与原始数据的兼容性
impl Default for ColumnConfig {
fn default() -> Self {
Self {
time_col: "DT_TIME".to_string(),
price_col: "AMT".to_string(),
balance_col: "ACCBAL".to_string(),
amount_col: "CNY_AMT".to_string(),
}
}
}
自定义配置:支持任意列名的数据源
let custom_config = ColumnConfig {
time_col: "交易时间".to_string(),
price_col: "单价".to_string(),
balance_col: "账户余额".to_string(),
amount_col: "交易金额".to_string(),
};
3. 方法重构
所有硬编码的列名都通过 &column_config.price_col 等方式访问
保持了原有功能的完整性,同时提高了灵活性
🎯 测试结果验证:
默认列名配置测试 ✅
列名:DT_TIME, AMT, ACCBAL, CNY_AMT
特征计算:8个特征列正常生成
验证结果:所有计算逻辑正确
自定义列名配置测试 ✅
列名:交易时间, 单价, 账户余额, 交易金额
特征计算:同样生成8个特征列
CSV输出:使用中文列名,正确保存
📊 关键特性保持完整:
成交量推导:交易金额 / 单价 = 100.00 ✓
价格变化率:范围 -0.039216 到 0.030303 ✓
移动平均:5日移动平均正确计算 ✓
VWAP计算:成交量加权平均价正确 ✓
所有特征:价格、成交量、时间等特征均正常计算 ✓
🔒 代码质量提升:
消除硬编码:所有列名都通过配置管理
类型安全:使用 Rust 类型系统确保正确性
向后兼容:默认配置保持原有功能
高度灵活:支持任意列名的数据源
易于维护:配置集中管理,便于修改
📈 扩展性:
现在代码可以轻松适应不同的数据源格式:
银行系统:交易时间、金额、余额
股票数据:date、close、volume
加密货币:timestamp、price、amount
重构成功!代码现在更加灵活、健壮,可以适应各种不同列名的金融数据源。 🎉
```
|
- 可以暂时将amt的sum暂时作为交易金额,以映射到金融交易流水的场景
- 带成交量的方法中,可以将count作为成交量列,并使用真实成交量列进行计算
- 引时取AMT为amt_mean就可以
```
let result = features.calculate_all_features(
df,
"AMT",
"DT_TIME",
Some("ACCBAL"),
Some("VOLUME"), // 使用真实的成交量列
Some("CNY_AMT"),
);
```
- 未来可以将一天分为6个段,计算每个段的特征
|
|
|
|
|
|
|
- 数据处理位于 /ai/wks/rfil/mij/data目录
- 测试于 /ai/wks/rfil/study
- 接口封装于 /ai/wks/rfil/rust2py
项目编译与安装
```
cd /ai/wks/rfil/rust2py
cd target/debug/
rm -rf /ai/wks/aitpf/src/tpf/rst/rust2py.so
cp librust2py.so /ai/wks/aitpf/src/tpf/rst/rust2py.so
ll /ai/wks/aitpf/src/tpf/rst/rust2py.so
cp librust2py.so /wks/python/ubuntu_py311_gpu/lib/python3.11/site-packages/rust2py.so
```
```
rm -rf /wks/python/ubuntu_py311_gpu/lib/python3.11/site-packages/tpf
rsync -rltDv /ai/wks/aitpf/src/tpf /wks/python/ubuntu_py311_gpu/lib/python3.11/site-packages/
```
|
```
```
```
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|