Source code for factorset.factors.InterestCover

# -*- coding:utf-8 -*-
"""
@author:code37
@file:InterestCover.py
@time:2018/3/513:39
"""

import pandas as pd
import tushare as ts
from factorset.factors import BaseFactor
from factorset.data.OtherData import code_to_symbol, shift_date
from factorset.data import CSVParser as cp

[docs]class InterestCover(BaseFactor): """ :名称: 利息覆盖率;利息覆盖倍数(InterestCover) :计算方法: EBIT / 利息费用,其中 EBIT=利润总额+净利息费用;净利息费用=利息支出-利息收入,若未披露财务费用附注,则直接取财务费用值 :应用: 利息覆盖率可以衡量企业的偿债能力,特别是在公司经历业绩低谷,自由现金流脆弱的时期更为关键,它可以说明公司是否还有能力支付利息以避免偿债风险,以及是否还有融资能力来扭转困境。 """ def __init__(self, factor_name='InterestCover', tickers='000016.SH', data_source='', factor_parameters={}, save_dir=None): # Initialize super class. super(InterestCover, self).__init__(factor_name=factor_name, tickers=tickers, factor_parameters=factor_parameters, data_source=data_source, save_dir=save_dir)
[docs] def prepare_data(self, begin_date, end_date): shifted_begin_date = shift_date(begin_date, 500) # EBIT / 利息费用,其中 EBIT=利润总额34+净利息费用 # 净利息费用=利息支出-利息收入,若未披露财务费用附注,则直接取财务费用值56 inst = cp.concat_fund(self.data_source, self.tickers, 'IS').loc[shifted_begin_date:end_date, ['ticker', 34, 56]] self.inst = inst[(inst[56] > 1) | (inst[56] < -1)].copy() self.inst['interscover'] = (self.inst[34] + self.inst[56]) / self.inst[56] self.inst.sort_index(ascending=True, inplace=True)
[docs] def generate_factor(self, date_str): revenue_cost_df = self.inst[:date_str] interscover = revenue_cost_df.groupby('ticker').apply(lambda x: x['interscover'].iloc[0]) if not len(interscover): print(date_str) print(revenue_cost_df) return interscover
if __name__ == '__main__': from_dt = '2017-03-06' to_dt = '2018-03-09' # 取沪深300 hs300 = ts.get_hs300s() hs300.code = hs300.code.apply(code_to_symbol) InterestCover = InterestCover( factor_name='InterestCover', factor_parameters={}, tickers=hs300.code.tolist(), save_dir='', data_source='D:\\idwzx\\project\\factorset\\data', ) InterestCover.generate_factor_and_store(from_dt, to_dt) print('因子构建完成,并已成功入库!')