/** * Presented by Intrepid Technology, Inc. * http://www.cs.colorado.edu/~barrett/Home.html * author: David Barrett * robertl@intrepid.com ***/ import java.applet.*; import java.awt.*; class OptionBeta { double _value, _theta, _delta_S, _delta_X, _gamma_S, _gamma_X; public OptionBeta() { } double value() { return _value; } public double theta() { return _theta; } public double delta_S() { return _delta_S; } public double delta_X() { return _delta_X; } public double gamma_S() { return _gamma_S; } public double gamma_X() { return _gamma_X; } } class OptionAmerBeta extends OptionBeta { final int ITERATES = 30; public OptionAmerBeta(double S, double X, double r_f, double r_d, double sigma, double T) { int i,j; double X1,S1,S2,c,e; double u,d,p,q,t,p1,q1; double s[] = new double[ITERATES + 3]; double d2,u2; c=T/ITERATES; e=Math.exp(r_d*c); u=Math.exp(sigma*Math.sqrt(c)); d=1/u; p1=(Math.exp((r_d-r_f)*c)-d)/(u-d); q1=(u-Math.exp((r_d-r_f)*c))/(u-d); p=p1/e; q=q1/e; d2=d*d; u2=u*u; t=0.0f; X1=S/X; S1=X1*Math.pow(u,(double)(ITERATES+2)); S2=S1; for(j=0;j<=ITERATES+2;j++) { s[j]=S2-1.0f; if(s[j]<0.0f) s[j]=0.0f; S2=S2*d2; }; S1=S1*d; for(i=ITERATES+1;2<=i;i--) { S2=S1; for(j=0;j<=i;j++) { s[j]=p*s[j]+q*s[j+1]; if(s[j]