コード例 #1
0
        public static BlackScholesClosedForm create()
        {
            double r;
            double sig;
            double K;
            double T;
            double d;
            string type;

            Console.Write("Strike ");
            K = Convert.ToDouble(Console.ReadLine());

            Console.Write("Sig ");
            sig = Convert.ToDouble(Console.ReadLine());

            Console.Write("Rate ");
            r = Convert.ToDouble(Console.ReadLine());

            Console.Write("Dividend ");
            d = Convert.ToDouble(Console.ReadLine());

            Console.Write("Expiry ");
            T = Convert.ToDouble(Console.ReadLine());

            Console.Write("Type ");
            type = Convert.ToString(Console.ReadLine());

            BlackScholesClosedForm option = new BlackScholesClosedForm(type, T, K, d, r, sig);

            return(option);
        }
コード例 #2
0
 public static void Display(this BlackScholesClosedForm option, double S)
 {
     Console.WriteLine(
         "Display Ooption price+greeks in an Extension method");
     Console.WriteLine("Price: {0}", option.Price(S));
     Console.WriteLine("Delta: {0}", option.Delta(S));
     Console.WriteLine("Gamma: {0}", option.Gamma(S));
     //Console.WriteLine("Vega: {0}", option.Vega(S));
     //Console.WriteLine("Theta: {0}", option.Theta(S));
     //Console.WriteLine("Rho: {0}", option.Rho(S));
 }
コード例 #3
0
ファイル: Mediator.cs プロジェクト: voks/QuantLibrary
        static void Main()
        {
            double spot       = 100;
            double expiry     = 2;
            double strike     = 100;
            double volatility = 0.1;
            double interest   = 0.02;
            double dividend   = 0.01;
            string type       = "CALL";

            QLNet.PlainVanillaPayoff     payoff = new QLNet.PlainVanillaPayoff(QLNet.Option.Type.Call, strike);
            QLNet.BlackScholesCalculator bscal  = new QLNet.BlackScholesCalculator(payoff, spot, dividend, volatility * expiry, interest);

            Console.WriteLine(bscal.value());
            //BlackScholesClosedForm bs = ConsoleBSOptionFactory.create();
            BlackScholesClosedForm bs = new BlackScholesClosedForm(type, expiry, strike, interest, dividend, volatility);

            Console.WriteLine(bs.Price(spot));
            double[] price = bs.Price(0, 500, 200);
            //for (int i = 0; i < price.Length; i++)
            //{
            //    Console.WriteLine(price[i]);
            //}
            ////Console.ReadLine();

            // Finite Difference
            double truncation = 500;

            PdeBS pdeBS = new PdeBS(expiry, strike, volatility, interest, dividend, truncation, type);
            Mesh  xMesh = new Mesh(100, 0, 500);
            Mesh  tMesh = new Mesh(1000, 0, 2);

            ThetaMethod test = new ThetaMethod(pdeBS, xMesh.getMesh());

            test.solve(tMesh.getMesh().ToArray(), 1);
            test.current();
            //FDM fdm = new FDM(pdeBS);
            //FDMDirector fdmDirector = new FDMDirector(fdm, xMesh.getMesh(), tMesh.getMesh());

            //fdmDirector.Start();
            //Vector<double> result = fdmDirector.current();
            //double valueResult = MathNet.Numerics.Interpolate.Linear(xMesh.getMesh(), result).Interpolate(strike);

            ////double[] test = new double[price.Length];
            ////for (int i = 0; i < price.Length; i++)
            ////{
            ////    test[i] = price[i] - result[i];
            ////    Console.WriteLine(test[i]);
            ////}

            //Console.WriteLine(valueResult);
            //Console.ReadLine();
        }
コード例 #4
0
        public static double[] Price(this BlackScholesClosedForm option, double low, double upper, int NSteps)
        {
            double h = (upper - low) / NSteps;
            double S = low;

            double[] price = new double[NSteps];

            for (int i = 0; i < NSteps; i++)
            {
                price[i] = option.Price(S);
                S       += h;
            }
            return(price);
        }