Skip to content

Commit 250e7dc

Browse files
Merge remote-tracking branch 'origin/master' into github_modules
2 parents f6452ee + 5c6ff81 commit 250e7dc

24 files changed

Lines changed: 891 additions & 261 deletions

Docker/.env

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
TAG=latest
22
DEBIAN_TAG=12.0
3-
QL_TAG=1.29_e57914e13
3+
QL_TAG=1.30_9921a4d7
44
BOOST_TAG=1.78.0
55
BOOST_DIR=1_78_0
66
NUM_CORES=16

Docs/UserGuide/allowablevalues.tex

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,11 @@ \subsection{Allowable Values}
123123
\emph{OldCDS} & Same as TwentiethIMM with unrestricted date ends and long/short stub coupon period (old CDS convention).\\ \hline
124124
\emph{CDS} & \makecell[tl]{Credit derivatives standard rule defined in 'Big Bang' changes in 2009. \\ \\ For quarterly periods (\lstinline!Tenor! set to \emph{3M}): \\ (Assuming no \lstinline!FirstDate!/\lstinline!LastDate!) \\ Dates fall on 20th of March, June, September, December. A \emph{Following} \\ roll convention will be applied if the 20th falls on a non-business day. \\ If the \lstinline!EndDate! in the schedule is set to a date beyond the rolled \\ quarterly CDS date, the actual trade termination date will be on the \\ following quarterly CDS date. \\ The first coupon will be paid on the quarterly CDS date following the \\ \lstinline!StartDate!, and be for the period since the previous quarterly CDS \\ date. \\ \\ For monthly periods (\lstinline!Tenor! set to \emph{1M}): \\ (Assuming no \lstinline!FirstDate!/\lstinline!LastDate!)\\ Dates fall on 20th of each month, but the termination is still adjusted \\ to be in line with quarterly periods. \\ If the \lstinline!EndDate! in the schedule is set to a date beyond the rolled \\ quarterly CDS date (i.e. the 20th+roll Mar, Jun, Sep, Dec), \\ the actual termination date will be on the following quarterly CDS \\ date, causing a long final stub. \\ The first coupon will be paid on the next 20th monthly following the \\ \lstinline!StartDate!, and be for the period since the previous month's 20th.}\\ \hline
125125
\emph{CDS2015} & \makecell[tl]{Credit derivatives standard rule updated in 2015. \\ Same as \emph{CDS} but with termination dates adjusted to \\ 20th June and 20th December. \\ For schedule \lstinline!EndDates! from the 20th of March to the 19th September, \\ both included, the termination date will fall on the 20th June (with \\ \emph{Following} roll). \\ For schedule \lstinline!EndDates! from the 20th September to the 19th March, \\ both included, the termination date will fall on the 20th December \\ (with \emph{Following} roll).} \\ \hline
126-
\caption{Allowable Values for Rule}
127-
\label{tab:rule}
128-
\end{longtable}
126+
\emph{EveryThursday} & If FirstDate is not given, all thursdays between start and end date.
127+
If FirstDate is given, FirstDate plus all thursdays between FirstDate and end date. \\ \hline
128+
\caption{Allowable Values for Rule}
129+
\label{tab:rule}
130+
\end{longtable}
129131

130132
\begin{longtable}{| p{.30\textwidth} | p{.70\textwidth} |}
131133
\hline

Docs/UserGuide/tradecomponents/floatinglegdata.tex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,4 +293,13 @@ \subsubsection{Floating Leg Data, Spreads, Gearings, Caps and Floors}
293293

294294
Allowable values: \emph{true}, \emph{false} . Defaults to \emph{false} if left blank or omitted.
295295

296+
\item \lstinline!FixingSchedule! [Optional]: This node allows for the specification of an explicit fixing schedule, see
297+
\ref{ss:schedule_data}. Supported for underlying IBOR / term rate index. A given fixing will become effective as
298+
specified by FixingDays relative to the fixing schedule or by an explicit ResetSchedule.
299+
300+
\item \lstinline!ResetSchedule! [Optional]: This node allows for the specification of an explicit reset schedule, see
301+
\ref{ss:schedule_data}, i.e. the dates on which fixings become effective. Supported for underlying IBOR / term rate
302+
index. Can be given together with FixingSchedule or FixingDays. In the latter case, the fixing dates are derived from
303+
the reset schedule.
304+
296305
\end{itemize}

Docs/UserGuide/tradecomponents/legdatanotionals.tex

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -190,26 +190,17 @@ \subsubsection{Leg Data and Notionals}
190190
\label{lst:notional_fxreset}
191191
\end{listing}
192192

193-
194-
After the \lstinline!Notional! sub-node the \lstinline!LegData! node includes a \lstinline!ScheduleData! sub-node, and a sub-node based on the choice of \lstinline!LegType! as per below:
195-
193+
\item StrictNotionalDates [Optional]: If given and set to true, notional changes specified by startDate will be
194+
interpreted as taking place on the exact given date, even if that date falls into a calculation (accrual)
195+
period. Otherwise the notional change is applied for the next calculation period. Supported only for fixed and
196+
floating legs with IBOR / RFR term rate coupons.
196197
\item ScheduleData: This is a trade component sub-node outlined in section \ref{ss:schedule_data} Schedule Data and
197-
Dates.
198-
\item \lstinline!PaymentDates! [Optional]: This node allows for the specification of a list of explicit payment dates that overrides the payment dates generated by the payment conventions. This is an optional node and is currently only used in commodity trades, fixed legs and floating legs with underlying OIS and IBOR indices.
199-
See Listing \ref{lst:paymentdates} for an example. \break
200-
201-
\begin{listing}[H]
202-
%\hrule\medskip
203-
\begin{minted}[fontsize=\footnotesize]{xml}
204-
<PaymentDates>
205-
<PaymentDate>2020-01-15</PaymentDate>
206-
<PaymentDate>2021-01-15</PaymentDate>
207-
<PaymentDate>2022-01-17</PaymentDate>
208-
</PaymentDates>
209-
\end{minted}
210-
\caption{Payment dates}
211-
\label{lst:paymentdates}
212-
\end{listing}
198+
Dates.
199+
\item \lstinline!PaymentSchedule! [Optional]: This node allows for the specification of an explicit payment schedule,
200+
see \ref{ss:schedule_data}. Supported in commodity trades, fixed legs and floating legs with underlying OIS and IBOR
201+
indices.
202+
\item \lstinline!PaymentDates! [Deprecated]: This node allows for the specification of a list of explicit payment
203+
dates. The usage is deprecated, use PaymentSchedule instead.
213204

214205
\item FixedLegData: This trade component sub-node is required if \lstinline!LegType! is set to \emph{Fixed} It is
215206
outlined in section \ref{ss:fixedleg_data}.

Docs/UserGuide/tradecomponents/scheduledata.tex

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,15 @@ \subsubsection{Schedule Data (Rules, Dates and Derived)}\label{ss:schedule_data}
138138
overwrites the last date of the schedule that is otherwise built from IMM dates.
139139

140140
Allowable values: See \lstinline!Date! in Table \ref{tab:allow_stand_data}.
141+
142+
\item \lstinline!RemoveFirstDate! [Optional]: If true the first date will be removed from the schedule. Useful to define a payment schedule using the rules for a calculation schedule.
143+
144+
Allowable values: true, false
145+
146+
\item \lstinline!RemoveLastDate! [Optional]: If true the last date will be removed from the schedule. Useful to define a fixing or reset schedule using the rules for a calculation schedule.
147+
148+
Allowable values: true, false
149+
141150
\end{itemize}
142151

143152
\medskip
@@ -202,4 +211,12 @@ \subsubsection{Schedule Data (Rules, Dates and Derived)}\label{ss:schedule_data}
202211

203212
Allowable values: See Table \ref{tab:convention} Roll Convention. Defaults to \emph{Unadjusted} if left blank or omitted.
204213

205-
\end{itemize}
214+
\item \lstinline!RemoveFirstDate! [Optional]: If true the first date will be removed from the schedule. Useful to define a payment schedule based on a calculation schedule.
215+
216+
Allowable values: true, false
217+
218+
\item \lstinline!RemoveLastDate! [Optional]: If true the last date will be removed from the schedule. Useful to define a fixing or reset schedule based on a calculation schedule.
219+
220+
Allowable values: true, false
221+
222+
\end{itemize}

Docs/UserGuide/tradedata/totalReturnSwap.tex

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ \subsubsection{Generic Total Return Swap / Contract for Difference (CFD)}
5252
\item Bond: See \ref{ss:bond}, the trade data is given in a BondData sub node.
5353
\item ForwardBond: See \ref{ss:BondForward_refdata}, the trade data is given in a ForwardBondData sub node.
5454
\item CBO: See \ref{ss:CBOData}, the trade data is given in a CBOData sub node.
55+
\item CommodityPosition: See \ref{ss:commodity_position}, the trade data is given in a CommodityPositionData sub node.
5556
\item ConvertibleBond: See \ref{ss:convertible_bond}, the trade data is given in a ConvertibleBondData sub
5657
node. When using reference data, a TRS on a convertible bond can also be captured as a TRS on a bond, i.e. there is
5758
no need to distinguish between a TRS on a Bond and a TRS on a convertible Bond in this case, the pricer will figure
@@ -416,6 +417,33 @@ \subsubsection{Generic Total Return Swap / Contract for Difference (CFD)}
416417
\label{lst:trsdata4}
417418
\end{listing}
418419

420+
\begin{listing}[H]
421+
%\hrule\medskip
422+
\begin{minted}[fontsize=\footnotesize]{xml}
423+
<TotalReturnSwapData>
424+
<UnderlyingData>
425+
<Trade>
426+
<TradeType>CommodityPosition</TradeType>
427+
<CommodityPositionData>
428+
<!-- basket price = quantity x sum_i ( weight_i x price_i x fx_i ) -->
429+
<Quantity>1000</Quantity>
430+
<Underlying>
431+
<Type>Commodity</Type>
432+
<Name>RIC:.BCOM</Name>
433+
<Weight>1.0</Weight>
434+
<PriceType>Spot</PriceType>
435+
</Underlying>
436+
</CommodityPositionData>
437+
</Trade>
438+
</UnderlyingData>
439+
<!-- omitting ReturnData, FundingData, AdditionalCashflowData -->
440+
</TotalReturnSwapData>
441+
</Trade>
442+
\end{minted}
443+
\caption{Generic Total Return Swap on a commodity index underlying}
444+
\label{lst:trsdata5}
445+
\end{listing}
446+
419447
\begin{listing}[H]
420448
%\hrule\medskip
421449
\begin{minted}[fontsize=\footnotesize]{xml}

Docs/UserGuide/userguide.tex

Lines changed: 46 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -232,14 +232,15 @@ \subsubsection*{Scope and Roadmap}
232232
\begin{itemize}
233233
\item Commodity products (Swaps, Basis Swaps, Av. Price Options, Swaptions), released December 22 with ORE v8
234234
\item Credit products (Index CDS and Index CDS Options, Credit-Linked Swaps, Synthetic CDOs), released March 23 with ORE v9
235-
\item Bond products and Hybrids (Bond Options, Bond Repos, Bond TRS, Convertible Bonds, Generic TRS with mixed basket underlyings, CFDs), to be released in June 23
236-
\item Exotics (Scripted trade framework for modelling highly structured hybrid payoffs such as Accumulators, TARFs, PRDCs, etc.), to be released in September 23
235+
\item Bond products and Hybrids (Bond Options, Bond Repos, Bond TRS, Composite Trades, Convertible Bonds, Generic TRS with mixed basket underlyings, CFDs), to be released in June 23 with ORE v10
236+
\item Exotics (Scripted trade framework for modelling highly structured hybrid payoffs such as Accumulators, TARFs, PRDCs, etc.), to be released in September 23 with ORE v11
237237
\end{itemize}
238238
These contributions were (and will be) accompanied by analytics extensions to enhance ORE usability:
239239
\begin{itemize}
240240
\item Credit exposure including Commodity and American Monte Carlo for Exotics, released in December 22 with ORE v8
241241
\item Market Risk including multi-threaded sensitivities, par sensitivity, delta/gamma VaR, released in March 23 with ORE v9
242-
\item Portfolio Credit Model, to be released in June 23
242+
\item Portfolio Credit Model, to be released in June 23 with ORE v10
243+
\item ISDA's Standard Initial Margin Model (SIMM) , to be released in June 23 with ORE v10
243244
\end{itemize}
244245

245246
\medskip
@@ -303,6 +304,14 @@ \subsubsection*{Scope and Roadmap}
303304
\hline
304305
Index Tranches, Synthetic CDOs & Y & Y & N & Y \\
305306
\hline
307+
Composite Trades & Y & Y & Y & Y \\
308+
\hline
309+
Total Return Swaps and Contracts for Difference & Y & Y & Y & Y \\
310+
\hline
311+
Convertible Bonds & Y & Y & Y & N \\
312+
\hline
313+
ASCOTs & Y & Y & Y & Y \\
314+
\hline
306315
\end{tabular}
307316
\caption{ORE product coverage. FX/Equity Exotics include Barrier, Digital, Digital Barrier (FX only), Double Barrier, European Barrier, KIKO Barrier (FX only), Touch and Double Touch Options.}
308317
\label{tab_coverage}
@@ -337,95 +346,80 @@ \subsubsection*{Organisation of this document}
337346
\section{Release Notes}\label{sec:releasenotes}
338347
%========================================================
339348

340-
This section summarises the notable changes between release 8 (December 2022) and 9 (March 2023).
349+
See the full history of release notes in {\tt News.txt} in the top level directory of the ORE's github repository.
350+
351+
\medskip
352+
This section summarises the notable changes between release 9 (March 2023) and 10 (June 2022).
341353

342354
\bigskip
343355
INSTRUMENTS
344356
\begin{itemize}
345-
\item roll out of Credit derivatives, thanks to Acadia Inc., as announced in September 22:
357+
\item Roll out of Hybrid and Credit instruments, thanks to Acadia Inc., as announced in September 22:
346358
\begin{itemize}
347-
\item Bond Option
348-
\item Bond Repo
349-
\item Bond Total Return Swap
350-
\item Credit-Linked Swap
351-
\item Index Credit Default Swap
352-
\item Index Credit Default Swap Option
353-
\item Credit Index Tranche, Synthetic CDO
354-
\end{itemize}
359+
\item Collateralized Bond Obligation, see Examples 45
360+
\item Generic Total Return Swap and Contract For Difference framework, see Example 46,
361+
referencing Bonds, Forward Bonds, Convertible Bonds, CBOs,
362+
Equity and Equity Option positions, or any combination of derivatives covered in ORE
363+
\item Composite Trade, composites of any ORE trade types, see Example 47
364+
\item Convertible Bond and Asset Swapped Convertible Option Transaction (ASCOT), see Example 48
365+
\end{itemize}
355366
including related models and pricing engines
356-
\item optimize performance for the analytical Commodity Swaption engine
357-
\item add missing FxIndex registrations in Commodity APO and Commodity Indexed Average Cashflows
358-
\item include leg NPVs in additional results of CDS products
359-
\item fix LGM Swaption pricing for cases where fixing date < exercise date
367+
\item Support separate fixing and payment date schedules on floating legs
368+
\item Support notional changes within calculation periods on fixed and floating legs
360369
\end{itemize}
361370

362371
\bigskip
363372
MARKETS \& TERM STRUCTURES
364373

365374
\begin{itemize}
366-
\item fix shifted lognormal Swaption vol surface (SwaptionVolCubeWithATM, add missing shift)
375+
\item Add a new yield curve segment "Bond Yield Shifted", see Example 49
367376
\end{itemize}
368377

369378
\bigskip
370379
ANALYTICS
371380

372381
\begin{itemize}
373-
\item integrate American Monte Carlo simulation, see the {\bf new Example 39}
374-
\item add Par Sensitivity Analysis, see the {\bf new Example 40}
375-
\item add more parametric VaR types (delta-gamma normal, delta-gamma Saddlepoint)
376-
\item support multi-threading in sensitivity analysis
377-
\item support multi-threading in exposure simulation, see the {\bf new Example 41}
378-
\item fix exposure/XVA analytics with simulation of fixings for ceased IBOR indices
382+
\item Add a proof-of-concept Credit Portfolio Model to construct portfolio loss distributions due to
383+
credit migration, credit default and market moves across cash products and derivatives, see Example 43
384+
\item Add the ISDA Standard Initial Margin Model (SIMM), all versions since inception, see Example 44
385+
\item Fix the Windows builds with QL\_ENABLE\_SESSIONS=ON (to enable ORE multi-threading on Windows),
386+
thanks to Steven van Haaren for reporting this issue and triggering this fix.
379387
\end{itemize}
380388

381389
\bigskip
382390
TESTS
383391

384392
\begin{itemize}
385-
\item QuantExt: 263 test functions (vs 242 in the previous release)
386-
\item OREData: 203 test functions (vs. 199 in the previous release)
387-
\item OREAnalytics: 68 test functions (vs. 66 in the previous release)
393+
\item QuantExt: 267 test functions (vs 263 in the previous release)
394+
\item OREData: 206 test functions (vs. 203 in the previous release)
395+
\item OREAnalytics: 78 test functions (vs. 68 in the previous release)
388396
\end{itemize}
389397

390398
\bigskip
391399
DOCUMENTATION
392400

393401
\begin{itemize}
394-
\item The user guide has grown from 440 to 486 pages, mainly due to the
395-
migration of Credit derivative instruments into ORE, as well as new examples 39 - 42.
402+
\item The user guide has grown from 486 to 536 pages, due to the migration of Hybrid instruments
403+
into ORE, new analytics and examples 43ff.
404+
\item A separate guide for the Credit Portfolio Model in ORE has been added,
405+
see Docs/UserGuide/creditmodel.tex
396406
\end{itemize}
397407

398408
\bigskip
399409
LANGUAGE BINDINGS
400410

401411
\begin{itemize}
402-
\item Upgrade to QuantLib-SWIG-1.29
403-
\item The SWIG wrapper has been extended to provide access to ORE input
404-
construction in memory and to query in-memory results (reports etc), in line
405-
with the refactoring mentioned below. See the new {\bf Example 42}.
406-
\item To facilitate access to ORE Python, we are providing Python wheels for various
407-
OS types and Python versions starting with this release, thanks to Eric Ehlers's
408-
effort and Luigi Ballabio's support to get in up and running using github actions.
409-
Build instructions for the Python wheels are included in this user guide, see sections
410-
\ref{sec:oreswig}, \ref{sec:win_wheel}, \ref{sec:nix_wheel}.
411-
See the new {\bf Example 42} on how to use the published wheels.
412+
\item Upgrade to QuantLib-SWIG-v1.30
413+
\item Added four of the Jupyter notebooks presented at the Acadia Quant Summit (London
414+
see oreswig/OREAnalytics-SWIG/Python/Examples/Notebooks
412415
\end{itemize}
413416

414417
\bigskip
415418
OTHER
416419

417420
\begin{itemize}
418-
\item Upgrade to QuantLib-1.29
419-
\item Refactor the serialization of NPV cube and market cube (aggregation scenario data)
420-
\item Refactor OREAnalytics/orea/app by separating input construction from processing
421-
and persisting results. This is to faciliate re-using the processing element
422-
(analyticsManager->runAnalytics(...)) in different applications, a command line
423-
application such as ore[.exe] that reads/writes from/to files, an ORE Python wrapper
424-
that receives input and provides results in memory (see language bindings above),
425-
or a REST service built around ORE. Results (reports, cubes etc) are stored in
426-
memory and only saved to files on demand. Inputs for the ORE processor can be
427-
assembled in memory, or read from files.
428-
\end{itemize}
421+
\item Upgrade to QuantLib-v1.30
422+
\end{itemize}
429423

430424
%========================================================
431425
\section{ORE Data Flow}\label{sec:process}
@@ -6018,7 +6012,6 @@ \subsection{Calendar Adjustment: {\tt calendaradjustment.xml}}\label{sec:calenda
60186012
\input{tradedata/cbodata.tex}
60196013

60206014
\input{tradedata/compositetrade}
6021-
\input{tradedata/totalReturnSwap}
60226015

60236016
\input{tradedata/creditdefaultswap}
60246017
\input{tradedata/indexcds}
@@ -6035,6 +6028,8 @@ \subsection{Calendar Adjustment: {\tt calendaradjustment.xml}}\label{sec:calenda
60356028
\input{tradedata/commodityvarianceswap}
60366029
\input{tradedata/commodityposition}
60376030

6031+
\input{tradedata/totalReturnSwap}
6032+
60386033
%\include{tradecomponents}
60396034
\input{tradecomponents/tradecomponentsintro}
60406035
\input{tradecomponents/optiondata}

Examples/ore_examples_helper.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ def _locate_ore_exe(self):
4949
self.ore_exe = "..\..\\..\\build\\ore\\App\\ore.exe"
5050
elif os.path.isfile("..\\..\\..\\build\\ore\\App\\RelWithDebInfo\\ore.exe"):
5151
self.ore_exe = "..\\..\\..\\build\\ore\\App\\RelWithDebInfo\\ore.exe"
52+
elif os.path.isfile("..\\..\\build\\App\\Release\\ore.exe"):
53+
self.ore_exe = "..\\..\\build\\App\\Release\\ore.exe"
5254
else:
5355
print_on_console("ORE executable not found.")
5456
quit()

0 commit comments

Comments
 (0)