昨天黄兄说这个比赛找到影响因子很重要。今天就大概看了看,目前收获不多,没啥想法。
官方demo中的影响因子:
1. 影响因子(特征)列表
在 train 方法中,以下7个因子被用作XGBoost模型的输入特征:
| 英文名 | 中文解释 | 计算方式/含义简述 |
|---|---|---|
| 4h_momentum | 4小时动量 | 4小时内价格变动幅度 |
| 7d_momentum | 7天动量 | 7天内价格变动幅度 |
| amount_sum | 7天成交额总和 | 7天内所有成交额的累加 |
| vol_momentum | 1天成交量动量 | 1天内成交量的变化率 |
| atr | 平均真实波动率 | 反映价格波动性的技术指标 |
| macd | MACD指标 | 反映趋势强度和方向的技术指标 |
| buy_pressure | 买入压力 | 买入成交量-卖出成交量 |
2. 这些因子的来源
这些因子都是在 run 方法中通过对原始K线数据的处理和滚动窗口计算得到的。例如:
df_4h_momentum = (df_vwap / df_vwap.shift(windows_4h) - 1)df_7d_momentum = (df_vwap / df_vwap.shift(windows_7d) - 1)df_amount_sum = df_amount.rolling(windows_7d).sum()df_vol_momentum = (df_amount / df_amount.shift(windows_1d) - 1)df_atr,df_macd是在数据预处理时通过技术指标函数计算的df_buy_pressure = (df_buy_volume - (df_volume - df_buy_volume))
3. 这些因子的作用
- 动量因子(4h/7d):反映短期和中期的价格趋势
- 成交额/量因子:反映市场活跃度和资金流向
- 波动率因子(ATR):反映市场风险和不确定性
- MACD:反映趋势的强弱和转折点
- 买入压力:反映多空力量对比
4. 在模型中的使用
在 train 方法中,这些因子被拼接成特征矩阵 X,作为XGBoost的输入:
X = data[['4h_momentum', '7d_momentum', 'amount_sum', 'vol_momentum', 'atr', 'macd', 'buy_pressure']]
1. 什么是“链上数据”和“社交媒体情绪”因子?
- 链上数据:区块链本身产生的数据,比如转账数量、大户持仓变化、活跃地址数、Gas费等。
- 社交媒体情绪:推特、Reddit、微博等平台上,大家对某个币的讨论热度、情绪倾向(乐观/悲观)。
这些因子能反映市场的“资金流动”和“情绪风向”,在加密货币领域非常有用。
2. 获取方式:API还是自己造因子?
(1)API能直接获取的是什么?
- API通常只能给你原始数据,比如:
- 某币每天的链上转账数
- 某币在推特上的提及次数
- 某条推文的情感分数
- 很少有API直接给你“因子”本身(比如“链上活跃度因子”),因子的设计和加工需要你自己完成。
(2)你需要做的步骤
- 用API获取原始数据
- 比如用Glassnode、CryptoQuant、Santiment等API获取链上数据
- 用Twitter API、Reddit API、LunarCrush等获取社交媒体数据
- 自己加工成“因子”
- 比如“近7天活跃地址数的变化率”=(今天活跃地址数-7天前)/7天前
- 比如“推特情绪均值”=近24小时所有推文的情感分数平均值
- 把这些因子加到你的特征工程里,和价格、成交量等一起输入模型
3. 举例说明
链上数据因子举例
- 原始API数据:每天的活跃地址数
- 你加工的因子:活跃地址数7日变化率、鲸鱼转账占比、链上交易总额等
社交媒体情绪因子举例
- 原始API数据:每条推文的情感分数
- 你加工的因子:24小时情绪均值、情绪极端值比例、讨论热度(推文数量)等
4. 为什么要自己造因子?
- 原始数据噪声大,直接用效果不好
- 因子设计=提炼有用信息,让模型更容易学到规律
- 每个项目、每个币的有效因子都可能不同,需要你根据实际情况设计和测试
5. 总结
- API能帮你拿到原始数据,但“因子”需要你自己加工和设计。
- 你可以先用API拿到数据,再用pandas/numpy等工具做统计、变化率、均值、极值等处理,变成适合建模的“因子”。
- 这就是量化里“因子工程”的核心:数据→加工→因子→模型。