版权声明:本文为博主原创文章,未经博主允许不得转载。

需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: 实现自回归分析/线性回归分析/基金各项指标计算等相关推荐

  1. java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)

    首先纠正一个误区: 热部署不是我们在Eclipse里面修改了代码不用重启就可以持续调试. 详情可以参考上一篇博文: 热部署和"Hot Code Replace"的区别    htt ...

  2. java中的递归算法_java递归算法实例分析

    递归算法设计的基本思想是: 对于一个复杂的问题,把原问题分解为若干个相对简单类同的子问题,继续下去直到子问题简单到能够直接求解,也就是说到了递推的出口,这样原问题就有递推得解. 在做递归算法的时候,一 ...

  3. java 垃圾回收题目_Java垃圾收集题目分析

    [考题题干]关于垃圾收集的哪些叙述是对的? A.垃圾收集将检查并释放不再使用的内存. B.垃圾收集允许程序开发者明确指定并立即释放该内存. C.程序开发者必须自己创建一个线程进行内存释放的工作. D. ...

  4. java 枚举类型初始化_java 枚举类型分析

    最近做android开发,需要用到枚举值,这样可以连续赋值,我按之前c++那样书写,如下所示: public enumColorSelect { RED_BAGE= 0, GREEN_BAGE, BL ...

  5. java serializable 源码_Java源码分析之-Serializable接口

    一.基本概念 Serializable接口: 1. 实现了Serializable接口的类,可以进行序列化和反序列化:没有实现这个接口的类的任何(state)状态/域或者属性值不能被序列化 2. Al ...

  6. java集合类程序代码_Java集合类源代码分析二:ArrayList(1)

    从java集合结构能够看出来ArrayList是属于Collection中的List范畴的.从源代码中是这样表示的, public classArrayList extends AbstractLis ...

  7. java面向对象银行案例_Java程序设计-面向对象分析案例:银行储蓄系统.ppt

    面向对象分析 1 基本过程 2 需求陈述 3 建立对象模型 4 建立动态模型 5 建立功能模型 6 定义服务 1 面向对象分析的基本过程 在面向对象建模的过程中,系统分析员必须认真向领域专家学习. 在 ...

  8. java模拟银行存取_JAVA模拟银行存钱,取钱操作以及计算利息操作

    /* *程序的版权和版本声明部分: *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights reserved. *文件名称: *作者:尚振伟 ...

  9. java字符串转换小数_java怎么将带小数的字符串 转换可以计算的数值类型

    展开全部 String str="4444.1122"; double num; java.text.DecimalFormat myformat=new java.text.De ...

最新文章

  1. leetcode--字符串转换为整数--python
  2. VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNTION(翻译)
  3. NVIDIA与服务器制造商合作推进AI云计算
  4. java 关键字volatile的作用
  5. Java Calendar hashCode()方法与示例
  6. 结合反向传播算法使用python实现神经网络的ReLU、Sigmoid、Affine、Softmax-with-Loss层
  7. linux中删除mysql用户_linux系统下mysql添加用户、删除用户、授权、修改密码等sql命令使用...
  8. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门 1
  9. 深入PHP变量存储结构
  10. SLIC算法分割超像素原理及Python、C++
  11. 概率论----假设检验
  12. 直播盒子APP源码AlijuheCMS™开发手册之接口文档 for IOS
  13. Java:QQ登录页面的制作(实现成功登录的代码)——含源码
  14. Python函数知识点(详解)
  15. 解决大部分win10软件字体模糊的问题
  16. 鸿蒙分期靠谱吗,花呗借呗“陷阱”正式被确认,这两个禁忌不要触碰,别说没提醒你...
  17. 2022海南最新消防设施操作员模拟考试试题及答案
  18. diffusion medical image segmentation
  19. 简单的骨骼动画、骨骼动画理论
  20. 实验室第一次考核(C语言)

热门文章

  1. web渗透--vnc密码破解
  2. 调用聚合数据新闻头条API接口
  3. <<视觉问答>>2022:CLIP Models are Few-shot Learners: Empirical Studies on VQA and Visual Entailment
  4. Flex在线文档阅读器::pdf、doc、docx、xls、xlsx、ppt、pptx、htm、txt、rtf、epub、csv、xdoc等
  5. linux图形界面bind dns,在linux上使用BIND建立DNS服务器
  6. Java项目:图书管理系统(java+JSP+layui+bootstrap+Servlet+Mysql)
  7. Hazel引擎学习(十一)
  8. 复古决战快速施法穿墙秒怪分析流程及安全防护
  9. 中国31省 5G网速 排名!
  10. 非常感人的分手对白:伤感日志