Skip to content

Instantly share code, notes, and snippets.

@tomwhoiscontrary
tomwhoiscontrary / build.sh
Created October 1, 2019 14:48
Failing to price a seasoned SONIA OIS with QuantLib
#! /bin/bash -eu
cd "$(dirname "$0")"
$GCC_HOME/bin/g++ -std=c++17 -Wall -g -I $QL_PATH/include -L $QL_PATH ${GCC_OPTS:-} sonia_demo.cpp -lQuantLib -o sonia_demo
LD_LIBRARY_PATH=$QL_PATH ./sonia_demo
@tomwhoiscontrary
tomwhoiscontrary / ErrorCollector.java
Last active September 25, 2019 12:04
ErrorCollector for JUnit 5
import org.hamcrest.Matcher;
import org.hamcrest.MatcherAssert;
import org.junit.jupiter.api.extension.AfterTestExecutionCallback;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.opentest4j.MultipleFailuresError;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@tomwhoiscontrary
tomwhoiscontrary / StreamTraceTest.java
Created July 18, 2019 10:11
Breaking IntelliJ stream trace
import org.junit.Test;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamTraceTest {
@Test
public void test() {
AtomicInteger mapCount = new AtomicInteger(0);
@tomwhoiscontrary
tomwhoiscontrary / Normal.codestyle.json
Created July 18, 2019 09:55
An IntelliJ misformatting
{
"schemeName": "Normal",
"version": "1.0",
"codeStyle": {
"all": {
"formatter_off_tag": "@formatter:off",
"formatter_on_tag": "@formatter:on",
"formatter_tags_accept_regexp": false,
"formatter_tags_enabled": false,
"max_line_length": 120,
@tomwhoiscontrary
tomwhoiscontrary / raises.java
Created June 27, 2019 17:54
The raises matcher
public static Matcher<Callable<?>> raises(Matcher<? super Throwable> sub) {
return new FeatureMatcher<Callable<?>, Throwable>(sub, "thrown exception", "thrown exception") {
@Override
protected Throwable featureValueOf(Callable<?> thing) {
try {
thing.call();
} catch (Throwable e) {
return e;
}
return null;
@tomwhoiscontrary
tomwhoiscontrary / ClientSubscriptionDemo.java
Created May 7, 2019 13:48
Java 11 streaming subscription
import com.sun.net.httpserver.HttpServer;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
@tomwhoiscontrary
tomwhoiscontrary / transcript.txt
Last active May 2, 2019 11:12
jpackage run on Windows 10
PS C:\Users\IEUser\Downloads\jpackage-demo-master\jpackage-demo-master> .\gradlew.bat build
> Task :jpackage
jpackage argument list:
[create-app-image, --name, demo, --input, C:\Users\IEUser\Downloads\jpackage-demo-master\jpackage-demo-master\build\libs, --output, C:\Users\IEUser\Downloads\jpackage-demo-master\jpackage-demo-master\build/app-image, --main-jar, jpackage-demo.jar]
Creating app bundle: demo in C:\Users\IEUser\Downloads\jpackage-demo-master\jpackage-demo-master\build\app-image.
Adding modules: [java.rmi, jdk.management.jfr, jdk.jdi, jdk.charsets, jdk.xml.dom, java.xml, java.datatransfer, jdk.jstatd, jdk.httpserver, java.desktop, java.security.sasl, jdk.zipfs, java.base, jdk.crypto.ec, jdk.javadoc, jdk.management.agent, jdk.jshell, jdk.editpad, jdk.sctp, jdk.jsobject, java.sql.rowset, java.smartcardio, jdk.unsupported, jdk.jlink, jdk.scripting.nashorn, java.security.jgss, java.compiler, jdk.dynalink, jdk.unsupported.desktop, jdk.accessibility, jdk.security.jgss, java.sql, java.xml.crypto, java.l
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Combine {
public static class Item {
String name;
@tomwhoiscontrary
tomwhoiscontrary / convexMonotoneClassic.csv
Last active July 25, 2018 14:37
Another demonstration that not all is right with the convex monotone implementation in QuantLib - https://imgur.com/a/ksS7OD8
term rate forward
0.0 -0.0033133321508 -0.0033133321508
0.1 -0.00329678287008599 -0.003263684308657968
0.2 -0.003247135027943958 -0.0031147407822318712
0.30000000000000004 -0.0031652069127224678 -0.00289212724033709
0.4 -0.00307524118684741 -0.002711931672110584
0.5 -0.0029812451740789943 -0.002491961467903277
0.6 -0.002878499729047622 -0.0022396014243447277
0.7 -0.0027726330307377965 -0.002047717424672988
0.7999999999999999 -0.002674128906090226 -0.0019474822563351547
@tomwhoiscontrary
tomwhoiscontrary / curve.cpp
Last active June 11, 2018 15:30
Simple attempt to build a Euribor curve
#include <iostream>
#include <vector>
#include <boost/make_shared.hpp>
#include <ql/indexes/ibor/euribor.hpp>
#include <ql/math/interpolations/all.hpp>
#include <ql/termstructures/yield/piecewiseyieldcurve.hpp>
#include <ql/termstructures/yield/ratehelpers.hpp>
#include <ql/time/daycounters/actual360.hpp>