Take the 2-minute tour ×
Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. It's 100% free, no registration required.

Possible Duplicate:
Is there an all Java options-pricing library (preferably open source) besides jquantlib?

Can anyone recommend a library with an implementation of Black Scholes and Monte Carlo in Java? Ideally something that is Java only and doesn't require a C++ dll or .so or .lib etc..

I've posted a similar question about open source and the choices appear to be quite limited thus far:

Quantlib - C++ using SWIG or similar to communicate with JVM JQuantLib - port of QuantLib to pure Java, but can't access site for 2 days now. finmath.net - Appears to be all java and has promise, but finding problems running applets using it.

Presently, this is for pricing very simple vanilla euro-style options. But must be open to the complexity that's sure to come prob. requiring Monte Carlo or other pricing models.

Thanks in advance.

share|improve this question

marked as duplicate by Tal Fishman, Louis Marascio, chrisaycock Sep 14 '11 at 22:51

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

    
This is more appropriate as an update to the previous question than a new question. –  Tal Fishman Sep 14 '11 at 19:49
    
code.google.com/p/maygard –  El Prezidenté May 10 '13 at 0:27
add comment

2 Answers

This one is in C#, but it could help you create yours in Java: Divergence issue with my monte carlo pricer...

using System;
using System.Threading.Tasks;
using MathNet.Numerics.Distributions;
using MathNet.Numerics.Random;

namespace MonteCarlo
{
    class VanillaEuropeanCallMonteCarlo
    {
        static void Main(string[] args)
        {
            const int NUM_SIMULATIONS = 10000000;
            const decimal strike = 50m;
            const decimal initialStockPrice = 52m;
            const decimal volatility = 0.2m;
            const decimal riskFreeRate = 0.05m;
            const decimal maturity = 0.5m;
            Normal n = new Normal();
            n.RandomSource = new MersenneTwister();


            VanillaEuropeanCallMonteCarlo vanillaCallMonteCarlo = new VanillaEuropeanCallMonteCarlo();

            Task<decimal>[] simulations = new Task<decimal>[NUM_SIMULATIONS];

            for (int i = 0; i < simulations.Length; i++)
            {
                simulations[i] = new Task<decimal>(() => vanillaCallMonteCarlo.RunMonteCarloSimulation(strike, initialStockPrice, volatility, riskFreeRate, maturity, n));
                simulations[i].Start();
            }

            Task.WaitAll(simulations);

            decimal total = 0m;

            for (int i = 0; i < simulations.Length; i++)
            {
                total += simulations[i].Result;
            }

            decimal callPrice = (decimal)(Math.Exp((double)(-riskFreeRate * maturity)) * (double)total / (NUM_SIMULATIONS * 2));

            Console.WriteLine("Call Price: " + callPrice);
            Console.WriteLine("Difference: " + Math.Abs(callPrice - 4.744741008m));
        }


        decimal RunMonteCarloSimulation(decimal strike, decimal initialStockPrice, decimal volatility, decimal riskFreeRate, decimal maturity, Normal n)
        {
            decimal randGaussian = (decimal)n.Sample();
            decimal endStockPriceA = initialStockPrice * (decimal)Math.Exp((double)((riskFreeRate - (decimal)(0.5 * Math.Pow((double)volatility, 2))) * maturity + volatility * (decimal)Math.Sqrt((double)maturity) * randGaussian));
            decimal endStockPriceB = initialStockPrice * (decimal)Math.Exp((double)((riskFreeRate - (decimal)(0.5 * Math.Pow((double)volatility, 2))) * maturity + volatility * (decimal)Math.Sqrt((double)maturity) * (-randGaussian)));
            decimal sumPayoffs = (decimal)(Math.Max(0, endStockPriceA - strike) + Math.Max(0, endStockPriceB - strike));
            return sumPayoffs;
        }
    }
}
share|improve this answer
add comment

You could try to see if NAG could suit your needs as I suggested in this post.

It's not free, but I think it's a pretty good tool to tackle problems of any complexity.

I haven't personally tested it though.

share|improve this answer
1  
Going with NAG would be a huge commitment for "pricing very simple vanilla euro-style options". –  chrisaycock Sep 14 '11 at 22:51
    
yes but he was looking for a library that "must be open to the complexity that's sure to come prob. requiring Monte Carlo or other pricing models", otherwise, you don't need any library at all to price vanilla euro options using Monte-Carlo. Simply java.util.Random, and maybe a pen and a paper is enough. –  SRKX Sep 15 '11 at 7:34
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.