QLW -- Evaluation Version

An evaluation version of QLW is available for download from this page. Please note the following important points:

  • QLW evaluation version is provided to you by BN Algorithms LTD under the terms QLW Evaluation license which is given below
  • The evaluation version has inbuilt restrictions. Do not use for trading. If required an unrestricted evaluation version may be requested by emailing webs@bnikolic.co.uk
  • The evaluation version is compatible with 64bit Windows or Linux and Java 1.8
  • Evaluation version of QLW/Python can be made available on request -- contact us at webs@bnikolic.co.uk

By downloading the QLW program below you are agreeing to the QLW Evaluation license:

QuantLib Ver QLW Version OS Architecture Download link
V1.14 V1.2.2p2 Linux X86_64 download
V1.14 V1.2.2 Linux X86_64 download
V1.14 V1.2.1 Linux X86_64 download
V1.14 V.1.2.1 Win X86_64 download
V1.7 V1.1.2 Win X86_64 download

Instructions for use locally

  • Unpack the evaluation ZIP archive
  • Execute the demo program with: java -cp ".;qlw.jar" qlwdemo
  • You can build your own evaluation application in Java by using the qlw.jar and ensuring qlw.dll is available in the PATH

Instructions for use on an Apache Spark cluster

QLW can be effectively used with Apache Spark. We are able to assist with deployment to Amazon EMR or other platforms.

A static Jupyter notebook demonstrating the use with Apahce spark is available.

QLW Evaluation License

  • The Licensor of the software is BN Algorithms Ltd. The Licensee is the person or employer of the person downloading the QLW evaluation software. The Software is supplied "AS IS" without any warranty or guarantee. Furthermore this evaluation software has technical limitations and inaccuracies built in.
  • The Licensor grants the Licensee a non-transferable, non-exclusive license so use the software for demonstration or evaluation purposes. The Licensee agrees not to use the software in the normal course of their business.
  • The Licensee agrees not to publish or distribute the software.
  • The Licensee agrees that the Licensor is not liable for direct or consequential damages related to this software. Nothing in this agreement places BN Algorithms Ltd under any liability or potential liability.
  • The Licensee agrees not to modify or reverse-engineer the software

Example program

This is an example program with QLW:

// -*- mode: java -*-
// Copyright (C) 2012-2018 Bojan Nikolic <bojan@bnikolic.co.uk>
//
// Licensor: BN Algorithms Ltd. License: Non-exclusive,
// non-transferable, royalty-free license solely for evaluation
// purposes. Not licensed for production use, i.e., use in the regular
// course of business. Evaluation version has of QLW limitations on
// capabilities. No warranty of any kind. Not suitable for commercial
// use.
//
// Contact webs@bnikolic.co.uk for licensing information.
//
// Demonstration program for QLW. This program reproduces some of the
// calculations in QuantLib Addin "InterestRateDerivatives.xlsx"
// example spreadsheet.

import java.util.UUID;

import co.uk.bnikolic.qlw.property_t;
import co.uk.bnikolic.qlw.qlw;
import co.uk.bnikolic.qlw.PropertyVector;
import co.uk.bnikolic.qlw.StringVector;
import co.uk.bnikolic.qlw.LongVector;
import co.uk.bnikolic.qlw.DoubleVector;
import co.uk.bnikolic.qlw.BoolVector;

public class qlwdemo {

    // Make unique IDs for ObjectHandler objects
    static public String UU()
    {
   return "s"+UUID.randomUUID();
    }


    public static void main(String[] args) throws Exception {

   // Print QLW Version
   System.out.println(qlw.qlwVersion());

   // This is fixed to allow reproducible results
   int ReferenceDate = 42412;
   qlw.qlSettingsSetEvaluationDate(new property_t(ReferenceDate));

   // Flat Term structure (TermStructures!B1)
   String ffyc=qlw.qlFlatForward(UU(),
                                 qlw.OH_NULL(),
                                 new property_t("NullCalendar"),
                                 new property_t(0.044),
                                 qlw.OH_NULL(),
                                 new property_t("Continuous"),
                                 new property_t("Annual"));

   // (TermStructures!H1)
   String cov=qlw.qlConstantOptionletVolatility(UU(),
                                                new property_t(0),
                                                "TARGET",
                                                "f",
                                                new property_t(0.15),
                                                qlw.OH_NULL(),
                                                qlw.OH_NULL(),
                                                qlw.OH_NULL());

   // DateCalc!B5
   String schedule1=qlw.qlSchedule(UU(),
                                  new property_t(42416),
                                  new property_t(46069),
                                  "1Y",
                                  new property_t("TARGET"),
                                  new property_t("Modified Following"),
                                  new property_t("Modified Following"),
                                  new property_t("Backward"),
                                  qlw.OH_NULL(),
                                  qlw.OH_NULL(),
                                  qlw.OH_NULL());
   // DateCalc!B21
   String schedule2=qlw.qlSchedule(UU(),
                                  new property_t(42416),
                                  new property_t(46069),
                                  "6M",
                                  new property_t("TARGET"),
                                  new property_t("Modified Following"),
                                  new property_t("Modified Following"),
                                  new property_t("Backward"),
                                  qlw.OH_NULL(),
                                  qlw.OH_NULL(),
                                  qlw.OH_NULL());

   // PricingEngines!B1
   String dpe=qlw.qlDiscountingSwapEngine(UU(),
                                          ffyc,
                                          qlw.OH_NULL(),
                                          qlw.OH_NULL(),
                                          qlw.OH_NULL());
   // PricingEngines!B8
   String bcfe=qlw.qlBlackCapFloorEngine(UU(),
                                         ffyc,
                                         cov,
                                         qlw.OH_NULL());

   // Swaps!B1
   String euix=qlw.qlEuribor(UU(),
                             "6M",
                             new property_t(ffyc));

   // Swaps!B9
   DoubleVector nominals= new DoubleVector();
   nominals.push_back(1e6);
   String ibLeg=qlw.qlIborLeg(UU(),
                              new property_t("Following"),
                              nominals,
                              schedule2,
                              new LongVector(),
                              qlw.OH_NULL(),
                              "Actual/360",
                              new DoubleVector(),
                              new DoubleVector(),
                              euix,
                              new DoubleVector(),
                              new DoubleVector());

   // Fixed Rate Late: Swaps!B26
   DoubleVector coupons= new DoubleVector();
   coupons.push_back(0.05);
   String frLeg=qlw.qlFixedRateLeg(UU(),
                                   new property_t("Following"),
                                   nominals,
                                   schedule1,
                                   coupons,
                                   "30/360");

   // Swap object (Swaps!E16)
   StringVector legs=new StringVector();
   legs.push_back(frLeg);
   legs.push_back(ibLeg);

   BoolVector payer=new BoolVector();
   payer.push_back(true);
   payer.push_back(false);

   String ss=qlw.qlSwap(UU(),
                        legs,
                        payer);

   qlw.qlInstrumentSetPricingEngine(ss,
                                    dpe);

   System.out.format("Vanilla Swap NPV: %f %n (Swaps!I17)",
                     qlw.qlInstrumentNPV(ss));






    }
}