浅谈估值模型:从估值-收益分布看待市场投资价值

news2025/1/17 6:10:38

摘要及声明

1:本文从估值的角度,通过深入研究指数估值变化的特征,总结出市场几轮牛熊背后的规律,从而客观理性地判断目前市场的投资价值。技术方面,本文通过ipywidgets交互式控件实现数据的可视化和交互式展示。

2:本文主要为理念的讲解,模型也是笔者自建,文中假设与观点是基于笔者对模型及数据的一孔之见,若有不同见解欢迎随时留言交流;

3:笔者希望搭建出一套交易体系,原则是只做干货的分享。后续将更新更多内容,但工作学习之余的闲暇时间有限,更新速度慢还请谅解;

4:本文主要数据通过Wind金融终端获取;

5:模型实现基于python3.8;


目录

1. 市场估值与预期收益之间的关系

2. 市场的估值中枢变迁

3. 估值高低对未来预期收益的影响

4. 持有时间对未来预期收益的影响

5. 位置和时间哪个更重要?

6. 总结

7. 代码实现

8. 往期精选


1. 市场估值与预期收益之间的关系

        为了更直观的体现出估值与未来预期收益之间的关系,笔者通过散点图的方式进行刻画。如图一所示,横轴是指数的PE TTM倍数,纵轴是估值对应未来1年的预期收益。从散点分布来看,收益率大致呈现左高右低的趋势,但图中很多散点分布并不具备统一的规律,例如在20到20倍PE估值之间,既有高达近250%的未来预期收益,也有很多点分布在负收益区域。因此统计上很难直接说明未来预期收益与估值之间存在显著相关关系。

图一:上证指数PE TTM估值对应未来1年收益率(数据来源:Wind,笔者整理)

2. 市场的估值中枢变迁

        笔者对上证指数估值时间序列数据进行分析,希望找出散点分布不规则背后的原因。上证指数近30年几经沉浮,其PE指标的中枢也随着成分股的变化不断改变。从估值的角度看,目前PE倍数仅为13倍不到,处于历史较低水平。如今的指数较2005年7月19日的低点已经上涨了200.36%,但相应的估值水平却并没有任何提升,反而从16倍PE下滑至今的13倍PE。因此,直接将PE指标与过去历史中枢相比较得出的分位数很难直接说明当前估值水平高低,并对未来趋势做出前瞻性的判断。

图二:上证指数点位及PE TTM(数据来源:Wind,笔者整理)

        笔者认为估值中枢出现巨大历史性差异的主要原因是指数成分的变化。上证指数共经历过三次较大的行业结构变迁,第一次是从1995年到2005年,上证指数成分占比较大的行业主要集中在工业和能源行业;第二次是从2006年到2019年,金融行业异军突起,在这13年中每年都以40%左右的权重成为占比最高的行业。而金融行业中大部分公司估值常年处于低估值状态,这很大程度上直接拉低了指数的估值中枢;第三次是从2020年至今,金融行业的占比不断下降,而TMT、能源和材料的占比则不断上升。若考虑全A指数,万得全A中,金融板块占比仅12%,而在2015年,这一数字占比则达到24%。随着注册制的不断深化,更多科技企业IPO,笔者预计未来金融行业的权重占比还会进一步下降。

图三:上证指数金融行业权重占比变化(数据来源:Wind,笔者整理)

        但笔者认为这并不会直接引发上证指数估值中枢非常显著的提升。尽管注册制“万股齐发”的大背景下,未来会有更多科技类的高估值公司上市,但对于市场估值中枢的影响有限。一是虽然我国IPO发行目前存在较高溢价现象,上市后的均值回归将指数拉低;其次,尽管上市公司数量井喷,但退市公司数量依然非常低,市场将常年处于僧多粥少的局面。因此,值得资金持有的优质好公司依旧是稀缺资产,除了这少部分优质公司,更多的股票将面临长期无人问津的低估值状态,这很大程度上限制了指数整体的估值水平主动上升;最后,虽然金融行业权重占比不断下降,但金融板块巨大的体量依然是指数的压舱石,类似05年金融板块在上证指数中仅占比10%的场面在未来几年的角度上是很难再看到的。总的来看,笔者认为未来,至少近几年上证指数很难出现上世纪那样30-40倍PE左右的估值中枢。

图四:上证指数金融行业权重占比变化(数据来源:Wind,笔者整理)

3. 估值高低对未来预期收益的影响

        在认识到市场估值中枢的变迁后再看估值-收益分布图的散点就变得清晰一些,将几轮牛熊的顶底用不同颜色的散点标注后可得图五。从整个散点的分布来看,估值顶未来一年均处于负收益的亏损状态,例如08年和15年;而估值底的未来一年收益都显著大于0,例如05年、08年和14年。一个明显的例外是15年的估值顶和05年的估值底都位于20倍PE左右,这是由于05年的估值中枢已经显著高于15年导致的。尽管估值中枢不断发生偏离,但从图中的散点分布来看不难发现一个重要结论:在一轮牛熊中(估值中枢一致),估值水平与未来收益呈现明显的反比关系,估值越高,未来预期收益越低,估值越低,未来预期收益越高。因此,估值高低是决定未来预期收益的一个重要因素。市场高位时期买入的投资者往往都会遭受较大损失。

图五:上证指数PE TTM估值对应未来1年收益率(数据来源:Wind,笔者整理)

        除了标注出市场顶底的点,图中还有不少离群值。例如在25-30倍PE中,有一部分散点依旧代表了200%左右的预期收益;而在40-60倍PE的区间内,还有不少点并不属于2007年10月的估值顶,但它们同样代表了很高的亏损。因此,还需要从其它角度对离群值进行研究。

4. 持有时间对未来预期收益的影响

        导致这些离群值最主要的原因是未来持有时间的长短,由于各个估值散点的时间分布不同,部分散点对应未来的最高收益率可能并非是出现在一年的维度。如果改变未来收益统计的时间长短,则该散点图又会产生新的变化。如下图展示了估值对应未来一个月的收益率分布情况,当看未来一个月时,估值对应的收益率分布十分模糊,同样的估值水平对应的未来预期收益有正有负,统计学上也难以找到相关关系描述。

 图六:上证指数PE TTM估值对应未来1个月收益率(数据来源:Wind,笔者整理)

        当时间维度拉长到两年时间,之前难以解释的离群值已经消失,估值水平与未来收益呈现的反比关系更加明显。如图八所示:

 图七:上证指数PE TTM估值对应未来2年收益率(数据来源:Wind,笔者整理)

        当时间继续拉长到三年和四年的维度,离群值再一次出现。并且,随着时间的继续拉长,离群的散点逐渐变多且开始朝着高PE倍数方向分散开,但此时估值水平与未来收益呈现的关系开始变得模糊。例如在四年的维度上,30-50倍高估区间不仅分布着亏损超过50%的点,也还有未来收益率高达300%的点。这种现象不难解释:当时间拉得过长,区间内可能包含了不止一轮牛熊,因此预期收益既可以很高,也可以大幅亏损,此时再将估值的高低作为参考意义就不大了。总的来看可以得出结论,当时间维度过长时,估值对未来预期收益的指导意义就会变得很弱。从历史经验来看,短期10个月以内的估值-收益的关系都较为模糊;长期超过33个月,估值-收益的关系也会较为模糊;而10个月-33个月是估值-收益关系较为明朗的区间,此时将估值水平作为交易的参考指标有较强的指导意义。

图八:上证指数PE TTM估值对应未来2年收益率(数据来源:Wind,笔者整理)

5. 位置和时间哪个更重要?

        从上文已经知道了,位置够低再配合合理的持有时间可以创造想当可观的收益,可是10-33个月的范围想当大。而通过估值-收益的散点变化图可以看出,持有两年时间的未来预期收益是最大的,那么是不是说可以将两年时间作为一个精确的时间标尺作为参考?

        牛市方面,通过统计上上证指数月线级别5次较为重要的牛市阶段,笔者发现上证指数牛市平均持续时间为30个月,牛市期间平均涨幅为192.67%。但历史上出现的几次牛市数据均呈现较大离散度,例如持续时间最长的是1996年至2001年,长达65个月;而持续最短的是2014年至2015年,仅13个月。涨幅方面,最大达到461.29%,而最低仅29.5%。可以说,上证指数的牛市持续时间及最大涨幅并没有什么特定的规律,以固定的时间作为参考意义不大。

表一:牛市涨幅及其时间跨度统计表(数据来源:Wind,笔者整理)

牛市区间

持续时间/月

最大涨幅

1996.02-2001.06

65

312.62%

2005.06-2007.10

29

461.29%

2014.05-2015.05

13

127.58%

2016.03-2018.01

23

29.50%

2020.04-2021.12

21

32.35%

平均值

30.2

192.67%

        熊市方面,通过统计上上证指数月线级别6次较为重要的熊市,笔者发现上证指数熊市平均持续时间为24.5个月,短于牛市的30个月。熊市期间平均跌幅为41.21%,从几轮熊市特点来看,指数几轮熊市具有时间短,且往往跌幅较大的特征。与牛市类似,历史上出现的几次熊市数据均呈现较大离散度。持续时间最长的是2001年至2005年,长达47个月;而持续最短的是2015年至2016年,仅9个月。跌幅方面,最大达到70.97%,而最低仅23.4%。可以说,上证指数的熊市持续时间及最大涨幅也并没有什么特定的规律,以固定的时间作为参考意义不大。

表二:熊市跌幅及其时间跨度统计表(数据来源:Wind,笔者整理)

熊市区间

持续月数

最大跌幅

2001.07-2005.06

47

44.77%

2007.11-2008.10

12

70.97%

2009.12-2013.06

43

38.05%

2015.06-2016.02

9

41.71%

2018.02-2018.12

11

28.35%

2022.01-2024.01

25

23.40%

平均值

24.5

41.21%

6. 总结

        总的来看,A股牛熊周期并没有什么特定的规律,以固定的时间投资作为参考意义不大。这就导致了一个违反大多数投资者直觉的结果:“熊市已经进行了很长时间”跟“熊市是否快要结束了”的关系很弱。结合之前估值高低的结论,笔者认为:估值的高低比时间的长短更重要,与其猜测牛市什么时候会来,熊市什么时候结束,最后陷入自我否定,不如把握住估值的高低位置。

        自上证指数2021年12月14日见顶以来,指数以及调整2年有余。这期间叠加新冠封控、地区冲突和经济下行影响,指数经历了较大的波动。截至2024年2月5日,上证指数下跌26.59%,PE11.68倍,位于历史近十年分位数10.85%。从历史来看,该位置是较低且性价比较高的。但自2月5日指数见底以来,上证指数已最高反弹了13.55%,PE为12.98倍,估值分位目前位于34.28%。从绝对位置来看即使是经过一轮反弹,指数的估值也并不算高。但相对于2月5日的低点来说性价比会稍低一些,后续如果指数层面再出现低位将是不错的入场时机。不过也需要注意的是,通过估值-收益分布图来看市场位置具有历史不代表未来问题,是不是要赚这种历史重现,均值复归的钱是需要投资者进一步考虑的。

7. 代码实现

        本期的技术内容比较简单,就是一个简单的可视化,但由于涉及到散点图从1个月到4年时间逐月的变化,如果简单通过Matplotlib进行逐张散点图的生成,就会有48张图片,想当繁琐。笔者选择ipywidgets模块的交互式控件,通过一个滑块即可控制散点图进行动态展示。

        本文的数据已经从Wind上下载好,笔者使用的是周频数据。首先导入需要的模块和数据,简单对数据进行处理后得到1171 条数据,包含上证指数PE TTM和收盘价等数据:

import pandas as pd
import matplotlib.pyplot as plt
import ipywidgets as widgets
from ipywidgets import interact

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示matplotlib的中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

## 读取数据
data = pd.read_excel("000001.SH.xlsx")
data["交易日期"] = data["交易日期"].apply(lambda x: x[:4]+x[5:7]+x[8:10])
data["交易日期"] = data["交易日期"].astype("int")

print(data)
交易日期	市盈率TTM	指数点位	分位点	危险值	中位数	机会值	标准差(+1)	平均值	标准差(-1)	z 分数
0	20010209	61.49	1956.97	98.80	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
1	20010216	60.35	1941.96	98.21	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
2	20010223	60.06	1936.35	98.12	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
3	20010302	60.61	1985.11	98.46	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
4	20010309	60.70	2011.66	98.55	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
...	...	...	...	...	...	...	...	...	...	...	...
1166	20240202	11.75	2730.15	12.65	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
1167	20240208	12.26	2865.90	17.35	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
1168	20240223	12.86	3004.88	24.27	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
1169	20240301	12.94	3027.02	25.64	31.5	15.87	12.53	34.6	21.61	8.63	-0.66
1170	20240305	13.01	3047.79	26.24	31.5	15.87	12.53	34.6	21.61	8.63	-0.66

1171 rows × 11 columns

        接下来通过ipywidgets的装饰器interact()进行动态可视化,但需要加一个@ 符号用于定义装饰器,该装饰器必须搭配函数体使用,函数体相当于希望实现的效果,例如生成一个散点图,而装饰器interact()可以将值不断的放进函数变量中进行显示。装饰器的功能十分强大,不仅仅可以展示图片,文字也可。

        下面举一个非常简单的例子,通过手动移动滑块就可以动态将0到100的数字打印出来。

@interact(x=(0, 100))  
def my_function(x):  
    print(x)

        下面通过date_select参数动态的计算出指数在未来某个区间的涨跌幅,然后生成图片。

@interact(date_select = widgets.IntSlider(min=4, max=200, step=4,value = 0, layout={"width":"80%"}))
def update_plt(date_select):
    plt.figure(figsize=(10,6))
    df = data.copy()
    df["year_pct"] = (df["指数点位"].shift(-date_select) - df["指数点位"])/df["指数点位"]
    df.dropna(inplace=True)
    plt.scatter(df["市盈率TTM"].values, df["year_pct"].values, s=20, label="估值-收益分布")
    plt.vlines(ymin=min(df["year_pct"]), ymax=max(df["year_pct"]), x = data["市盈率TTM"].values[-1], color="r", linestyle="--", label="当前估值水平")
    plt.hlines(xmin=min(data["市盈率TTM"]), xmax=max(data["市盈率TTM"]), y = 0, color="black", linestyle="--", label="0收益率", alpha = 0.4)
    plt.xticks(size=15)
    plt.yticks(size=15)
    plt.xlabel("PE TTM", fontsize = 15)
    plt.ylabel("收益率(%)", fontsize = 15)
    plt.legend(fontsize = 15)
    plt.title(f"上证指数PE TTM估值对应未来{int(date_select/4)}月收益率", fontsize=20)# 周度数据,所以除以4将单位改成月频
    plt.show()

        当然,通过将牛市熊市的散点用不同颜色标注出来,即可得到笔者文中的图片,例如:

    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20050301) & (df["交易日期"]<20060603)].values, 
                df["year_pct"][(df["交易日期"]>20050301) & (df["交易日期"]<20060603)].values, 
                color = "red",s=20, label="2005年7月估值底")
    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20071001) & (df["交易日期"]<20080201)].values, 
                df["year_pct"][(df["交易日期"]>20071001) & (df["交易日期"]<20080201)].values, 
                color = "orange",s=20, label="2007年10月估值顶")
    
    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20080901) & (df["交易日期"]<20090101)].values, 
                df["year_pct"][(df["交易日期"]>20080901) & (df["交易日期"]<20090101)].values, 
                color = "darkgreen",s=20, label="2008年9月估值底")
    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20090701) & (df["交易日期"]<20100401)].values, 
                df["year_pct"][(df["交易日期"]>20090701) & (df["交易日期"]<20100401)].values, 
                color = "lawngreen",s=20, label="2009年7月估值顶")
    
    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20121101) & (df["交易日期"]<20140801)].values, 
                df["year_pct"][(df["交易日期"]>20121101) & (df["交易日期"]<20140801)].values, 
                color = "darkblue",s=20, label="2012-2014年估值底")
    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20150401) & (df["交易日期"]<20150601)].values, 
                df["year_pct"][(df["交易日期"]>20150401) & (df["交易日期"]<20150601)].values, 
                color = "blue",s=20, label="2015年6月估值顶", alpha=0.5)
    
    plt.scatter(df["市盈率TTM"][(df["交易日期"]>20181001) & (df["交易日期"]<20190201)].values, 
                df["year_pct"][(df["交易日期"]>20181001) & (df["交易日期"]<20190201)].values, 
                color = "purple",s=20, label="2018年12月估值底")

        最后展示一下滑动起来的效果:

 图九:估值-收益分布的动态可视化展示

8. 往期精选

 往期精选
系列文章传送门实现方式
权益投资估值幻觉Python
PB指标与剩余收益估值Python
Fama-French及PSMPython
GK模型看投资的本质Python
增速g的测算Python
PE指标平滑Python
PE BandPython
分类树算法R
蒙特卡洛模拟Python
全连接神经网络模型Python

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1518987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git 学习笔记 三个区域、文件状态、分支、常用命令

Git 学习 GitGit概念VS Code中使用仓库&#xff08;repository&#xff09;示例 Git 使用时的三个区域示例 Git 文件状态示例 Git 暂存区示例 Git 回退版本删除文件忽略文件示例 分支分支的使用分支的合并与删除分支的合并冲突 Git常用命令Git远程仓库 (HTTP)步骤远程仓库 克隆…

游戏开发需不需要考研?

近年来&#xff0c;中国游戏行业增速放缓&#xff0c;用户基数趋于饱和&#xff0c;行业监管日趋严格&#xff0c;国外竞争激烈&#xff0c;使游戏公司面临挑战。为适应形势&#xff0c;游戏企业正在调整策略&#xff0c;采取主动学习和实战练习的方式&#xff0c;提升游戏质量…

虚拟环境的激活

(此博客仅用于我记录虚拟环境的激活方法) 虚拟环境的激活命令: venv/Scripts/activate 在F:\git repo\Database-Course-Design 这个文件夹中启动命令行 这个文件夹中含有虚拟环境venv 输入命令venv/Scripts/activate&#xff0c;就得到下面的结果: 此时就激活了虚拟环境&…

AVCE - AV Evasion Craft Online 更新 8 种加载方式 - 过 WD 等

免责声明&#xff1a;本工具仅供安全研究和教学目的使用&#xff0c;用户须自行承担因使用该工具而引起的一切法律及相关责任。作者概不对任何法律责任承担责任&#xff0c;且保留随时中止、修改或终止本工具的权利。使用者应当遵循当地法律法规&#xff0c;并理解并同意本声明…

3. ElasticSearch搜索技术深入与聚合查询实战

1. ES分词器详解 1.1 基本概念 分词器官方称之为文本分析器&#xff0c;顾名思义&#xff0c;是对文本进行分析处理的一种手段&#xff0c;基本处理逻辑为按照预先制定的分词规则&#xff0c;把原始文档分割成若干更小粒度的词项&#xff0c;粒度大小取决于分词器规则。 1.2 …

[SWPUCTF 2021 新生赛]crypto6

题目&#xff1a; 从代码可以看出​​​​​​该题目对flag依次进行了base64,base32,base16加密。要得到正确的flag即进行相反的操作&#xff0c;即依次进行base16,32,64的解码即可

dp求公共子序列

#include<iostream> using namespace std; int main(){string a1,a2;while(cin>>a1>>a2){int data[201][201]{};// 每次的最长记录for(int i1;i<a1.size();i){for(int j1;j<a2.size();j){if(a1[i-1] a2[j-1]){// 相等在2个字母未加进之前长度1data[i]…

MOS管、IGBT的区别

MOS管&#xff0c;即Metal-Oxide-Semiconductor Field-Effect Transistor&#xff0c;是我们常见的一种半导体器件&#xff0c;也被广泛称为MOSFET。 这种器件的工作原理独特且高效&#xff0c;主要是通过控制栅极电压来调控电流在两个源极和漏极之间的流动&#xff0c;这也是其…

使用LLMs大模型进行股票投资预测——能实现盈利还能自我反思并给出合理解释

前言 股市的变化难以预测&#xff0c;任何微小的变化都可能对股票走势产生影响&#xff0c;这种不确定性让投资者们感到困惑。因此&#xff0c;研究者们开始关注目前备受关注的大型模型技术&#xff0c;他们试图利用这些技术来高效地处理和分析大量的股市数据&#xff0c;从中…

c++基础语法—————默认成员函数

文章目录 一、构造函数&#xff08;初始化&#xff09;1.构造函数的名称与类名相同&#xff0c;没有返回类型&#xff0c;可以有参数。2.对象实例化时&#xff0c;编译器自动调用构造函数进行初始化3.若类中没有显示定义一个用户的构造函数&#xff0c;编译器则会自动生成一个默…

[LVGL]:MACOS下使用LVGL模拟器

如何在MACOS下使用lvgl模拟器 1.安装必要环境 brew install sdl2查看sdl2安装位置&#xff1a; (base) ➜ ~ brew list sdl2 /opt/homebrew/Cellar/sdl2/2.30.1/bin/sdl2-config /opt/homebrew/Cellar/sdl2/2.30.1/include/SDL2/ (78 files) /opt/homebrew/Cellar/sdl2/2.3…

计算机系统·浮点数

浮点数 理解含有小数值的二进制数 定点表示方法 十进制&#xff1a;以小数点为分界线&#xff0c;小数点左边数字的权重是10的正幂&#xff0c;小数点右边数字的权重是10的负幂。如图所示 二进制&#xff1a;小数点左边数字的权重是2的正幂&#xff0c;小数点右边数字的权重…

免费阅读篇 | 芒果YOLOv8改进111:注意力机制CBAM:轻量级卷积块注意力模块,无缝集成到任何CNN架构中,开销可以忽略不计

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;YOLOv8CBAM改进内容&#x1f680;&#x1f680;&am…

Exam in MAC [容斥]

题意 思路 正难则反 反过来需要考虑的是&#xff1a; (1) 所有满条件一的(x,y)有多少对&#xff1a; x 0 时&#xff0c;有c1对 x 1 时&#xff0c;有c对 ...... x c 时&#xff0c;有1对 以此类推 一共有 (c2)(c1)/2 对 (2) 符合 x y ∈ S的有多少对&#xff1a…

深度学习每周学习总结P1(pytorch手写数字识别)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 目录 0. 总结1. 数据导入部分2. 模型构建部分3. 训练前的准备4. 定义训练函数5. 定义测试函数6. 训练过程 0. 总结 总结: 数据导入部分&a…

Jmeter进行http接口测试

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 本文主要针对http接口进行测试&#xff0c;使用 jmeter工具实现…

Jenkins自定义镜像推送到Harbor仓库

之前Jenkins需要推送jar包到远程到目标服务器再进行构建 现在Jenkins容器内部可以直接使用Docker了 直接在Jenkins构建好推送到Harbor仓库上&#xff0c;然后不管是哪台目标服务器&#xff0c;只需要去Harbor仓库拉取镜像即可。 修改Jenkins任务 将代码检测下面的远程服务器步…

UI 学习 三 可访问性 UX

设计、交流和实现不同领域内容的易访问性决策&#xff0c;涉及到一系列考虑因素&#xff0c;以达到更容易访问的产品体验。 Material使用的框架借鉴了WCAG标准和行业最佳实践&#xff0c;以帮助任何人预测、计划、记录和实现可访问体验。 下面描述的三个阶段有助于将可视化UI…

SIMATIC C7-635西门子触摸屏维修6ES7635-2EB02-0AE3

西门子工控机触摸屏维修C7-626/P西门子控制面板维修DP Panel 6ES7626-1DG03-0AE3&#xff1b;6ES7626-2DG04-0AE3 SIMATIC HMI移动面板维修&#xff08;西门子面板&#xff09;可轻松进行电源管理与操作&#xff0c;成为移动应用的可能之选。该面板支持线缆或 Wi-Fi 通信&…

Weblogic 常规渗透测试环境

测试环境 本环境模拟了一个真实的weblogic环境&#xff0c;其后台存在一个弱口令&#xff0c;并且前台存在任意文件读取漏洞。分别通过这两种漏洞&#xff0c;模拟对weblogic场景的渗透。 Weblogic版本&#xff1a;10.3.6(11g) Java版本&#xff1a;1.6 弱口令 环境启动后…