量化交易 均 7.18

面向demo学习量化建模
这段描述提供了一个量化交易策略的核心思路。下面是对该策略的梳理和总结:

1. 数据加载与预处理

  • 数据来自 /kaggle/input/avenir-hku-web/kline_data/train_data 下的 Parquet 文件,每个文件包含单一币种的K线数据,字段包括时间戳、开盘价、最高价、最低价、收盘价和交易量等。

  • 通过 get_all_symbol_list 函数扫描文件目录,获取所有币种符号。

  • 使用并行化的 get_single_symbol_kline_data 函数读取各币种数据,并计算多个技术指标。

  • 指标计算:VWAP、RSI、MACD、买卖量比率、VWAP偏离度、布林带宽度、ATR等。这些因子反映了价格趋势、波动性、交易活跃度等。

    • VWAP:通过交易金额与交易量的比值计算,并用线性插值填补空缺。
    • RSIMACD:通过 ta 库计算,分别用于捕捉超买超卖和趋势反转。
    • 布林带宽度ATR:反映价格波动范围和波动强度。
  • 收盘价和交易量被限制在5%到95%的分位数范围内,以减少异常值的影响。

  • 所有数据对齐到统一的15分钟时间轴,缺失时间点通过前向填充补全。

2. 因子计算与数据集构建

  • 目标变量:基于VWAP计算24小时的收益率。

  • 计算的因子

    • 波动率:7天的15分钟收益率标准差。
    • 动量:VWAP的7天变化率。
    • 交易量:7天的总交易量。
    • RSI、MACD、布林带宽度、ATR等技术因子。
  • 使用 stack 方法将因子转化为长格式数据,并与目标变量合并为训练数据集。

  • 使用 dropna 去除空值,之后通过 StandardScaler 对特征进行标准化。

3. 模型训练与优化

  • 采用 XGBoost回归模型 进行训练,设置了如下参数:

    • 学习率:0.05
    • 最大深度:6
    • 子采样率:0.8
    • 树木数量:200
    • 早停:10次
  • 加权斯皮尔曼相关系数:对高低10%收益率的样本加大权重,增强对极端值的预测。

  • 时间序列交叉验证(5折)确保模型具有对时间趋势的鲁棒性。

  • 通过对验证集上加权斯皮尔曼得分最高的模型进行选择。

  • 预测结果经过 指数加权移动平均 平滑,减少噪声。

4. 提交文件生成

  • 预测结果结合时间戳和币种符号生成ID列,ID格式为时间戳+币种符号,移除空格和特殊字符以符合提交格式。
  • 读取 /kaggle/input/avenir-hku-web/submission_id.csv 文件,确保提交文件包含所有要求的ID,缺失的ID使用0填充。
  • 生成最终的 submit.csv(包含ID和预测收益率)和 check.csv(包含真实收益率),并计算整体加权斯皮尔曼相关系数以评估模型性能。
  • 提供调试信息,以监控数据丢失和格式问题。

5. 优化与改进

  • 并行处理调整:将并行进程数量减少到2,以降低内存压力。

  • ID格式一致性检查数据量监控(特别是在 dropna 操作前后)。

  • 优化点

    • 多时间尺度因子:结合短期和长期趋势,提升模型对市场动态的捕捉能力。
    • 跨币种相关性分析:考虑不同币种之间的关系,增强模型的预测能力。
    • 超参数调优:进一步优化模型性能。

6. 新修改内容:

  • PyTorch 加速:使用张量计算加速因子的计算,特别是在滚动窗口的 EMA(指数加权移动平均)计算上进行优化。

  • 新增因子

    • 4小时动量:捕捉短期趋势。
    • 24小时交易量动量:反映市场活跃度的变化。
    • 买卖量差分:衡量买卖压力,替代原有的买卖量比率。
  • 因子计算逻辑

    • 动量因子:通过VWAP的4小时和7天窗口平衡短期和长期趋势。
    • 交易量因子:结合长期总量(df_amount_sum)和短期变化(df_vol_momentum)。
    • 市场压力:通过买卖量差分(df_buy_pressure)替代买卖比率,直接反映市场不平衡。
  • SHAP分析:通过SHAP值分析评估因子的贡献,便于后续调整和优化因子选择。

总结:

该量化策略从数据处理到模型训练再到最终预测结果生成,采用了大量的技术指标和因子来捕捉市场的动态,并通过XGBoost回归模型进行训练与优化。最新的改进通过PyTorch加速计算,并引入了更多的短期和长期市场趋势指标,同时通过SHAP分析提升因子的可解释性和优化空间。


上图为b站up主提出的量化学习修仙论

1 个赞

道友早日结成元婴

1 个赞

我好像以前跳过2.3直接学元婴去了