Esempio n. 1
0
 def _calc_factor_loading(cls, code, calc_date):
     """
     计算指定日期、指定个股LNCAP因子载荷
     Parameters:
     --------
     :param code: str
         个股代码, 如SH600000, 600000
     :param calc_date: datetime-like, str
         计算日期, 格式: YYYY-MM-DD
     :return: pd.Series
     --------
         个股的LNCAP因子载荷
         0. code
         1. lncap
         如果计算失败, 返回None
     """
     # 取得个股的非复权收盘价
     df_secu_quote = Utils.get_secu_daily_mkt(code,
                                              start=calc_date,
                                              fq=False,
                                              range_lookup=True)
     if df_secu_quote is None:
         return None
     secu_close = df_secu_quote['close']
     # 取得个股最新的A股总股本数据
     cap_struct = Utils.get_cap_struct(code, calc_date)
     if cap_struct is None:
         return None
     total_share = cap_struct.total - cap_struct.liquid_b - cap_struct.liquid_h
     # 计算总市值的自然对数值
     lncap = np.log(secu_close * total_share)
     liquid_cap = secu_close * cap_struct.liquid_a
     return pd.Series([Utils.code_to_symbol(code), lncap, liquid_cap],
                      index=['code', 'lncap', 'liquid_cap'])
Esempio n. 2
0
 def _calc_factor_loading(cls, code, calc_date):
     """
     计算指定日期、指定个股的价值因子,包含ep_ttm, bp_lr, ocf_ttm
     Parameters:
     --------
     :param code: str
         个股代码:如600000或SH600000
     :param calc_date: datetime-like or str
         计算日期,格式YYYY-MM-DD, YYYYMMDD
     :return: pd.Series
     --------
         价值类因子值
         0. ep_ttm: TTM净利润/总市值
         1. bp_lr: 净资产(最新财报)/总市值
         2. ocf_ttm: TTM经营性现金流/总市值
         若计算失败,返回None
     """
     code = Utils.code_to_symbol(code)
     calc_date = Utils.to_date(calc_date)
     # 读取TTM财务数据
     ttm_fin_data = Utils.get_ttm_fin_basic_data(code, calc_date)
     if ttm_fin_data is None:
         return None
     # 读取最新财报数据
     report_date = Utils.get_fin_report_date(calc_date)
     fin_basic_data = Utils.get_fin_basic_data(code, report_date)
     if fin_basic_data is None:
         return None
     # 计算总市值
     mkt_daily = Utils.get_secu_daily_mkt(code,
                                          calc_date,
                                          fq=False,
                                          range_lookup=True)
     if mkt_daily.shape[0] == 0:
         return None
     cap_struct = Utils.get_cap_struct(code, calc_date)
     if cap_struct is None:
         return None
     total_cap = cap_struct.total - cap_struct.liquid_b - cap_struct.liquid_h
     total_mkt_cap = total_cap * mkt_daily.close
     # 计算价值类因子
     ep_ttm = ttm_fin_data[
         'NetProfit'] * util_ct.FIN_DATA_AMOUNT_UNIT / total_mkt_cap
     ocf_ttm = ttm_fin_data[
         'NetOperateCashFlow'] * util_ct.FIN_DATA_AMOUNT_UNIT / total_mkt_cap
     bp_lr = fin_basic_data[
         'ShareHolderEquity'] * util_ct.FIN_DATA_AMOUNT_UNIT / total_mkt_cap
     return Series([round(ep_ttm, 6),
                    round(bp_lr, 6),
                    round(ocf_ttm, 6)],
                   index=['ep_ttm', 'bp_lr', 'ocf_ttm'])
Esempio n. 3
0
 def _calc_factor_loading(cls, code, calc_date):
     """
     计算指定日期、指定个股的规模因子值
     Parameters:
     --------
     :param code: str
         个股代码,如600000、SH600000
     :param calc_date: datetime-like, str
         规模因子计算日期,格式YYYY-MM-DD或YYYYMMDD
     :return: pd.Series
     --------
         个股规模因子值,各个index对应的含义如下:
         0. LnTotalMktCap: 总市值对数
         1. LnLiquidMktCap: 流通市值对数
         若计算失败,返回None
     """
     # 取得证券截止指定日期最新的非复权行情数据
     code = Utils.code_to_symbol(code)
     calc_date = Utils.to_date(calc_date)
     mkt_daily = Utils.get_secu_daily_mkt(code,
                                          calc_date,
                                          fq=False,
                                          range_lookup=True)
     if mkt_daily.shape[0] == 0:
         return None
     # 取得证券截止指定日期前最新的股本结构数据
     cap_struct = Utils.get_cap_struct(code, calc_date)
     if cap_struct is None:
         return None
     # 计算证券的规模因子
     scale_factor = Series()
     total_cap = cap_struct.total - cap_struct.liquid_b - cap_struct.liquid_h
     scale_factor['LnTotalMktCap'] = math.log(total_cap * mkt_daily.close)
     scale_factor['LnLiquidMktCap'] = math.log(cap_struct.liquid_a *
                                               mkt_daily.close)
     return scale_factor