def VolPrice017(cls, data: pd.DataFrame, n: int = 20, **kwargs):
        """PMA 特殊"""
        factor_name = sys._getframe().f_code.co_name + f"_{n}days"
        data = data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value])
        data = data.sort_index()

        # Calculate AM and PM returns on stocks
        data['am_ret_stock'] = data['2hPrice'] / data[PVN.OPEN.value] - 1
        data['pm_ret_stock'] = data['4hPrice'] / data['2hPrice'] - 1

        # filter momentum
        # data[factor_name] = data.groupby(KN.TRADE_DATE.value,
        #                                  group_keys=False).apply(lambda x: cls._reg(x, 'am_ret_stock', 'pm_ret_stock'))
        # data['mean'] = data['res'].groupby(KN.STOCK_ID.value,
        #                                    group_keys=False).rolling(n, min_periods=1).apply(np.nanmean)
        # data['std'] = data['res'].groupby(KN.STOCK_ID.value,
        #                                   group_keys=False).rolling(n, min_periods=1).apply(np.nanstd)
        # data[factor_name] = data['mean'] / data['std']
        # data[factor_name][np.isinf(data[factor_name])] = 0
        data = cls().reindex(data)
        data[factor_name] = data['pm_ret_stock'].groupby(
            KN.TRADE_DATE.value).apply(
                lambda x: x.rolling(n, min_periods=round(n * 0.8)).mean())

        F = DataInfo()
        F.data = data[factor_name]
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def VolPrice013(cls, data: pd.DataFrame, **kwargs):
        """轨迹非流动因子(Illiq_Track)"""

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice012(cls, data: pd.DataFrame, **kwargs):
        """高频反转因子(HFD_Rev)"""

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice011(cls, data: pd.DataFrame, **kwargs):
        """聪明钱因子(SmartQ)"""

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice009(cls, data: pd.DataFrame, **kwargs):
        """改进反转(Rev_improve)"""

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice008(cls, data: pd.DataFrame, **kwargs):
        """大单驱动涨幅(MOM_bigOrder)"""

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice014(cls, data: pd.DataFrame, **kwargs):
        """
        加权收盘价比(Close_Weight)
        默认一分钟频率
        """

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice019(cls, data: pd.DataFrame, **kwargs):
        """
        订单失衡率(HFD_OLR)
        日频转月频需要采用衰减加权的方式
        """

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
    def VolPrice020(cls, data: pd.DataFrame, **kwargs):
        """
        市价偏离率(HFD_MPB)
        日频转月频需要采用衰减加权的方式
        剔除开盘集合竞价
        集合竞价会存在0盘口,用前值填充
        """

        F = DataInfo()
        F.data = data
        F.data_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F