java实现基金浮动_Java: 实现自回归分析/线性回归分析/基金各项指标计算等
版权声明:本文为博主原创文章,未经博主允许不得转载。
需Jama矩阵运算库.
java版源码:
包含自回归分析/线性回归分析/基金各项指标计算
import Jama.Matrix;
public class test {
public static void main(String[] args){
double rf = 1.0;
double[] rm = {1,2,3,4,3,2,5,6,8,8};
double[] rp = {2,2,3,4,4,3,5,6,9,8};
//线性回归
Linear l = linearRegression(rp,rm,rf);
System.out.println("线性回归");
System.out.println("alpha: "+l.alpha+"\nbeta: "+l.beta+"\nr2: "+l.rsquare);
//自回归
Autoregressive a = autoRegression(rp,2);
System.out.println("自回归");
//参数
for (double ci :a.ratios){
System.out.println("ratio: "+ci);
}
//拟合值
for (double ci :a.estimates){
System.out.println("estimates: "+ci);
}
//噪声
for (double ci :a.noises){
System.out.println("noises: "+ci);
}
//噪声均值
System.out.println("exp noises: "+exp(a.noises));
//噪声方差
System.out.println("dev noises: "+dev(a.noises));
}
//求均值
static double exp(double[] rp){
int len = rp.length;
if (len > 0){
double output = 0.0;
for (double p: rp){
output +=p;
}
output /= len;
return output;
}else {
return -9999;
}
}
//求标准差
static double dev(double[] rp){
int len = rp.length;
if (len > 0){
double output = 0.0;
double exp = exp(rp);
for (double p: rp){
output += Math.pow((p -exp),2);
}
output = Math.sqrt(output/(len -1));
return output;
}else {
return -9999;
}
}
//求下行风险标准差
static double downRisk(double[] rp, double rf){
int len = rp.length;
if (len > 0){
double output = 0.0;
int count = 0;
for (double p: rp){
if (p < rf){
count ++;
output += Math.pow((p - rf),2);
}
}
if (count > 1){
output = Math.sqrt(output/(count -1));
return output;
}else {
System.out.println("益率小于无风险利率的天数刚好为1");
return -9999;
}
}else {
return -9999;
}
}
//求索提诺比率
static double sortinoRatio(double exp, double rf, double dr){
if (dr != 0){
return (exp - rf)/dr;
}else {
System.out.println("下行风险标准差有误");
return -9999;
}
}
//求夏普比率
static double sharpRatio(double exp, double rf, double dp){
if (dp != 0){
return (exp - rf)/dp;
}else {
System.out.println("标准差为0");
return -9999;
}
}
//求线性回归 alpha beta R2
static Linear linearRegression(double[] rp,double[] rm,double rf){
Linear output = new Linear(-9999,-9999,-9999);
int len = rp.length;
int lenrm = rm.length;
if (len > 0){
if (len == lenrm){
double xexp = 0.0;
double yexp = 0.0;
double xsqura = 0.0;
double ysqura = 0.0;
double xy = 0.0;
for (int i = 0; i
double yi = rp[i] - rf;
double xi = rm[i] - rf;
xexp += xi;
yexp += yi;
xy += xi * yi;
xsqura += Math.pow(xi,2);
ysqura += Math.pow(yi,2);
}
xexp /= len;
yexp /= len;
double lxy = xy - len * xexp * yexp;
double lxx = xsqura - len * Math.pow(xexp,2);
double lyy = ysqura - len * Math.pow(yexp,2);
output.beta = lxy / lxx;
output.alpha = yexp - output.beta * xexp;
output.rsquare = Math.pow(lxy,2)/(lxx * lyy);
return output;
}else {
System.out.println("市场收益序列长度不匹配");
}
}else {
System.out.println("收益输入为空");
}
return output;
}
//求詹森系数
static double jensen(double eRp, double eRm, double rf, double beta){
return eRp - rf - beta *(eRm - rf);
}
//求特雷诺系数
static double treynorRatio(double exp, double rf, double beta){
if (beta != 0){
return (exp - rf)/beta;
}else {
System.out.println("系统风险beta为0");
return -9999;
}
}
//自回归分析 求系数 拟合值 噪声序列
static Autoregressive autoRegression(double[] rp, int p){
double[] op = {-9999};
Autoregressive output = new Autoregressive(op,op,op);
int len = rp.length;
if (len < 3 || p < 1 || len <= p +1){
System.out.println("输入有误");
}else {
int leny = len - p;
double[][] y = new double[leny][1];
for (int i = p; i
y[i-p][0] = rp[i];
}
double[][] a = new double[leny][p];
for (int i = 0; i < leny ; i ++){
for (int j = 0 ; j < p; j ++){
a[i][j] = rp[p -1 - j + i];
}
}
Matrix mY = new Matrix(y);
Matrix mA = new Matrix(a);
Matrix mR = (mA.transpose().times(mA)).inverse().times(mA.transpose()).times(mY);
output.ratios = mR.getColumnPackedCopy();
Matrix mYhat = mA.times(mR);
output.estimates = mYhat.getColumnPackedCopy();
Matrix mNs = mY.minus(mYhat);
output.noises = mNs.getColumnPackedCopy();
}
return output;
}
}
class Linear {
double alpha;
double beta;
double rsquare;
public Linear(double alpha, double beta, double rsquare){
this.alpha = alpha;
this.beta = beta;
this.rsquare = rsquare;
}
}
class Autoregressive {
double[] ratios;
double[] estimates;
double[] noises;
public Autoregressive(double[] ratios, double[] estimates, double[] noises){
this.ratios = ratios;
this.noises = noises;
this.estimates = estimates;
}
}
结果示例:
=线性回归=
alpha: 0.5611510791366894
beta: 0.9496402877697845
r2: 0.9568894502718442
=自回归=
参数
ratio: 0.5716829919857536
ratio: 0.7043633125556548
估计值
estimates: 2.5520926090828167
estimates: 3.12377560106857
estimates: 4.399821905609978
estimates: 5.104185218165633
estimates: 4.532502226179879
estimates: 4.971504897595732
estimates: 6.951914514692795
estimates: 9.37132680320571
噪声
noises: 0.44790739091718335
noises: 0.8762243989314298
noises: -0.3998219056099783
noises: -2.1041852181656333
noises: 0.4674977738201207
noises: 1.0284951024042677
noises: 2.0480854853072046
noises: -1.3713268032057098
噪声均值
exp noises: 0.12410952804986058
噪声方差
dev noises: 1.3514101374682685
java实现基金浮动_Java: 实现自回归分析/线性回归分析/基金各项指标计算等相关推荐
- java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)
首先纠正一个误区: 热部署不是我们在Eclipse里面修改了代码不用重启就可以持续调试. 详情可以参考上一篇博文: 热部署和"Hot Code Replace"的区别 htt ...
- java中的递归算法_java递归算法实例分析
递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候,一 ...
- java 垃圾回收题目_Java垃圾收集题目分析
[考题题干]关于垃圾收集的哪些叙述是对的? A.垃圾收集将检查并释放不再使用的内存. B.垃圾收集允许程序开发者明确指定并立即释放该内存. C.程序开发者必须自己创建一个线程进行内存释放的工作. D. ...
- java 枚举类型初始化_java 枚举类型分析
最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enumColorSelect { RED_BAGE= 0, GREEN_BAGE, BL ...
- java serializable 源码_Java源码分析之-Serializable接口
一.基本概念 Serializable接口: 1. 实现了Serializable接口的类,可以进行序列化和反序列化:没有实现这个接口的类的任何(state)状态/域或者属性值不能被序列化 2. Al ...
- java集合类程序代码_Java集合类源代码分析二:ArrayList(1)
从java集合结构能够看出来ArrayList是属于Collection中的List范畴的.从源代码中是这样表示的, public classArrayList extends AbstractLis ...
- java面向对象银行案例_Java程序设计-面向对象分析案例:银行储蓄系统.ppt
面向对象分析 1 基本过程 2 需求陈述 3 建立对象模型 4 建立动态模型 5 建立功能模型 6 定义服务 1 面向对象分析的基本过程 在面向对象建模的过程中,系统分析员必须认真向领域专家学习. 在 ...
- java模拟银行存取_JAVA模拟银行存钱,取钱操作以及计算利息操作
/* *程序的版权和版本声明部分: *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:尚振伟 ...
- java字符串转换小数_java怎么将带小数的字符串 转换可以计算的数值类型
展开全部 String str="4444.1122"; double num; java.text.DecimalFormat myformat=new java.text.De ...
最新文章
- leetcode--字符串转换为整数--python
- VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNTION(翻译)
- NVIDIA与服务器制造商合作推进AI云计算
- java 关键字volatile的作用
- Java Calendar hashCode()方法与示例
- 结合反向传播算法使用python实现神经网络的ReLU、Sigmoid、Affine、Softmax-with-Loss层
- linux中删除mysql用户_linux系统下mysql添加用户、删除用户、授权、修改密码等sql命令使用...
- ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门 1
- 深入PHP变量存储结构
- SLIC算法分割超像素原理及Python、C++
- 概率论----假设检验
- 直播盒子APP源码AlijuheCMS™开发手册之接口文档 for IOS
- Java:QQ登录页面的制作(实现成功登录的代码)——含源码
- Python函数知识点(详解)
- 解决大部分win10软件字体模糊的问题
- 鸿蒙分期靠谱吗,花呗借呗“陷阱”正式被确认,这两个禁忌不要触碰,别说没提醒你...
- 2022海南最新消防设施操作员模拟考试试题及答案
- diffusion medical image segmentation
- 简单的骨骼动画、骨骼动画理论
- 实验室第一次考核(C语言)
热门文章
- web渗透--vnc密码破解
- 调用聚合数据新闻头条API接口
- <<视觉问答>>2022:CLIP Models are Few-shot Learners: Empirical Studies on VQA and Visual Entailment
- Flex在线文档阅读器::pdf、doc、docx、xls、xlsx、ppt、pptx、htm、txt、rtf、epub、csv、xdoc等
- linux图形界面bind dns,在linux上使用BIND建立DNS服务器
- Java项目:图书管理系统(java+JSP+layui+bootstrap+Servlet+Mysql)
- Hazel引擎学习(十一)
- 复古决战快速施法穿墙秒怪分析流程及安全防护
- 中国31省 5G网速 排名!
- 非常感人的分手对白:伤感日志