Stress tests

From Flametree Technologies
Jump to navigation Jump to search

‘Nothing stings us so bitterly as the loss of money.’


'Riches do not exhilarate us so much with their possession as they torment us with their loss.'


The FIA stress test module

The Flametree STM (Stress Test Module) allows the user to define a set of movements in the yield curve over a given interval and to measure the resulting return that will occur in a portfolio, and its benchmark if supplied, over that interval. The Stress Test module therefore allows the user to examine a range of ‘what-if’ scenarios and to identify situations that may result in an unacceptable loss in the future.

In addition to the overall gain or loss over the interval, the STM also decomposes these returns by source of risk in the underlying portfolio, in the same way as an attribution report.

If you are already using FIA to generate attribution analyses on a set of managed portfolios, you will find the production of stress test reports very straightforward. The only additional steps required are:

  • Set up a stress test file, containing the scenarios you wish to model;
  • Add a single line to your configuration file.

The stress test file can contain a standard set of stress tests, a set of historical situations, or a mixture of the two.

Relative returns

The STM applies the given stress tests to the portfolio and its benchmark, if supplied. In the latter case, an additional relative stress test is generated that shows the relative performance of the portfolio against its benchmark. For funds that are managed against a known benchmark, this report supplies additional information about the sources of possible future losses against the benchmark.

Calculation methodology

The STM uses exactly the same calculation as for attribution, apart from the differences outlined below. Securities that are set up to be priced from an underlying yield curve at the start and end of each calculation interval will be priced over the stress test period in the same way.

Differences from the attribution calculation

For attribution purposes, FIA assumes that a set of returns is provided for each security in the portfolio that is currently being analyzed. This allows the generation of residual returns, which measure the difference between the calculated return of the security and its actual market return. As well as ensuring that overall returns are always identical to previously published returns, this model ensures that FIA’s pricing models are accurate, since any discrepancies will appear on the program’s reports.

Since the STM examines simulated situations, there is no way to know the ‘true’ return for any scenario, and the returns must be calculated. This means that there is no residual term in the STM’s reports.

In addition, there is no term due to currency changes. The implicit assumption is that all exchange rates remain unchanged over the simulation period.

Using the STM

The STM requires exactly the same data as an attribution calculation. The only extra information required is a stress test file.

To use a stress test file and generate stress test reports, insert the following line into FIA’s configuration file:

StressFile = Filename.CSV

where FileName.CSV is the name of the stress scenario file.

If this line is omitted from the configuration file, no stress test will be run.

The attribution of returns in the stress file is specified in the configuration file in the same way as for attribution of historical returns. For instance, if you specify


in the configuration file, the STM will calculate and display returns due to coupon, pull-to-par, parallel curve shift, curve twist, curve curvature, and rolldown in the stress report.

The starting point for the calculation is taken as the last date for which data is held for the current portfolio. If a different starting date is required, this can be changed by using the EndDate parameter in the configuration file.

STM file formats

A stress test scenario file may contain any number of rows, where each row has the following format:

Column Contents Data type
1 Name of scenario String
2 Duration of scenario, in days Integer
3 Shift movement Float
4 Twist movement Float
5 Curvature movement Float


  • Each row must have exactly 5 comma-delimited entries
  • No two scenario names may be the same.
  • The duration of each scenario must be an integer greater than zero.
  • Shift, twist and curvature movements must be floating point numbers

Meaning of the terms

The name of the scenario is a label used to identify the stress test in the system’s report. We suggest keeping the name to less than 100 characters, in order to keep the stress reports at a reasonable width.

The duration of the scenario is the length of time, in days, over which the simulated change in the yield curve occurs. Durations can range from one day to weeks or months, depending on the user’s requirements.

Shift movements

The shift movement is the amount by which the yield curve makes a parallel movement across all maturities. To simulate this effect, the given movement is simply added to all points on the yield curve at its quoted maturities.

Shift movements are measured in absolute terms. For instance, a movement of 100 basis points is supplied as 0.01 in the scenario file. This is consistent with FIA’s overall approach to yields and returns.

Twist movements

The twist movement is the amount by which the yield curve is steepened or flattened, assuming that the 0-year rate is the point about which the movement occurs.

For instance, a twist movement of 50 basis points (bp) is to be applied to a curve for which the longest maturity is 20 years. In this case,

  • 0-year rates are left unchanged;
  • 10 year rates are increased by 25 bp;
  • 20 years rates are increased by 50 bp.

To simulate a twist about (say) the 10 year point, a combination of shift and twist movements should be supplied. For instance, suppose we want to increase short-term rates by 50 bp, to leave 10-year rates unchanged, and to decrease 20 year rates by 50 bp.

To do this, set the twist movement to -0.01 and the shift movement to +0.005. The net effect will be as follows:

  • 0-year rates will be increased by 50 bp due to shift and decreased by 0 bp due to twist, so net movement is +50 bp;
  • 10-year rates will be increased by 50 bp due to shift and decreased by 50 bp due to twist, so net movement is 0 bp;
  • 20-year rates will be increased by 50 bp due to shift and decreased by 100 bp due to twist, so net movement is -50 bp.

If a scenario results in one or more yields becoming negative, those rates are set to zero.

Curvature movements

The curvature movement applies a parabolic-shaped perturbation to the yield curve. This perturbation is zero at the shortest and longest maturities supplied, and greatest at the midpoint between the two. Denoting the size of the curvature movement as <math> \delta \hspace</math> and the highest maturity on the curve as <math>M</math>, the perturbed yield <math>y\left({m}\right)</math> at a maturity <math>m</math> is given by

<math>y \left( {m} \right) = \frac{{4}\delta{m}}{M}\left(1-{\frac{m}{M}}\right)</math>


<math>P</math> is price;

<math>y</math> is interpolated zero yield at the maturity date;

<math>t</math> is time to maturity, measured as a fraction of a year.

A given scenario can include any combination of shift, twist, and curvature movements over any time period.


  • At present, each scenario applies the set of curve changes to all securities. Changes in credit spreads cannot be simulated. This feature may be added in future releases.
  • If a security has a credit rating for which no zero-coupon curve is supplied, the STM will use the next available curve for pricing. For instance, a B-rated security will be priced using a AAA-curve if a AAA curve is the only curve data available.

Sample scenario files and reports

Contents of sample stress file

This table shows the contents of a typical scenario file for the stress test module. The contents is stored in a CSV file.

No curve change 30 0 0 0
+50 bp parallel shift 30 0.005 0 0
+100 bp parallel shift 30 0.01 0 0
+200 bp parallel shift 30 0.02 0 0
-50 bp parallel shift 30 -0.005 0 0
-100 bp parallel shift 30 -0.01 0 0
-200 bp parallel shift 30 -0.02 0 0
+25 bp steepening 30 0 0.0025 0
+50 bp steepening 30 0 0.005 0
+100 bp steepening 30 0 0.01 0
+200 bp steepening 30 0 0.02 0
-25 bp flattening 30 0 -0.0025 0
-50 bp flattening 30 0 -0.005 0
-100 bp flattening 30 0 -0.01 0
-200 bp flattening 30 0 -0.02 0
-100 bp twist 30 0.01 -0.02 0
+50 bp curvature 30 -0.0025 0 0.005
+100 bp curvature 30 -0.005 0 0.01
+200 bp curvature 30 -0.01 0 0.02
-50 bp curvature 30 0.0025 0 -0.005
-100 bp curvature 90 0.005 0 -0.01
-200 bp curvature 30 0.01 0 -0.02

Sample relative stress report

The modified duration of the supplied portfolio and benchmark were virtually identical, so the active return from shift movements is close to zero for all curve movements. However, the cash flow distributions showed major differences across the term structure, showing in particular that the portfolio’s active return will be adversely affected by negative flattening of the yield curve.

Relative stress test report 1.jpg

Sample absolute stress report

This report clearly shows the advantages of positive convexity. A 200 bp parallel movement in the term structure generates a 20 bp convexity gain for a downwards movement and a 59 bp convexity gain for an upwards movement.

Relative stress test report 2.jpg