长江证券几周前发了一篇比较水的研报 风格轮动策略(一):大小盘的趋势与周期-241218-22页_报告-报告厅


核心是用微盘回报率减大盘回报率, 然后对数值做hp滤波获得一个趋势线. 然后用回报率直接差与hp线的差值距离和正负判断当前大小谁强势.


整个论文写的比较水, 实际看回测它2015和2017后接近2年的阴跌都没能避过去. 只有2024的dma杠杆爆跌躲过了. 很怀疑是不是超参的过拟合.


python上有直接封装的 statsmodels.tsa.filters.hp_filter 两下就搞出来了.

我想在guorn复现这个指标, guorn这边尝试用自定义指标构建但一直报错,


GitHub Copilot

    当然可以。HP滤波器(Hodrick-Prescott滤波器)是一种用于分离时间序列中的趋势和周期成分的工具。它通过最小化以下目标函数来实现:

    [ \min \sum_{t=1}^{T} (y_t - \tau_t)^2 + \lambda \sum_{t=2}^{T-1} \left[ (\tau_{t+1} - \tau_t) - (\tau_t - \tau_{t-1}) \right]^2 ]

    其中:

    • ( y_t ) 是原始时间序列数据。
    • ( \tau_t ) 是趋势成分。
    • ( \lambda ) 是平滑参数,控制趋势的平滑程度。

    这个目标函数有两个部分:

    1. 第一部分 (\sum_{t=1}^{T} (y_t - \tau_t)^2) 是原始数据与趋势成分之间的误差平方和,表示趋势成分应尽可能接近原始数据。
    2. 第二部分 (\lambda \sum_{t=2}^{T-1} \left[ (\tau_{t+1} - \tau_t) - (\tau_t - \tau_{t-1}) \right]^2) 是趋势成分的二阶差分的平方和,表示趋势成分应尽可能平滑。

    为了实现HP滤波器,你可以按照以下步骤进行计算:

    1. 构建矩阵

      • 构建一个对角矩阵 ( I ) ,大小为 ( T \times T )。
      • 构建一个差分矩阵 ( D ),大小为 ( (T-2) \times T ),其形式如下: [ D = \begin{bmatrix} 1 & -2 & 1 & 0 & \cdots & 0 \ 0 & 1 & -2 & 1 & \cdots & 0 \ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots \ 0 & 0 & \cdots & 1 & -2 & 1 \end{bmatrix} ]
    2. 构建目标函数的矩阵形式

      • 目标函数可以转换为矩阵形式: [ \min \left( (y - \tau)^T (y - \tau) + \lambda \tau^T D^T D \tau \right) ]
      • 其中 ( y ) 是原始数据的列向量,( \tau ) 是趋势成分的列向量。
    3. 求解最小化问题

      • 通过求解以下线性方程组来获得趋势成分 ( \tau ): [ (I + \lambda D^T D) \tau = y ]
      • 其中 ( I ) 是单位矩阵,( D ) 是差分矩阵。
    4. 计算趋势成分

      • 通过矩阵运算求解 ( \tau ): [ \tau = (I + \lambda D^T D)^{-1} y ]
    5. 计算周期成分

      • 周期成分 ( c ) 可以通过原始数据减去趋势成分得到: [ c = y - \tau ]

    通过这些步骤,你可以在没有Python的环境中实现HP滤波器。你可以使用矩阵运算工具(如Excel或其他数学软件)来执行这些计算。