SIMM Sensitivity

Calculate risk sensitivities for Swaps and Swaptions as required by the ISDA SIMM methodology.

Parameter Description Default Options
trades
Required
Input trades. Can be QuickTrade, Clarus, FPML5, LCH, CME or SDR format. If not specified then must specify either portfolios or whatifTrades parameters
valueDate
Optional
The value date in YYYY-MM-DD format.
aggregationLevel
Optional
Controls if the results are written at the trade level or aggregated to portfolio level. Portfolio Trade , Portfolio
portfolioID
Optional
A simple identifier for the portfolio
irCurveType
Optional
IRCurve Type Par Par , Zero
target
Optional
Target Sensitivities Sensitivities , Schedule , ParRiskInstruments
amountCurrencyColumn
Optional
Amount Currency Column G_SimmCurrency
import clarus

response = clarus.simm.sensitivity(aggregationLevel='Trade',trades='USD 7Y 100m pay 1.5%',valueDate='2016-08-09')
print (response)
import com.clarusft.api.model.simm.SensitivityRequest
import com.clarusft.api.model.simm.SensitivityResponse

ApiClient clarus = ApiClient.getDefault();
SensitivityResponse response = clarus.request(new SensitivityRequest().withAggregationLevel("Trade").withTrades("USD 7Y 100m pay 1.5%").withValueDate("2016-08-09"));
System.out.println(response);
import Clarus

response = Clarus.Simm.sensitivity(aggregationLevel="Trade",trades="USD 7Y 100m pay 1.5%",valueDate="2016-08-09")
print(response)

##
##Need to install packages once, if not already installed
##install.packages('httr')
##install.packages('readr')
##

library('httr')
##library('readr')

## Manually edit and set key/secret here ##
apiKey <- '...'
apiSecret <-'...'

request <- function(category, functionName, ...){
  restUrl  =  paste0('https://apieval.clarusft.com/api/rest/v1/', category, '/',functionName, '.csv')
  response <- POST(url=restUrl, body=list(...), encode='json', authenticate(apiKey, apiSecret, type='basic'))
  if (response$status_code!=200){
      stop(paste0('Request to ', category, '/', functionName, ' failed with status code: ', response$status_code))
  }
  return (response)
}

dataframe <- function(response){
  return (read.csv(text=content(response, 'text'), sep=',', head=TRUE))
}
## filename <- file.path('C:', 'Temp', 'myfile.csv')
## myvalue <- <- read_file(filename)

r <- request('simm', 'Sensitivity', aggregationLevel='Trade', trades='USD 7Y 100m pay 1.5%', valueDate='2016-08-09')
df <- dataframe(r)
print (df)

import requests
import sys
import pandas
import io
#import os

# Example of REST API call to Clarus Microservices #

# Manually edit and set key/secret here #
apiKey = ''
apiSecret = ''

print (sys.version)

def request(category, functionName, **params):
  restUrl = 'https://apieval.clarusft.com/api/rest/v1/' + category + '/' + functionName + '.json'
  r = requests.post(restUrl, json=params, auth=(apiKey, apiSecret))
  r.raise_for_status()
  return r.json()

def dataframe(results):
  return pandas.DataFrame(results['results'])

# filename = os.path.join('C:\\', 'Temp', 'myfile.csv')
# myvalue = open(filename).read()

r = request('simm', 'Sensitivity', aggregationLevel='Trade', trades='USD 7Y 100m pay 1.5%', valueDate='2016-08-09')
df = dataframe(r)
print(pandas.DataFrame.head(df))


use strict;
use warnings;
use MIME::Base64;
use JSON;
use REST::Client;

# Example of REST API call to Clarus Microservices #

my $client = REST::Client->new();
$client->addHeader('Content-Type', 'application/json');

# Manually edit and set key/secret here 
my $apiKey = '';
my $apiSecret = '';

my $encoded_auth = encode_base64("$apiKey:$apiSecret", '');
$client->addHeader('Authorization', "Basic $encoded_auth");

my %params = ('aggregationLevel' => 'Trade','trades' => 'USD 7Y 100m pay 1.5%','valueDate' => '2016-08-09');

my $urlBase = 'https://apieval.clarusft.com/api/rest/v1/';
my $category = 'simm/';
my $name = 'Sensitivity';
my $outputFormat = '.csv'; #can also be '.json' or '.tsv'
my $fullRESTUrl  =  $urlBase . $category . $name . $outputFormat;

$client->POST($fullRESTUrl,encode_json(\%params));

print 'Response: ' . $client->responseContent() . "\n";
print 'Response status: ' . $client->responseCode() . "\n";


printf('Example of REST API call to Clarus Microservices\n');

function r = request(category, functionName, params)

# Manually edit and set key/secret here #
  apiKey = ''
  apiSecret = ''

  restUrl = ['https://' apiKey ":" apiSecret  "@" 'apieval.clarusft.com/api/rest/v1/' category '/' functionName '.csv'];
  [r, status, message] = urlread (restUrl, 'get', params);
  if (status!=1)
      error(['Failed on ' category '/' functionName ': ' message]);
  endif
end

function ca = toCellArray(csvStr)
  header_row = textscan (csvStr, "%s", 1, 'delimiter','\n');
  headers = strsplit(char(header_row), ",");
  numCols = size(headers)(2);
  format = repmat('%s ', [1 numCols]);
  ca = textscan (csvStr, format, 'delimiter',',', 'endofline',"\n");
end

params = {'aggregationLevel', 'Trade', ...
          'trades', 'USD 7Y 100m pay 1.5%', ...
          'valueDate', '2016-08-09'}

r = request('simm', 'Sensitivity', params)
ca = toCellArray(r);

ca

Request Body

Submit to generate...
Response

Submit to generate...

{
  "trades" : "USD 7Y 100m pay 1.5%",
  "valueDate" : "2016-08-09",
  "aggregationLevel" : "Trade"
}