finmath / finmath-lib

Mathematical Finance Library: Algorithms and methodologies related to mathematical finance.
Apache License 2.0
488 stars 168 forks source link
finmath-lib java mathematical-modelling monte-carlo-simulation quantitative-finance simulation

About finmath lib


Mathematical Finance Library: Algorithms and methodologies related to mathematical finance.


Twitter GitHub license Latest release Maven Central Build Status javadoc

Project home page: http://finmath.net/finmath-lib

The finmath lib libraries provides (JVM) implementations of methodologies related to mathematical finance, but applicable to other fields. Examples are

Languages and Build

The library is available for Java 11 and Java 8. We are starting to provide examples in Kotlin.

The Maven build file is provide. Import the project as Maven project.

The default Maven profile is Java 11 without Kotlin. To enable Java 8 version select the Maven profile 'java-8'. To enable Kotlin select the Maven profile 'kotlin'.

Releases

Binary releases can be found at http://finmath.net/finmath-lib . The version numbering of finmath-lib follows a the semantic versioning (at least we try to).

Distribution

finmath lib is distributed through the central maven repository. It's coordinates are:

For the Java 11 version:

<groupId>net.finmath</groupId>
<artifactId>finmath-lib</artifactId>
<version>${project.version}</version>

For the Java 8 version:

<groupId>net.finmath</groupId>
<artifactId>finmath-lib</artifactId>
<version>3.6.3</version>
<classifier>java8</classifier>

Note: finmath-lib Version 4 and 5 is currently not available for Java 6. For Java 6 you may try version 3.6.3 with classifier java6.

You may build the Java 11 version via Maven using

mvn -P java-11

and the Java 8 version using

mvn -P java-8

Source code

The finmath lib Java library comes in two flavors which have a slightly different code base: a Java 11 version and a Java 8 version. We will use Java 11 concepts in the future and try to provide Java 8 compatibility where possible.

For that reason, the source code is duplicated:

Although the two folder share some/many identical source files, we prefer this two folder layout over one with a third folder like java-common.

Building finmath lib

These builds may be performed via Maven the profiles "java-11" and "java-8". The eclipse project file is pre-configured to Java 11.

Maven build

The maven pom defaults to the Java 11 build. To build finmath lib for Java 8 use the maven profile "java-8".

Repositories

Source code and demos are provided via Github repository.

Although not recommended, the repository contains an Eclipse project and classpath file including all dependencies.

Documentation

For documentation please check out

License

The code of "finmath lib" and "finmath experiments" (packages net.finmath.*) are distributed under the [Apache License version 2.0][], unless otherwise explicitly stated.

Extensions

The finmath-lib-cuda-extensions implement the interface RandomVariable via Cuda GPU code. This allows to perform Monte-Carlo simulations on the GPUs with a minimal change: a replacement of the random variable factory.

The finmath-lib-automaticdifferentiation-extensions implement the RandomVariableInterface via an AAD enabled version. This allows to access automatic differentiations with a minimal change: a replacement of the random variable factory. Starting with version 3.3.1 the finmath-lib-automaticdifferentiation-extensions is part of finmath-lib.

Coding Conventions

We follow losely the Eclipse coding conventions, which are a minimal modification of the original Java coding conventions. See https://wiki.eclipse.org/Coding_Conventions

We deviate in some places: