资产定价模型 CAPM

January 6th, 2022 by JasonLe's Tech 36 views

资本资产定价模型(英语:Capital Asset Pricing Model,缩写:CAPM),为现代金融市场价格理论的支柱,广泛应用于投资决策和公司理财领域。

1、年化收益率(Annualized Returns):表示投资期限为一年的预期收益率

Pend=策略最终总资产,Pstart=策略初始总资产,n=回测交易日数量

2、基准年化收益率(Benchmark Returns):表示参考标准年化收益率。

3、贝塔(Beta):表示投资的系统性风险,反映了策略对大盘变化的敏感性。

例如,一个策略的Beta为1.3,则大盘涨1%的时候,策略可能涨1.3%,反之亦然;

如果一个策略的Beta为-1.3,说明大盘涨1%的时候,策略可能跌1.3%,反之亦然。

4、阿尔法(Alpha):非系统性风险,Alpha是投资者获得与市场波动无关的回报,一般用来度量投资者的投资技艺。例如,投资者获得了12%的回报,其基准获得了10%的回报,那么Alpha或者价值增值的部分就是2%。

5、收益波动率(Volatility):用来测量资产的风险性,波动越大代表策略风险越高。

 

5、夏普比率(Sharpe Ratio):表示每承受一单位总风险,会产生多少的超额报酬,可以同时对策略的收益与风险进行综合考虑。

6、信息比率(Information Ratio):衡量单位超额风险带来的超额收益。

信息比率越大,说明该策略单位跟踪误差所获得的超额收益越高,因此,信息比率较大的策略的表现要优于信息比率较小的策略。合理的投资目标应该是在承担适度风险下,尽可能追求高信息比率。

7、最大回撤(Max Drawdown):描述策略可能出现的最糟糕的情况。

8、年化换手率(Turnover Rate):描述策略变化的频率以及持有某只股票平均时间的长短。

ROI、NPV、IRR

December 21st, 2021 by JasonLe's Tech 74 views

投资回报率(ROI,Return On Investment),是指达产期正常年度利润或年均利润占投资总额的百分比。其计算公式为:投资回报率(ROI)=年利润或年均利润/投资总额×100%

投资回报率的优点是计算简单;缺点是没有考虑资金时间价值因素,不能正确反映建设期长短及投资方式不同和回收额的有无等条件对项目的影响,分子、分母计算口径的可比性较差,无法直接利用无风险投资利润率的投资项目才具有财务可行性,ROI往往具有时效性–回报通常是基于某些特定年份。

净现值(NPV)是一项投资所产生的未来现金流的折现值与项目投资成本之间的差值,净现值指标是反映项目投资获利能力的指标

决策标准:

  • 净现值≥0 方案可行;
  • 净现值<0 方案不可行;
  • 净现值均>0 净现值最大的方案为最优方案。

优点:

  • 考虑了资金时间价值,增强了投资经济性的评价;
  • 考虑了全过程的净现金流量,体现了流动性与收益性的统一;
  • 考虑了投资风险大则采用高折现率,风险小则采用低折现率。

缺点:

  • 净现值的计算较麻烦,难掌握;
  • 净现金流量的测量和折现率较难确定;
  • 不能从动态角度直接反映投资项目的实际收益水平;
  • 项目投资额不等时,无法准确判断方案的优劣。

IRR(Internal Rate of Return)是项目NPV为0的折现率,表示考虑资金的时间价值时,未来现金流流入与流出的现值相等时的折现率,这与NPV的计算逻辑相通,只是在NPV计算中,折现率是已知条件,而IRR计算中是计算目标。

JDK8版本过高引起MySQL连接失败:javax.net.ssl.SSLHandshakeException: No appropriate protocol

September 28th, 2021 by JasonLe's Tech 920 views

最近在做面向k8s的项目镜像,遇到很奇怪的问题,SpringCloud 项目连接mysql 抛 javax.net.ssl.SSLHandshakeException: No appropriate protocol,调查一段时间后,发现是Java security中的配置不对导致连接Mysql异常。

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
	at sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:171) ~[na:1.8.0_292]
	at sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:98) ~[na:1.8.0_292]
	at sun.security.ssl.TransportContext.kickstart(TransportContext.java:220) ~[na:1.8.0_292]
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:428) ~[na:1.8.0_292]
	at com.mysql.cj.protocol.ExportControlled.performTlsHandshake(ExportControlled.java:316) ~[mysql-connector-java-8.0.17.jar:8.0.17]
	at com.mysql.cj.protocol.StandardSocketFactory.performTlsHandshake(StandardSocketFactory.java:188) ~[mysql-connector-java-8.0.17.jar:8.0.17]
	at com.mysql.cj.protocol.a.NativeSocketConnection.performTlsHandshake(NativeSocketConnection.java:99) ~[mysql-connector-java-8.0.17.jar:8.0.17]
	at com.mysql.cj.protocol.a.NativeProtocol.negotiateSSLConnection(NativeProtocol.java:331) ~[mysql-connector-java-8.0.17.jar:8.0.17]
	... 68 common frames omitted

看到SSLHandshakeException,心里打起了问号?这个错误比较反常,最终网上找了一番,问题定位了:JDK8高版本导致的,因为之前用的是oracle:1.8,然后换成了openjdk:8,然后发现项目无法启动了。

方法一:

此处连接的MySQL,导致的报错,修改jdbcUrl,在其后面加useSSL=false后运行正常

方法二:

删除SSLv3, TLSv1, TLSv1.1并保存java.security文件,重启项目即可解决问题,删除后此处为:

# Example:
#   jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048
jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

方法三:

降低JDK版本,这个相当也容易操作,比如可以从1.8.0_292降到1.8.0_281,甚至是1.8.0_275版本,但个人不建议,因为Oracle对JDK 8的支持一直会到2030年:即使很长一段时间用JDK 8,但JDK 8本身也是有小版本迭代的,比如你明年换了电脑,安装JDK,基本是1.8.0_292之后的版本,那这个问题会一直存在。

方法四:

方法一 能解决由SSL调用权限导致的所有问题,但破坏了安全性
方法二 针对MySQL的问题,可以快速解决
方法三 不推荐

因此,碰到类似问题,基本的思路是兼容JDK 8高版本甚至JDK高版本,比如代码层面的:

private Socket overrideTlsProtocol(final Socket socket) {
    if (!(socket instanceof SSLSocket)) {
        throw new RuntimeException("Error, an instance of SSLSocket is expected");
    }
    ((SSLSocket) socket).setEnabledProtocols(new String[]{"SSLv3"});
    return socket;
}

修改为:

private Socket overrideTlsProtocol(final Socket socket) {
    if (!(socket instanceof SSLSocket)) {
        throw new RuntimeException("Error, an instance of SSLSocket is expected");
    }
    ((SSLSocket) socket).setEnabledProtocols(new String[]{"SSLv3", "TLSv1","TLSv1.1"});
    return socket;
}

K8s核心概念

August 29th, 2021 by JasonLe's Tech 199 views

Pod

  • Pod是K8s中最小的单元
  • 一组容器的集合
  • 共享网络【一个Pod中的所有容器共享同一网络】
  • 生命周期是短暂的(服务器重启后,就找不到了)

Volume

  • 声明在Pod容器中可访问的文件目录
  • 可以被挂载到Pod中一个或多个容器指定路径下
  • 支持多种后端存储抽象【本地存储、分布式存储、云存储】

Controller

  • 确保预期的pod副本数量【ReplicaSet】
  • 无状态应用部署【Deployment】
    • 无状态就是指,不需要依赖于网络或者ip
  • 有状态应用部署【StatefulSet】
    • 有状态需要特定的条件
  • 确保所有的node运行同一个pod 【DaemonSet】
  • 一次性任务和定时任务【Job和CronJob】

Deployment

  • 定义一组Pod副本数目,版本等
  • 通过控制器【Controller】维持Pod数目【自动回复失败的Pod】
  • 通过控制器以指定的策略控制版本【滚动升级、回滚等】

Service

  • 定义一组pod的访问规则
  • Pod的负载均衡,提供一个或多个Pod的稳定访问地址
  • 支持多种方式【ClusterIP、NodePort、LoadBalancer】

Label

label:标签,用于对象资源查询,筛选

Namespace

命名空间,逻辑隔离

  • 一个集群内部的逻辑隔离机制【鉴权、资源】
  • 每个资源都属于一个namespace
  • 同一个namespace所有资源不能重复
  • 不同namespace可以资源名重复

API

我们通过Kubernetes的API来操作整个集群

同时我们可以通过 kubectl 、ui、curl 最终发送 http + json/yaml 方式的请求给API Server,然后控制整个K8S集群,K8S中所有的资源对象都可以采用 yaml 或 json 格式的文件定义或描述

如下:使用yaml部署一个nginx的pod

完整流程

  • 通过Kubectl提交一个创建RC(Replication Controller)的请求,该请求通过APlserver写入etcd
  • 此时Controller Manager通过API Server的监听资源变化的接口监听到此RC事件
  • 分析之后,发现当前集群中还没有它所对应的Pod实例
  • 于是根据RC里的Pod模板定义一个生成Pod对象,通过APIServer写入etcd
  • 此事件被Scheduler发现,它立即执行执行一个复杂的调度流程,为这个新的Pod选定一个落户的Node,然后通过API Server讲这一结果写入etcd中
  • 目标Node上运行的Kubelet进程通过APiserver监测到这个”新生的Pod.并按照它的定义,启动该Pod并任劳任怨地负责它的下半生,直到Pod的生命结束
  • 随后,我们通过Kubectl提交一个新的映射到该Pod的Service的创建请求
  • ControllerManager通过Label标签查询到关联的Pod实例,然后生成Service的Endpoints信息,并通过APIServer写入到etod中,
  • 接下来,所有Node上运行的Proxy进程通过APIServer查询并监听Service对象与其对应的Endponts信息,建立一个软件方式的负载均衡器来实现Service访问到后端Pod的流量转发功能

 

 

PE、PB、PS、ROIC、WACC、PCF含义

April 10th, 2021 by JasonLe's Tech 554 views

PE:市盈率 = 股价 / 每股盈利

PB:市净率=股价 / 每股净资产

PS:市销率=股价 / 每股收入=总市值 / 销售收入

ROIC(投资资本收益率)ROIC衡量的是企业全部投资资本的运用效率,而不考虑企业所使用资金来自于股东或是债权人。ROIC以投资资本代替ROE中的所有者权益作为分母,以息前税后利润(NOPLAT)代替净利润做分子。

WACC(加权平均资本成本)

WACC代表公司整体平均资金成本,可用来衡量一个项目是否值得投资;项目的回报必须不低于WACC。计算WACC时,先算出构成公司资本结构的各个项目如普通股、优先股、公司债及其他长期负债各自的资金成本或要求回报率,然后将这些回报率按各项目在资本结构中的权重加权,即可算出加权平均资本成本。

计算公式=(债务/总资本)*债务成本*(1-企业所得税税率)+(股权/总资本)*股权成本

PE:Price/Earnings 市盈率 也有叫做PER的,Price/Earnings Ratio
本益比,价格收益比,市盈率
   市盈率反映市场对企业盈利的看法。市盈率越高暗示市场越看好企业盈利的前境。对於投资者来说,市盈率过低的股票会较为吸引。不过,在讯息发达的金融市场,市盈率过低的股票是十分少见。单凭市盈率来拣股是不可能的。投资者可以利用每股盈利增长率(Rate of EPS Growth),与市盈率作比较。对於一间增长企业,如果其股价是合理的话,每股盈利增长率将会与市盈率相约。公式:市盈率 = 股价 / 每股盈利.如果企业每股盈利为5元,股价为40元,市盈率是8倍。

PB:Price/Book value :平均市净率
股价 / 账面价值
其中,账面价值的含义是:总资产 ? 无形资产 ? 负债 ? 优先股权益;可以看出,所谓的账面价值,是公司解散清算的价值。因为如果公司清算,那么债要先还,无形资产则将不复存在,而优先股的优先权之一就是清算的时候先分钱。但是本股市没有优先股,如果公司盈利,则基本上没人去清算。这样,用每股净资产来代替账面价值,则PB就和大家理解的市净率了。  

PS市销率=总市值/销售收入,P是股价,S是每股的销售收入,P/S或者用总市值除以销售额,这样算出的值叫PS。
PS即市销率估值法的优点是,销售收入最稳定,波动性小;并且营业收入不受公司折旧、存货、非经常性收支的影响,不像利润那样易操控;收入不会出现负值,不会出现没有意义的情况,即使净利润为负也可用。所以,市销率估值法可以和市盈率估值法形成良好的补充。市销率估值法的缺点是,它无法反映公司的成本控制能力,即使成本上升、利润下降,不影响销售收入,市销率依然不变。另外,市销率(PS)会随着公司销售收入规模扩大而下降;营业收入规模较大的公司,PS较低。用PS看企业潜在的价值,看它未来的盈利能不能大幅增长。PS低了就存在上升的可能。PS最低的股票是长线大牛股。

PCF 市销率=股价/每股现金流=市值/经营现金流

市现率,就是分母(其他指标中的利润或者营收)变成经营现金流。相比其他指标,现金流本身就足以精确的反映企业的财务健康状况,因为它简单地说明了流进、流出企业的现金是多少。

市现率的价值还在于现金流往往比收益更稳定。例如,它不会受到企业重组或者资产核销等非现金支出的影响。现金流的缺陷是没有考虑资产折旧,因此。这就导致资产密集型企业的现金流大多高于收益