def Value002(cls,
                 data: pd.DataFrame,
                 net_profit_cut: str = FISN.Net_Pro_Cut.value,
                 total_mv: str = PVN.TOTAL_MV.value,
                 switch: bool = False):
        """
        扣非市盈率倒数(EP_cut_TTM): 市盈率(扣除非经常性损益)倒数
        :param data:
        :param net_profit_cut:
        :param total_mv:
        :param switch:
        :return:
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[net_profit_cut] / data[total_mv]
        data_fact = data[func_name].copy(deep=True)
        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
Beispiel #2
0
    def HighFreq035(cls, data: pd.DataFrame, n: int = 21):
        """
        博弈因子(Stren):存在涨停主卖为零情况,会导致分母为0,根据数值特征范围将分母为零的计算设置为2
        """
        factor_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[
            'buy_amount'] = data['BuyAll_AM_120min'] + data['BuyAll_PM_120min']
        data['sale_amount'] = data['SaleAll_AM_120min'] + data[
            'SaleAll_PM_120min']

        # 升序
        w = cls.Half_time(n)
        data[['buy_amount_w',
              'sale_amount_w']] = data[['buy_amount', 'sale_amount']].groupby(
                  KN.STOCK_ID.value, group_keys=False).rolling(
                      n, min_periods=n).apply(lambda x: (x * w).sum())
        data[factor_name] = data['buy_amount_w'] / data['sale_amount_w']

        # 无穷大值设置为2
        data[factor_name][np.isinf(data[factor_name])] = 2

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Value004(cls,
                 data: pd.DataFrame,
                 operator_income: str = FISN.Op_Income.value,
                 total_mv: str = PVN.TOTAL_MV.value,
                 switch: bool = False):
        """
        市销率倒数(TTM)(SP_TTM):市销率倒数
        :param data:
        :param operator_income:
        :param total_mv:
        :param switch:
        :return:
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[operator_income] / data[total_mv]
        data_fact = data[func_name].copy(deep=True)
        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
    def Value008(cls,
                 data: pd.DataFrame,
                 Surplus_Reserves: str = FBSN.Surplus_Reserves.value,
                 Undistributed_Profit: str = FBSN.Undistributed_Profit.value,
                 total_mv: str = PVN.TOTAL_MV.value,
                 switch: bool = False):
        """
        股息率倒数(DP_TTM):股息率(近12个月现金红利和)
        股息 = 期末留存收益 - 期初留存收益
        留存收益 = 盈余公积 + 未分配利润
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data["RE"] = data[Surplus_Reserves] + data[Undistributed_Profit]
        data[func_name] = data["RE"] / data[total_mv]
        data_fact = data[func_name].copy(deep=True)
        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
Beispiel #5
0
    def Distribution031(cls, data: pd.DataFrame, n: int = 20, **kwargs):
        """
        N日上午收益与下午收益差和(AVP)
        """
        factor_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

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

        data['diff'] = data['am_ret_stock'] - data['pm_ret_stock']

        # filter momentum
        data[factor_name] = data['diff'].groupby(
            KN.STOCK_ID.value, group_keys=False).rolling(n).sum()

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Value014(cls,
                 data: pd.DataFrame,
                 free_cash_flow: str = FCFSN.Free_Cash_Flow.value,
                 total_mv: str = PVN.TOTAL_MV.value,
                 switch: bool = False):
        """
        市现率倒数(自由现金流,TTM)(FCFP_TTM):市现率倒数(自由现金流)
        :param data:
        :param free_cash_flow:
        :param total_mv:
        :param switch:
        :return:
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[free_cash_flow] / data[total_mv]
        data_fact = data[func_name].copy(deep=True)
        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
    def Momentum009(cls,
                    data: pd.DataFrame,
                    close_price: str = PVN.CLOSE.value,
                    bm_price: str = 'index_close',
                    n: int = 20):
        """
        市场alpha因子
        """
        factor_name = sys._getframe().f_code.co_name + f'_{n}'
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        # ret
        data = data.groupby(KN.STOCK_ID.value).pct_change().dropna()
        data_new = data.groupby(
            KN.STOCK_ID.value,
            group_keys=False).apply(lambda x: cls._reg_rolling(
                x, bm_price, close_price, False, True, n))
        data_new.name = factor_name

        F = FactorInfo()
        F.data = data_new
        F.factor_type = 'MTM'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Momentum013(cls,
                    data: pd.DataFrame,
                    close_price: str = PVN.CLOSE.value,
                    n: int = 1) -> FactorInfo:
        """
        动量CTC收益率(MTM_CTC):N日收盘价计算的收益率均值
        :return:
        """
        factor_name = sys._getframe().f_code.co_name + f'_{n}'
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data['return'] = data[close_price].groupby(
            KN.STOCK_ID.value).pct_change()
        data[factor_name] = data['return'].groupby(
            KN.STOCK_ID.value, group_keys=False).rolling(n,
                                                         min_periods=1).mean()

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'MTM'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Momentum017(cls,
                    data: pd.DataFrame,
                    open_price: str = PVN.OPEN.value,
                    close_price: str = PVN.CLOSE.value,
                    n: int = 1) -> FactorInfo:
        """
        动量OTC收益率均值(MTM_OTC):N日开盘价与收盘价收益率均值
        :return:
        """
        factor_name = sys._getframe().f_code.co_name + f'_{n}'
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data['return'] = data.groupby(
            KN.STOCK_ID.value, group_keys=False).apply(lambda x: (x[
                open_price] / x[close_price].shift(1) - 1).shift(-1))

        data[factor_name] = data['return'].groupby(
            KN.STOCK_ID.value, group_keys=False).rolling(n,
                                                         min_periods=1).mean()

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'MTM'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Profit013(cls,
                  data: pd.DataFrame,
                  net_profit_in: str = FISN.Net_Pro_In.value,
                  total_asset: str = FBSN.Total_Asset.value,
                  switch: bool = False):
        """
        总资产净利率(TTM)(ROA_TTM)
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([SN.REPORT_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[net_profit_in] / data[total_asset]
        data[func_name][np.isinf(data[func_name])] = np.nan

        if switch:
            data_fact = cls()._switch_freq(data_=data, name=func_name)
        else:
            data_fact = None

        data.reset_index(inplace=True)

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
    def Momentum012(cls,
                    data: pd.DataFrame,
                    price: str = PVN.CLOSE.value,
                    n: int = 20):
        """
        路径动量因子(MTM_PathLen)
        """
        factor_name = sys._getframe().f_code.co_name + f'_{n}'
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data['stand'] = data[price].groupby(
            KN.STOCK_ID.value, group_keys=False).apply(
                lambda x: (x - x.rolling(n, min_periods=1).mean()) / x.rolling(
                    n, min_periods=1).std(ddof=1))
        data['stand'][np.isinf(data['stand'])] = np.nan

        data['diff'] = data['stand'].groupby(KN.STOCK_ID.value).diff(1).abs()
        data[factor_name] = data['diff'].groupby(KN.STOCK_ID.value,
                                                 group_keys=False).rolling(
                                                     n, min_periods=1).sum()

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'MTM'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Value011(cls,
                 data: pd.DataFrame,
                 net_asset_ex: str = FBSN.Net_Asset_Ex.value,
                 total_mv: str = PVN.TOTAL_MV.value,
                 switch: bool = False) -> FactorInfo:
        """
        市净率倒数(TTM)(BP_TTM):市净率的倒数
        :param data:
        :param net_asset_ex:
        :param total_mv:
        :param switch:
        :return:
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[net_asset_ex] / data[total_mv]
        data_fact = data[func_name].copy(deep=True)
        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
    def Profit026(cls,
                  data: pd.DataFrame,
                  net_profit_in: str = FISN.Net_Pro_In.value,
                  operator_income: str = FISN.Op_Income.value,
                  switch: bool = False):
        """
        当期净利润率(NP)
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([SN.REPORT_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[net_profit_in] / data[operator_income]
        data[np.isinf(data[func_name])] = 0

        if switch:
            data_fact = cls()._switch_freq(data_=data, name=func_name)
        else:
            data_fact = None

        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
Beispiel #14
0
    def VolPrice017(cls, data: pd.DataFrame, n: int = 20, **kwargs):
        """PMA 特殊"""
        factor_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        # Calculate AM and PM returns on stocks
        data['am_ret_stock'] = data['2hPrice'] / data['open'] - 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[factor_name] = data['pm_ret_stock']

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Solvency010(cls,
                    data: pd.DataFrame,
                    currency: str = FBSN.Currency.value,
                    tradable_asset: str = FBSN.Tradable_Asset.value,
                    op_net_cash_flow: str = FCFSN.Op_Net_CF.value,
                    short_borrow: str = FBSN.ST_Borrow.value,
                    short_bond_payable: str = FBSN.ST_Bond_Payable.value,
                    short_iliq_liability_1y: str = FBSN.ST_IL_LB_1Y.value,
                    switch: bool = False) -> FactorInfo:
        """
        短期偿债能力指标1(ShortDebt1_CFPA_qoq):(现金及现金等价物 + TTM经营性现金流)/短期有息负债
        现金及现金等价物 = 货币资金 + 交易性金融资产
        经营性现金流 = 经营性现金流量净额
        短期有息负债 = 短期借款 + 短期应付债券 + 一年内到期的非流动负债

        :param data:
        :param currency:
        :param tradable_asset:
        :param op_net_cash_flow:
        :param short_borrow:
        :param short_bond_payable:
        :param short_iliq_liability_1y:
        :param switch:
        :return:
        """

        func_name = sys._getframe().f_code.co_name
        data.set_index([SN.REPORT_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        # 短期偿债能力指标
        ShortDebt1_CFPA = data[[currency, tradable_asset, op_net_cash_flow]].sum(skipna=True,
                                                                                 axis=1) / \
                          data[[short_borrow, short_bond_payable, short_iliq_liability_1y]].sum(skipna=True,
                                                                                                axis=1)

        # switch inf to Nan
        ShortDebt1_CFPA[np.isinf(ShortDebt1_CFPA)] = np.nan

        data[func_name] = ShortDebt1_CFPA.groupby(
            KN.STOCK_ID.value).apply(lambda x: x.diff(1) / abs(x.shift(1)))

        if switch:
            data_fact = cls()._switch_freq(data_=data, name=func_name)
        else:
            data_fact = None

        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
    def Momentum025(cls,
                    data: pd.DataFrame,
                    high_price: str = PVN.HIGH.value,
                    close_price: str = PVN.CLOSE.value,
                    n: int = 1) -> FactorInfo:
        """
        动量CTH收益率绝对值均值(MTM_CTH_abs):N日收盘价与最高价收益率绝对值均值
        :return:
        """
        factor_name = sys._getframe().f_code.co_name + f'_{n}'
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data['return'] = data.groupby(
            KN.STOCK_ID.value, group_keys=False).apply(
                lambda x: abs(x[close_price] / x[high_price] - 1))

        data[factor_name] = data['return'].groupby(
            KN.STOCK_ID.value, group_keys=False).rolling(n,
                                                         min_periods=1).mean()

        F = FactorInfo()
        F.data = data[factor_name]
        F.factor_type = 'MTM'
        F.factor_category = cls().__class__.__name__
        F.factor_name = factor_name

        return F
    def Value009(cls,
                 data: pd.DataFrame,
                 operator_income: str = FISN.Op_Income.value,
                 total_mv: str = PVN.TOTAL_MV.value,
                 switch: bool = False):
        """
        企业价值倍数倒数(最新财报,扣除现金)(EV2EBITDA_LR):企业价值(扣除现金)/息税折旧摊销前利润
        企业价值 = 总市值 + 负债总计 - 无息负债 - 货币资金
        :param data:
        :param operator_income:
        :param total_mv:
        :param switch:
        :return:
        """
        func_name = sys._getframe().f_code.co_name
        data.set_index([KN.TRADE_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        data[func_name] = data[operator_income] / data[total_mv]
        data_fact = data[func_name].copy(deep=True)
        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
    def Solvency012(cls,
                    data: pd.DataFrame,
                    total_asset: str = FBSN.Total_Asset.value,
                    currency: str = FBSN.Currency.value,
                    tradable_asset: str = FBSN.Tradable_Asset.value,
                    short_borrow: str = FBSN.ST_Borrow.value,
                    short_bond_payable: str = FBSN.ST_Bond_Payable.value,
                    short_iliq_liability_1y: str = FBSN.ST_IL_LB_1Y.value,
                    switch: bool = False):
        """
        短期偿债能力指标3(ShortDebt3_CFPA_qoq):(现金及现金等价物 - 短期有息负债)/ 总资产
        现金及现金等价物 = 货币资金 + 交易性金融资产
        短期有息负债 = 短期借款 + 短期应付债券 + 一年内到期的非流动负债
        :param data:
        :param total_asset:
        :param currency:
        :param tradable_asset:
        :param short_borrow:
        :param short_bond_payable:
        :param short_iliq_liability_1y:
        :param switch:
        :return:
        """

        func_name = sys._getframe().f_code.co_name
        data.set_index([SN.REPORT_DATE.value, KN.STOCK_ID.value], inplace=True)
        data.sort_index(inplace=True)

        x1 = data[[currency, tradable_asset]].sum(skipna=True, axis=1)
        x2 = data[[short_borrow, short_bond_payable,
                   short_iliq_liability_1y]].sum(skipna=True, axis=1)
        y = data[total_asset]

        # 短期偿债能力指标
        ShortDebt2_CFPA = (x1 - x2) / y

        data[func_name] = ShortDebt2_CFPA.groupby(
            KN.STOCK_ID.value).apply(lambda x: x.diff(1) / abs(x.shift(1)))
        # switch inf to Nan
        data[func_name][np.isinf(data[func_name])] = np.nan

        if switch:
            data_fact = cls()._switch_freq(data_=data, name=func_name)
        else:
            data_fact = None

        data = data.reset_index()

        F = FactorInfo()
        F.data_raw = data[[
            SN.ANN_DATE.value, KN.STOCK_ID.value, SN.REPORT_DATE.value,
            func_name
        ]]
        F.data = data_fact
        F.factor_type = data['type'][0]
        F.factor_category = cls().__class__.__name__
        F.factor_name = func_name

        return F
Beispiel #19
0
    def Distribution019(cls, data: pd.DataFrame, **kwargs):
        """成交量差分绝对值均值(Vol_diff_abs_mean)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
Beispiel #20
0
    def Distribution008(cls, data: pd.DataFrame, **kwargs):
        """高频量价相关性(HFD_Corr_Vol_P)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

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

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

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

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
Beispiel #23
0
    def Distribution027(cls, data: pd.DataFrame, **kwargs):
        """N日分钟振幅波动稳定性(HFD_ret_std)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
Beispiel #24
0
    def Distribution007(cls, data: pd.DataFrame, **kwargs):
        """高频下行波动占比(HFD_std_down_occupy)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

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

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
Beispiel #26
0
    def Distribution024(cls, data: pd.DataFrame, **kwargs):
        """均匀分布主动占比因子(Event_Amt_R)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
Beispiel #27
0
    def HighFreq036(cls, data: pd.DataFrame, **kwargs):
        """开盘X分钟成交占比(Open_X_vol)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

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

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

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

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F
Beispiel #30
0
    def Distribution009(cls, data: pd.DataFrame, **kwargs):
        """高频收益偏度(HFD_ret_skew)"""

        F = FactorInfo()
        F.data = data
        F.factor_type = 'HFD'
        F.factor_category = cls().__class__.__name__
        F.factor_name = data.name

        return F