Optimering af kode.
Hej alleJeg har lavet dette lille program der beregner en options pris via et binomial træ. Som det kan ses bruges der arrays og løkker til at nå frem til prisen. Ved at øge antallet af steps i træet får man et mere præcis resultat. Problemet er at jeg kun kan udregne prisen på optionen ved 13.000 steps ved at bruge følgende komando. ”java –Xmx1526m -jar LimToSchoels.jar”. Jeg skulle gerne kunne udregne prisen på så mange steps som muligt.
Mit spørgsmål er derfor om der er en der kan optimere koden så jeg kan få optionsprisen på mange flere steps?
min kode ser ud som følger:
package limtoschoels;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
// TODO code application logic here
int N;
Scanner scan = new Scanner(System.in);
System.out.println("How many steps do you want the tree to calculate?");
N = scan.nextInt();
double K = 100;
double S0 = 100;
//constant so T-t=8/12
double months = 12;
double TimeToExercise = 8/months;
double Delta_T = TimeToExercise/N;
System.out.println("Delta_T = " + Delta_T);
double var = 0.30;
double r = 0.06;
double e = Math.E;
double[] S_t = new double[N+1];
double[][] f_t = new double[N+1][N+1];
//Calculates up and downs
double u = Math.pow(e, var*Math.sqrt(Delta_T));
double d = Math.pow(e, -var*Math.sqrt(Delta_T));
double a = Math.pow(e, r*Delta_T);
double p = (a-d)/(u-d);
System.out.println("u = " + u);
System.out.println("d = " + d);
System.out.println("a = " + a);
System.out.println("p = " + p);
System.out.println("------------------------");
//Calculates the stock price at the final note
int i = N;
while(i>=0)
{
S_t[i] = S0*Math.pow(u, i)*Math.pow(d, N-i);
f_t[i][N] = Math.max(S_t[i]-K, 0);
//System.out.println("f_t[" + i + "][" + N + "] = " + f_t[i][N]);
i--;
}
System.out.println("-----------------------");
i = N;
int t = 1;
int v = N-1;
while(v>=0)
{
while(i>=t)
{
f_t[i][v] = Math.exp(-r*Delta_T)*(p*f_t[i][v+1]+(1-p)*f_t[i-1][v+1]);
//System.out.println("f_t[" + i + "][" + v + "] = " + f_t[i][v]);
i--;
}
//System.out.println("------------------------------------------");
t++;
v--;
i = N;
}
System.out.println("f_0 = " + f_t[N][0]);
}
}
