-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathopenredukti-intro.html
197 lines (160 loc) · 12.2 KB
/
openredukti-intro.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Introduction to OpenRedukti — OpenRedukti Alpha documentation</title>
<link rel="stylesheet" href="_static/alabaster.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Quick Start using Docker containers" href="openredukti-docker-quickstart.html" />
<link rel="prev" title="Welcome to OpenRedukti’s documentation!" href="index.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="section" id="introduction-to-openredukti">
<h1>Introduction to OpenRedukti<a class="headerlink" href="#introduction-to-openredukti" title="Permalink to this headline">¶</a></h1>
<p>OpenRedukti is a C++ library for working with Interest Rate Derivative products such as Interest Rate Swaps, and
FRAs. It allows you to build Interest Rate curves with different interpolation methods, and then use these curves
to compute present value and sensitivities of Interest Rate Derivatives.</p>
<p>OpenRedukti is Free Software, licensed under the GNU General Public License, v3. If you wish to use OpenRedukti
under a non-GPL license, you can raise an issue on <a class="reference external" href="https://github.com/redukti/OpenRedukti">GitHub repository</a>.
A liberal license will be granted to your company at zero cost, provided you agree to allow your company
to be listed as a user of OpenRedukti.</p>
<div class="section" id="main-features">
<h2>Main Features<a class="headerlink" href="#main-features" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
<li><p>Small library with minimal external dependencies (only external dependencies are BLAS, LAPACK and Google Protocol Buffers)</p></li>
<li><p>Ability to express an interest rate product as a set of cashflows</p></li>
<li><p>Bootstrap continuously compounded zero coupon interest rate curves using Linear, CubicSpline, and MonotoneConvex interpolators</p></li>
<li><p>Interpolate curves in the discount factor space using LogLinear and LogCubicSpline interpolators</p></li>
<li><p>Compute present value of cashflows</p></li>
<li><p>Compute first and second order derivatives using <a class="reference external" href="http://www.autodiff.org/">Automatic/algorithmic Differentiation</a>.</p></li>
<li><p>Script using <a class="reference external" href="https://github.com/dibyendumajumdar/ravi">Ravi</a> - a derivative of <a class="reference external" href="http://www.lua.org">Lua</a> programming language</p></li>
<li><p>Script using Python, see <a class="reference internal" href="pyredukti-intro.html"><span class="doc">An Introduction to Python Bindings for OpenRedukti</span></a>.</p></li>
<li><p>Docker images now available to make it easier to try out OpenRedukti and PyRedukti: see <a class="reference internal" href="openredukti-docker-quickstart.html"><span class="doc">Quick Start using Docker containers</span></a>.</p></li>
</ul>
</div>
<div class="section" id="background">
<h2>Background<a class="headerlink" href="#background" title="Permalink to this headline">¶</a></h2>
<p>OpenRedukti is part of the <a class="reference external" href="http://redukti.com/">MyCCP</a> product that was being developed by REDUKTI LIMITED. The development of MyCPP
was halted in June 2017 due to lack of funding. A decision was taken then to Open Source parts of the MyCCP product, leading to
the release of OpenRedukti.</p>
<p>The main differences between the Open Source release and the proprietary version used in MyCCP are:</p>
<ul class="simple">
<li><p>Only the core C++ pricing library has been released</p></li>
<li><p>The functionality for generating cashflows from FpML trades has not been released as this is fine tuned for the needs of MyCCP</p></li>
<li><p>The Limit Checker and VaR Calculator have not been released</p></li>
<li><p>The MyCCP front-end and middle tier components, written in C#, have not been released as these are very specific to requirements of a CCP.</p></li>
</ul>
<p>For further details of the full scope of the MyCCP product, please visit <a class="reference external" href="http://redukti.com/myccp-product-specifications.html">Redukti.Com</a>.</p>
</div>
<div class="section" id="the-openredukti-computation-model">
<h2>The OpenRedukti Computation Model<a class="headerlink" href="#the-openredukti-computation-model" title="Permalink to this headline">¶</a></h2>
<p>OpenRedukti’s design is quite different from QuantLib. In QuantLib various objects are interlinked via C++ pointers; this approach is
unsuitable for a server deployment.</p>
<p>OpenRedukti’s model decouples the raw market data, its conversion to curves, and the use of curves for valuation purposes.</p>
<p>So in order to value trades, you have to do following:</p>
<ol class="arabic simple">
<li><p>Build curves using raw market data (i.e. quotes). Curve Building uses a multi-curve builder so this is an expensive step. During curve
building you can optionally generate PAR sensitivities, which is a very expensive step (can take minutes).</p></li>
<li><p>You then seed a Valuation Service with the curves, fixings and some additional configuration data such as curve mappings.
OpenRedukti groups curves into market date sets. Each market data set is identified by the business date, the market data qualifier,
and a cycle number. This allows multiple market data sets to be computed and registered at the same time.
The Valuation Service caches all the registered market data sets in memory.</p></li>
<li><p>Each curve in the market data set is identified by a scenario number. This should be 0 for the base curves.
However, you may add additional curves with incremented scenario numbers. Such curves are used for VaR computation in
OpenRedukti, and each scenario curve represents a VaR scenario, i.e. the curve is shifted from the base curve in some manner.
Note that scenario curves never compute sensitivities.</p></li>
<li><p>Once the required market data set is registered, you submit all trades for valuation to the Valuation Service.
Each valuation request must be for a specific market data set, identified by the PricingContext. When you submit a valuation
request you can specify the scenario range to compute, for instance if you have base scenario 0 and 1250 scenario curves,
then you can request the range 0-1250. The Valuation Service will compute NPV for each of the scenarios and return the result.
Sensitivities if requested will only be generated for the base curves.</p></li>
<li><p>If you need to update the curves for a particular market data set, you have to do the steps above again, and then revalue all your trades
for that set. Typically though you would create a new market data set rather an update one already created. Your trades have no links to the
market data set, trades live in your world, OpenRedukti doesn’t care about them.</p></li>
<li><p>Although the OpenRedukti Valuation Service caches market data, it is a stateless service, there is no persistent state.
Each request is independent, and if you recreate the InMemoryRequestProcessor instance, or restart the OpenRedukti server,
all market data is forgotten and must be supplied again.
If you request valuation for a non-existent market data set then the service will simply tell you it cannot find the data.</p></li>
</ol>
</div>
<div class="section" id="ackowledgements">
<h2>Ackowledgements<a class="headerlink" href="#ackowledgements" title="Permalink to this headline">¶</a></h2>
<p>OpenRedukti gratefully acknowledges ideas and code it is using from other projects.</p>
<ul class="simple">
<li><p>My good friend <a class="reference external" href="https://www.linkedin.com/in/christer-rydberg-phd-98012a7/">Christer Rydberg</a> for showing me how to implement Automatic Differentiation and for help and advice over the years.</p></li>
<li><p><a class="reference external" href="http://adl.stanford.edu/hyperdual/">Jeffrey Fike’s work</a> on automatic differentiation using hyperdual vectors.</p></li>
<li><p><a class="reference external" href="http://quantlib.org/index.shtml">QuantLib</a> which has provided the basis for some of the key components such as interpolators.</p></li>
<li><p>The monotone convex interpolation method is based on papers and VB code from <a class="reference external" href="http://finmod.co.za/#our-research">Financial Modeling Agency</a>.</p></li>
<li><p>The <a class="reference external" href="http://devernay.free.fr/hacks/cminpack/">C/C++ Minpack</a> library provides the Levenberg-Marquardt solver used in curve building.</p></li>
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">OpenRedukti</a></h1>
<h3>Navigation</h3>
<p class="caption"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Introduction to OpenRedukti</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#main-features">Main Features</a></li>
<li class="toctree-l2"><a class="reference internal" href="#background">Background</a></li>
<li class="toctree-l2"><a class="reference internal" href="#the-openredukti-computation-model">The OpenRedukti Computation Model</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ackowledgements">Ackowledgements</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="openredukti-docker-quickstart.html">Quick Start using Docker containers</a></li>
<li class="toctree-l1"><a class="reference internal" href="openredukti-building.html">Building OpenRedukti</a></li>
<li class="toctree-l1"><a class="reference internal" href="pyredukti-intro.html">An Introduction to Python Bindings for OpenRedukti</a></li>
<li class="toctree-l1"><a class="reference internal" href="pyredukti-api.html">Python Library for OpenRedukti - API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="openredukti-cpp-api.html">OpenRedukti C++ API</a></li>
<li class="toctree-l1"><a class="reference internal" href="openredukti-ravi-api.html">OpenRedukti Scripting With Ravi</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="index.html" title="previous chapter">Welcome to OpenRedukti’s documentation!</a></li>
<li>Next: <a href="openredukti-docker-quickstart.html" title="next chapter">Quick Start using Docker containers</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
©2019, Dibyendu Majumdar.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 2.1.2</a>
& <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/openredukti-intro.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>