跳转至

价值分析

价值分析相关概念

TTM(Trailing Twelve Months)

  • 定义: TTM(Trailing Twelve Months)指的是过去12个月的财务数据,通常用于评估公司财务表现的最新情况。TTM数据相较于年度报告数据更具时效性,因为它反映了最近的财务状况,而不仅仅是过去一年的整体表现。

  • 应用: TTM常用于多个财务指标的计算:

    • PE(TTM): 市盈率,基于过去四个季度的每股收益。
    • 市销率(TTM): 基于过去四个季度的营业收入。
    • 市现率(TTM): 基于过去四个季度的每股现金流量。

PE(TTM)

定义: PE(市盈率)是指当前股价与过去四个季度每股收益(EPS)总和的比值。

\[PE(TTM)=\frac{当前股价}{每股收益(TTM)}\]
  • PE(TTM) 用于衡量公司当前股价相对于其盈利能力的高低。
  • 较低的PE可能意味着股票被低估,而较高的PE可能表示市场对公司未来增长的预期较高。

PE(静)

定义: PE(静态市盈率)是指当前股价与最新年报中每股收益的比值。

\[PE(静)=\frac{当前股价}{最新年报每股收益}\]
  • 这个指标提供了一个基于最新财务数据的盈利能力评估。
  • 在比较不同公司的PE时,使用静态PE可以更直接反映公司财务状况。

市销率(TTM)

定义: 市销率是总市值与过去四个季度营业收入总和的比值。

\[市销率(TTM)=\frac{总市值}{营业收入(TTM)}\]
  • 市销率用于评估公司销售收入的价值,尤其适用于尚未盈利的公司。
  • 较低的市销率可能表示公司被低估,或其销售表现不佳。

总市值与前四季度营业收入总和的比值

市现率(TTM)

定义: 市现率是当前股价与过去四个季度每股现金流量总和的比值。

\[市现率(TTM)=\frac{当前股价}{每股现金流量(TTM)}\]
  • 市现率评估公司股价相对于其现金流的价值,反映了公司的现金生成能力。
  • 较低的市现率可能预示着公司被低估或现金流表现良好。

PEG值

定义: PEG值是PE(TTM)与每股收益近3年复合增长率的比值。

\[PEG=\frac{PE(TTM)}{EPS复合年增长率}\]
  • PEG值用于评估公司成长性与当前估值之间的关系。
  • 一般认为,PEG值小于1表示公司被低估,反之则可能被高估。

StockValuationMapping

字段映射 个股估值

StockValuation

StockValuation(
    security_code: Optional[str] = None,
    industry_code: Optional[str] = None,
    date: Optional[str] = None,
    start_date: Optional[str] = None,
    end_date: Optional[str] = None,
    size: Optional[int] = 50,
    verbose: Optional[bool] = False,
    logger: Optional[Callable] = None,
    **kwargs: Any
)

查询 个股估值

Notes
# 1. 查询全部股票的估值信息
data = StockValuation(date="2024-09-30").load()
data.to_frame(chinese_column=True)

# 2. 查询某行业全部股票的估值信息
data = StockValuation(date="2024-09-30", industry_code="016023").load()
data.to_frame(chinese_column=True)

# 3. 查询某只股票的估值信息
data = StockValuation(start_data="2024-08-30", code="000059").load()
data.to_frame(chinese_column=True)

Parameters:

Name Type Description Default
security_code Optional[str]

证券代码

None
industry_code Optional[str]

行业代码

None
date Optional[str]

交易日期

None
start_date Optional[str]

开始日期

None
end_date Optional[str]

结束日期

None
size Optional[int]

返回条数

50
verbose Optional[bool]

是否打印日志

False
logger Optional[Callable]

自定义日志

None
**kwargs Any

其他参数

{}
Source code in wisecon\stock\valuation\stock.py
def __init__(
        self,
        security_code: Optional[str] = None,
        industry_code: Optional[str] = None,
        date: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        size: Optional[int] = 50,
        verbose: Optional[bool] = False,
        logger: Optional[Callable] = None,
        **kwargs: Any
):
    """
    Notes:
        ```python
        # 1. 查询全部股票的估值信息
        data = StockValuation(date="2024-09-30").load()
        data.to_frame(chinese_column=True)

        # 2. 查询某行业全部股票的估值信息
        data = StockValuation(date="2024-09-30", industry_code="016023").load()
        data.to_frame(chinese_column=True)

        # 3. 查询某只股票的估值信息
        data = StockValuation(start_data="2024-08-30", code="000059").load()
        data.to_frame(chinese_column=True)
        ```

    Args:
        security_code: 证券代码
        industry_code: 行业代码
        date: 交易日期
        start_date: 开始日期
        end_date: 结束日期
        size: 返回条数
        verbose: 是否打印日志
        logger: 自定义日志
        **kwargs: 其他参数
    """
    self.security_code = security_code
    self.industry_code = industry_code
    self.date = date
    self.start_date = start_date
    self.end_date = end_date
    self.size = size
    self.mapping = StockValuationMapping()
    self.verbose = verbose
    self.logger = logger
    self.kwargs = kwargs
    self.request_set(description="个股估值")
    self.conditions = []
    self.validate_date_format(date=[start_date, end_date, date])

IndustryValuationMapping

字段映射 上市公司行业估值

IndustryValuation

IndustryValuation(
    industry_code: Optional[str] = None,
    date: Optional[str] = None,
    start_date: Optional[str] = None,
    end_date: Optional[str] = None,
    size: Optional[int] = 50,
    verbose: Optional[bool] = False,
    logger: Optional[Callable] = None,
    **kwargs: Any
)

查询 上市公司行业估值

Notes
# 1. 查询某日期全部行业估值
data = IndustryValuation(date="2024-10-10").load()
data.to_frame(chinese_column=True)

# 2. 查询某周期某行业估值
data = IndustryValuation(
    start_date="2024-10-01", end_date="2024-10-20",
    limit=50, industry_code="016017"
).load()
data.to_frame(chinese_column=True)

Parameters:

Name Type Description Default
industry_code Optional[str]

行业代码

None
date Optional[str]

查询日期

None
start_date Optional[str]

开始日期

None
end_date Optional[str]

结束日期

None
size Optional[int]

返回条数

50
verbose Optional[bool]

是否打印日志

False
logger Optional[Callable]

自定义日志

None
**kwargs Any

其他参数

{}
Source code in wisecon\stock\valuation\industry.py
def __init__(
        self,
        industry_code: Optional[str] = None,
        date: Optional[str] = None,
        start_date: Optional[str] = None,
        end_date: Optional[str] = None,
        size: Optional[int] = 50,
        verbose: Optional[bool] = False,
        logger: Optional[Callable] = None,
        **kwargs: Any
):
    """
    Notes:
        ```python
        # 1. 查询某日期全部行业估值
        data = IndustryValuation(date="2024-10-10").load()
        data.to_frame(chinese_column=True)

        # 2. 查询某周期某行业估值
        data = IndustryValuation(
            start_date="2024-10-01", end_date="2024-10-20",
            limit=50, industry_code="016017"
        ).load()
        data.to_frame(chinese_column=True)
        ```

    Args:
        industry_code: 行业代码
        date: 查询日期
        start_date: 开始日期
        end_date: 结束日期
        size: 返回条数
        verbose: 是否打印日志
        logger: 自定义日志
        **kwargs: 其他参数
    """
    self.industry_code = industry_code
    self.date = date
    self.start_date = start_date
    self.end_date = end_date
    self.size = size
    self.mapping = IndustryValuationMapping()
    self.verbose = verbose
    self.logger = logger
    self.kwargs = kwargs
    self.conditions = []
    self.validate_date_format(date=[start_date, end_date, date], )
    self.request_set(description="上市公司行业估值")

MarketValuationMapping

字段映射 市场整体估值

MarketValuation

MarketValuation(
    market: Optional[
        Literal[
            "沪深两市",
            "沪市主板",
            "科创板",
            "深市主板",
            "创业板",
        ]
    ] = "沪深两市",
    start_date: Optional[str] = "2020-10-08",
    end_date: Optional[str] = None,
    size: Optional[int] = 50,
    verbose: Optional[bool] = False,
    logger: Optional[Callable] = None,
    **kwargs: Any
)

查询 市场整体估值

{
    "000300": "沪深300",
    "000001": "上证指数",
    "000688": "科创50",
    "399001": "深证指数",
    "399006": "创业板指数",
}

Notes
data = MarketValuation(market=market, size=5).load()
data.to_frame(chinese_column=True)

Parameters:

Name Type Description Default
market Optional[Literal['沪深两市', '沪市主板', '科创板', '深市主板', '创业板']]

市场名称

'沪深两市'
start_date Optional[str]

开始日期

'2020-10-08'
end_date Optional[str]

结束日期

None
size Optional[int]

返回条数

50
verbose Optional[bool]

是否显示日志

False
logger Optional[Callable]

自定义日志

None
**kwargs Any

其他参数

{}
Source code in wisecon\stock\valuation\market.py
def __init__(
        self,
        market: Optional[Literal["沪深两市", "沪市主板", "科创板", "深市主板", "创业板",]] = "沪深两市",
        start_date: Optional[str] = "2020-10-08",
        end_date: Optional[str] = None,
        size: Optional[int] = 50,
        verbose: Optional[bool] = False,
        logger: Optional[Callable] = None,
        **kwargs: Any
):
    """
    Notes:
        ```python
        data = MarketValuation(market=market, size=5).load()
        data.to_frame(chinese_column=True)
        ```

    Args:
        market: 市场名称
        start_date: 开始日期
        end_date: 结束日期
        size: 返回条数
        verbose: 是否显示日志
        logger: 自定义日志
        **kwargs: 其他参数
    """
    self.market = market
    self.start_date = start_date
    self.end_date = end_date
    self.size = size
    self.mapping = MarketValuationMapping()
    self.verbose = verbose
    self.logger = logger
    self.kwargs = kwargs
    self.request_set(description="市场整体估值")
    self.conditions = []
    self.validate_date_format(date=[start_date, end_date], )