Example #1
0
 public static double CalcDelta(EnumOptionType OptionType, double S, double K, double r, double T, double Sigma, double q)
 {
     if (Sigma != 0 && T != 0)
     {
         double ndOne = CND(dOne(S, K, r, T, Sigma, q));
         return((OptionType == EnumOptionType.Call) ? ndOne : ndOne - 1);
     }
     else
     {
         return(double.NaN);
     }
 }
Example #2
0
        public static double CalcRho(EnumOptionType OptionType, double S, double K, double r, double T, double Sigma, double q)
        {
            if (Sigma != 0 && T != 0)
            {
                double d2 = dTwo(S, K, r, T, Sigma, q);

                return((OptionType == EnumOptionType.Call) ?
                       K * T * Math.Exp(-r * T) * CND(d2) :
                       -K *T *Math.Exp(-r *T) * CND(-d2));
            }
            else
            {
                return(double.NaN);
            }
        }
Example #3
0
        public static double OptionPrice(EnumOptionType OptionType, double S, double K, double r, double T, double Sigma, double q)
        {
            if (Sigma != 0 && T != 0)
            {
                double d1    = dOne(S, K, r, T, Sigma, q);
                double d2    = dTwo(S, K, r, T, Sigma, q);
                double exp_r = Math.Exp(-r * T);
                double exp_q = Math.Exp(-q * T);

                return((OptionType == EnumOptionType.Call) ?
                       S * exp_q * CND(d1) - K * exp_r * CND(d2) :
                       K *exp_r *CND(-d2) - S * exp_q * CND(-d1));
            }
            else
            {
                return(double.NaN);
            }
        }
Example #4
0
        public static double CalcTheta(EnumOptionType OptionType, double S, double K, double r, double T, double Sigma, double q)
        {
            if (Sigma != 0 && T != 0)
            {
                double d1    = dOne(S, K, r, T, Sigma, q);
                double d2    = dTwo(S, K, r, T, Sigma, q);
                double ndOne = CND(d1);
                double ndTwo = CND(d2);

                if (OptionType == EnumOptionType.Call)
                {
                    return(S * PDF(d1) * Sigma * Math.Exp(-q * T) / (2 * Math.Sqrt(T)) + q * S * CND(d1) * Math.Exp(-q * T) - r * K * Math.Exp(-r * T) * CND(d2));
                }
                else
                {
                    return(-S *PDF(d1) * Sigma * Math.Exp(-q * T) / (2 * Math.Sqrt(T)) - q * S * CND(-d1) * Math.Exp(-q * T) + r * K * Math.Exp(-r * T) * CND(d2));
                }
            }
            else
            {
                return(double.NaN);
            }
        }
Example #5
0
        public double GetFairPrice(double Spot, double Strik, double TDays, double Rate, double Volatility, EnumOptionType OptionType)
        {
            double _FairPrice = 0, _PHI = 1;

            if (OptionType == EnumOptionType.Put)
            {
                _PHI = -1;
            }

            if (TDays > 0)
            {
                double _VT = Volatility * Math.Sqrt(TDays);
                double _R  = Math.Log(1 + Rate);
                double _D1 = GetD1(Spot, Strik, TDays, Rate, Volatility);
                double _D2 = GetD2(_D1, TDays, Volatility);
                _FairPrice = _PHI * Spot * GetCND(_PHI * _D1) - _PHI * Strik * Math.Exp((0 - _R) * TDays) * GetCND(_PHI * _D2);
            }
            else
            {
                _FairPrice = Math.Max(_PHI * (Spot - Strik), 0);
            }
            return(_FairPrice);
        }