精華區beta NTU-GIIB2004 關於我們 聯絡資訊
<%@ page import="java.util.*" contentType="text/html;charset=Big5" %> <%! double bubble(double[] D, int num) { double t=0; for(int i=num-1;i>=0;i--) { for(int j=1;j<=i;j++) { if( D[j-1] > D[j] ) { t = D[j-1]; D[j-1] = D[j]; D[j]=t; } } } return D[num-1]; } %> <% int num= Integer.parseInt(request.getParameter("num").trim()); double strike= Double.parseDouble(request.getParameter("strike").trim()); double rate= Double.parseDouble(request.getParameter("rate").trim()); double period= Double.parseDouble(request.getParameter("period").trim()); double M[][]=new double[num][num]; double L[][]=new double[num][num]; double F[][]=new double[num][num]; double A[]=new double[num]; double C[]=new double[num]; double D[]=new double[num]; double E[]=new double[num]; double B[][] =new double[num][num]; double normal[] =new double[num]; String a="",b="",c=""; int i=0,j=0,k=0; double m=0,n=0,future=0,estimate=0; int repeat = 500000; String rv=""; for(i=1;i<=num;i++) { a= "a" + i; A[i-1] = Double.parseDouble(request.getParameter(a).trim()); c= "c" + i; C[i-1] = Double.parseDouble(request.getParameter(c).trim()); } for(i=1;i<=num;i++) { for(j=i;j<=num;j++) { if (i!=j) { b = "b" + i + j; B[i-1][j-1] = Double.parseDouble(request.getParameter(b).trim()); } else B[i-1][j-1]=1; } for(j=num;j>i;j--) if (i!=j) B[j-1][i-1] = B[i-1][j-1]; } for(i=1;i<=num;i++) { for(j=1;j<=num;j++) { M[i-1][j-1] = C[i-1]*C[j-1]*B[i-1][j-1]; out.write("<br>M("+i+","+j+")="+M[i-1][j-1]); } } i=0; while(i<num) { m=M[i][i]; n=0; out.write("<br>M1="+m); for(j=0;j<i;j++) n = n + Math.pow(L[i][j],2); out.write("<br>N1="+n); m = m - n; L[i][i] = Math.sqrt(m); for(j=0;j<num;j++) { m = 0; if (j != i) { for(k=0;k<i;k++) m = m + L[i][k] * L[j][k]; L[j][i]= (M[j][i]-m)/L[i][i]; } } ++i; } for(i=1;i<=num;i++) for(j=1;j<=num;j++) out.write("<br>L("+i+","+j+")="+L[i-1][j-1]); for(i=0;i<num;i++) { for(j=0;j<num;j++) { if (i != j) F[i][j]=L[j][i]; else F[i][j]=L[i][j]; } } for(k=0;k<repeat;k++) { for(j=0;j<num;j++) normal[j] = Math.sqrt(-2*Math.log(Math.random()))*Math.cos(2*Math.PI*Math.random()); for(j=0;j<num;j++) { m=0; for(i=0;i<num;i++) m = m + normal[i] * F[i][j]; E[j]=m; D[j]= A[j] * Math.exp((rate-Math.pow(C[j],2)/2)*period+Math.sqrt(period)*E[j]); } future = bubble(D,num); estimate = estimate + Math.max(future-strike,0); } rv = "<br>Rainbow Call選擇權的價值為: " + (estimate/repeat*Math.exp(-1*rate*period)); %> -- -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.4.241
ZyMe:藍波選擇權 怎麼在峰哥手中一下子就寫出來了>_< 210.58.175.17 04/28
ZyMe:太猛了  股掌叫好  甘溫多謝 210.58.175.17 04/28
AboveTheRim:不知道的人還以為峰哥po亂碼文 囧rz 219.84.87.24 04/28
BODOQOQO:哈哈老實說~~我實在不瞭解JAVA啊 218.166.27.27 04/28