public static double DeltaToStrike(OptionType optionType, double delta, double spotPrice,
                                           double maturityInYears, double standardDeviation, double riskFreeRate, double dividendRate)
        {
            double S     = spotPrice;
            double T     = maturityInYears;
            double sigma = standardDeviation;
            double r     = riskFreeRate;
            double q     = dividendRate;
            double b     = riskFreeRate - dividendRate;

            double phi   = optionType.Equals(OptionType.Call) ? 1.0 : -1.0;
            double theta = (r - q) / sigma + sigma / 2;

            double K = S * Math.Exp(-phi * NormalCdf.NormSInv(phi * delta * Math.Exp(q * T)) * sigma * Math.Sqrt(T) + sigma * theta * T);

            return(K);
        }
示例#2
0
        public void DoTestInverseNormalCdf(double U, double actual)
        {
            var A = NormalCdf.NormSInv(U);

            Assert.AreEqual(A, actual, 1e-6);
        }