Example: Call Option Surface shaded by Vega

A surface chart of call option values shaded by vega is rendered. The X, Y, and Z axes represent Stock Price, Time, and Option Value respectively.


import com.imsl.chart3d.*;
import com.imsl.chart.Colormap;
import com.imsl.stat.Cdf;
import java.awt.Color;

// Surface chart of call option value shaded by vega.
public class SurfaceEx1 extends JFrameChart3D {

    // Creates new form CallOptionSurface
    public SurfaceEx1() {
        Chart3D chart = getChart3D();
        chart.setTextFormat("0.0000");

        AxisXYZ axis = new AxisXYZ(chart);
        axis.setAxisTitlePosition(AxisXYZ.AXIS_TITLE_PARALLEL);
        axis.setTextFormat("0.0");

        axis.getAxisX().getAxisTitle().setTitle("Stock Price");
        axis.getAxisY().getAxisTitle().setTitle("Time");
        axis.getAxisZ().getAxisTitle().setTitle("Option Value");

        double strike = 20.0;
        double rate = 0.045;
        double sigma = 0.25;
        CallOption callOption = new CallOption(strike, rate, sigma);

        double minStock = 0.0;
        double maxStock = 2.0 * strike;
        double minTime = 0.0;
        double maxTime = 1.0;
        Surface surface = new Surface(axis, callOption, minStock,
                maxStock, minTime, maxTime);
        surface.setColorFunction(callOption);
        surface.setSurfaceType(Surface.SURFACE_TYPE_MESH
                | Surface.SURFACE_TYPE_NICEST);

        ColormapLegend colormapLegend = new ColormapLegend(chart,
                Colormap.RED_TEMPERATURE, -10., 60.);
        colormapLegend.setTitle("Vega");
        colormapLegend.setTextFormat("0.00");
        colormapLegend.setNumber(25);
        colormapLegend.setAutoscaleInput(ColormapLegend.AUTOSCALE_WINDOW);
        colormapLegend.setAutoscaleOutput(ColormapLegend.AUTOSCALE_NUMBER);

        this.setSize(375, 375);
        render();
    }

    public class CallOption implements Surface.ZFunction, ColorFunction {

        private double strike, rate, sigma;

        //Compute call option value using the Black-Scholes formula.
        public CallOption(double strike, double rate, double sigma) {
            this.strike = strike;
            this.rate = rate;
            this.sigma = sigma;

        }

        public double f(double stock, double time) {
            double d1 = (Math.log(stock / strike)
                    + (rate + 0.5 * sigma * sigma) * time)
                    / (sigma * Math.sqrt(time));
            double d2 = d1 - sigma * Math.sqrt(time);
            return stock * Cdf.normal(d1) - strike
                    * Math.exp(-rate * time) * Cdf.normal(d2);
        }

        public double delta(double stock, double time) {
            double d1 = (Math.log(stock / strike)
                    + (rate + 0.5 * sigma * sigma) * time)
                    / (sigma * Math.sqrt(time));
            return Cdf.normal(d1);
        }

        public double vega(double stock, double time) {
            double d1 = (Math.log(stock / strike)
                    + (rate + 0.5 * sigma * sigma) * time)
                    / (sigma * Math.sqrt(time));
            return stock * Math.sqrt(time) * Cdf.normal(d1);
        }

        public Color color(double stock, double time, double optionValue) {
            double vega = vega(stock, time);
            double s = (vega + 10.0) / (60.0 + 10.);
            return Colormap.RED_TEMPERATURE.color(s);
        }
    }

    public static void main(String args[]) {
        new SurfaceEx1().setVisible(true);
    }
}

Output

Link to Java source.