tfse-model-api-v0.2/Rating/scripts/Indicators.py

235 lines
5.5 KiB
Python

import functools
def params_check(params_index):
"""
参数校验
Parameters:
params_index: 参数顺序下标
Returns:
1.若参数中有None或除法计算分母为0 返回None
2.通过检验 返回func
"""
def decorator(func):
@functools.wraps(func)
def internal(*args, **kwargs):
# 检查参数中有没有None
if None in args:
return None
# 检查分母是否为0
if sum([args[index] for index in params_index]) == 0:
return None
return func(*args, **kwargs)
return internal
return decorator
@params_check([1, 2])
def roe(param1, param2, param3):
"""
ZH: 净资产收益率
EN: Return Of Equity
Parameters:
param1 - float 净利润
param2 - float 所有者权益合计(当期)
param3 - float 所有者权益合计(上期)
Returns:
value - float 净资产收益率
"""
value = param1 / (param2 + param3) * 2 * 100
value = round(value, 2)
return value
@params_check([2, 3])
def roa(param1, param2, param3, param4):
"""
ZH: 总资产报酬率
EN: Return Of Assets
Parameters:
param1 - float 利润总额
param2 - float 利息支出
param3 - float 资产总计(当期)
param4 - float 资产总计(上期)
Returns:
value - float 总资产报酬率
"""
value = (param1 + param2) / (param3 + param4) * 2 * 100
value = round(value, 2)
return value
@params_check([1, 2])
def tat(param1, param2, param3):
"""
ZH: 总资产周转率
EN: Total Assets Turnover
Parameters:
param1 - float 营业收入
param2 - float 资产总计(当期)
param3 - float 资产总计(上期)
Returns:
value - float 总资产周转率
"""
value = param1 / (param2 + param3) * 2 * 100
value = round(value)
return value
@params_check([1])
def acrt(param1, param2):
"""
ZH: 应收账款周转速度
EN: Accounts Receivable Turnover Speed
Parameters:
param1 - float 营业收入
param2 - float 应收账款
Returns:
value - float 应收账款周算速度
"""
value = round(param1 / param2, 2)
return value
@params_check([1, 2])
def ivtt(param1, param2, param3):
"""
ZH: 存货周转率
EN: Inventory Turnover
Parameters:
param1 - float 营业成本
param2 - float 存货(当期)
param3 - float 存货(上期)
Returns:
value - 存货周转率
"""
if param2 + param3 == 0:
return None
else:
value = param1 / (param2 + param3) * 2
value = round(value, 2)
return value
@params_check([1])
def dbar(param1, param2):
"""
ZH: 资产负债率
EN: Debt Asset Ratio
Parameters:
param1 - float 负债合计
param2 - float 资产总计
Returns:
value - float 资产负债率
"""
if param2 == 0:
return None
else:
value = round(param1 / param2 * 100, 2)
return value
def icm(param1, param2, param3, param4, param5):
"""
ZH: 利息保障倍数
EN: Interest Cover Multiplier
Parameters:
param1 - float 利润总额
param2 - float 计入财务费用的利息支出
param3 - float 资本化利息支出
param4 - float 短期借款
param5 - float 长期借款
Returns:
value - float 利息保障倍数
"""
if (param2 + param3) == 0 and (param4 + param5) != 0:
value = param1 / (param4 * 0.043 + param5 * 0.049)
value = round(value, 2)
return value
elif (param2 + param3) > 0:
value = (param1 + param2) / (param2 + param3)
value = round(value, 2)
return value
else:
return None
@params_check([2])
def qkr(param1, param2, param3):
"""
ZH: 速动比率
EN: Quick Ratio
Unit: %
Parameters:
param1 - float 流动资产合计
param2 - float 存货
param3 - float 流动负债合计
Returns:
value - float 速动比率
"""
if param3 == 0:
return None
else:
value = (param1 - param2) / param3
value = round(value, 2)
return value
@params_check([1])
def bgr(param1, param2):
"""
ZH: 营业增长率
EN: Business Growth Rate
Unit: %
Parameters:
param1 - float 期末营业收入
param2 - float 期初营业收入
Returns:
value - float 营业增长率
"""
if param2 == 0:
return None
else:
value = (param1 - param2) / param2 * 100
value = round(value, 2)
return value
@params_check([1])
def tagr(param1, param2):
"""
ZH: 总资产增长率
EN: Total Assets Growth Rate
Unit: %
Parameters:
param2 - float 期末资产总计
param3 - float 期初资产总计
Returns:
value - float 总资产增长率
"""
if param2 == 0:
return None
else:
value = (param1 - param2) / param2 * 100
value = round(value, 2)
return value
@params_check([1])
def tio(param1, param2):
"""
ZH: 技术投入比率
EN: Technology Input-Output Ratio
Unit: %
Parameters:
param1 - float 研发费用
param2 - float 营业收入
Returns:
value - type 技术投入比率
"""
if param2 == 0:
return None
else:
value = round(param1 / param2 * 100, 2)
return value