Frequently asked questions

From Flametree Technologies
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


What is FIA?

FIA is a computer program that uses user-supplied data about a fixed income portfolio to generate attribution reports.

How does FIA differ from other attribution products?

FIA's stand-out feature is that, although it requires very little data (basically, weights and returns for securities, and some security definition data) it generates detailed attribution reports that are as comprehensive as any system on the market. The resulting low total cost of ownership (TCO) makes deployment and use of FIA a very cost-effective solution.

This means that you can be productive with the program in hours rather than months, without compromising on security coverage, breadth of risk analysis or accuracy.


How can FIA be deployed in my organisation?

In repsonse to user requests, FIA is available via a number of routes:

  • As a locally deployed application within your IT infrastructure. In this role, FIA can be run in the same way as any other application. FIA is a command-file driven application that can easily be batched, so it is usually straightforward to incorporate attribution runs into your daily analysis process. A graphical user interface is available to configure the system and to run the application, although use of this tool is not mandatory.
  • Via a local API
  • As a cloud-based SaaS application, via our Web API. Once you have a user account, simply upload the appropriate data files to your filestore and call the program, via an API command. FIA will then run and generate a set of reports, copy them to your private filespace, and notify you that results are ready. You can then download the results at your convenience.
  • As source or object code, compiled into your local performance measurement system.

The requirements and costs of each option are different, and we encourage you to discuss your needs with us.

What operating systems does FIA support?

FIA has been developed as a cross-platform application under Linux and Windows, and has been successfully ported to MacOS and Solaris.

Do I have to change my existing performance measurement system to use FIA?

No. FIA uses existing sets of weights and returns data as a starting point for its calculations. As a result, FIA can be used in conjunction with any performance measurement system that can export security-level weights and returns in CSV format.

Do returns from FIA need to be reconciled with my back office returns?

No. FIA assumes that the data provided as a starting point is correct and definitive. These returns are then decomposed by source of risk. FIA includes extensive internal checks to ensure that aggregated attribution returns are always identical to the original returns.

Can I batch portfolio processing?

Yes. You can upload as many analysis requests as you wish, and FIA will process each one in turn.

What do I need to get started?

To generate an attribution report, all you need supply are files containing the local and base currency returns and allocation weights of the securities in your investment portfolios, and a subsidiary file describing the types and characteristics of each security held. A simple configuration file is used to describe the type of analysis and the reports required. Depending on the type of analysis used, you may also need to supply yield curve data.

What frequency of information is required?

Returns data can be used at daily, weekly, monthly, or customized intervals.

What reports can you provide?

A large number of standard reports, in numerical and graphical format, are available each time the system is run. The list will be increased over time according to what our customers tell us they need.

Output data is available in Excel and CSV. Security-level attribution returns can also be exported as a normalised table in CSV format, ready for import into a database. JSON reports are in development.


What types of attribution can FIA perform?

FIA calculates all types of attribution currently used by the marketplace – Brinson, duration/non parallel yield curve shifts, shift/twist/curvature curve movements, key rate durations, credit shifts, coupon and yield effects, pull-to-par, roll-down, inflation, exchange rate returns, and others. Please see our page on risk types for more information.

Can FIA run Brinson-Fachler attribution on portfolios of equities?

Yes. To do this,

  • ensure a benchmark has been supplied;
  • in the configuration file, set BrinsonAllocationSectors to the required classification name(s), and set the Residual term to Stock selection;

More details are provided on the asset allocation page.

What instrument classes do you cover?

Again, the list is long and complex. It is our intention to cover the vast majority of securities in use in the marketplace. If you have a security type that cannot be handled by FIA, please let us know and we will consider whether to include it in the next release.

Is FIA multi-currency?

Yes. The user supplies security returns in both local and base currency terms, and FIA uses this information to calculate returns due to changes in exchange rates.

FIA currently uses a naive currency attribution model. Future releases may include more sophisticated FX attribution algorithms, such as Karnosky-Singer.

Is it necessary to specify the base currency for a multi-currency attribution calculation?

No. Base and local currency returns are supplied in the portfolio and benchmark returns files. It is assumed that base currency returns have already been calculated with respect to an underlying base currency, so there is no need for the user to supply this information.

For reporting purposes, future releases may supply the ability to specify the base currency in the configuration file. In this case, the local and base currency returns for securities that are priced in the base currency should be identical, and a check will be made that this is so.

What is the difference between first-principles attribution and perturbational attribution?

FIA offers two ways to run attribution on a security.

The first is called first-principles attribution. In this model, all pricing is run off the yield curve using FIA’s sophisticated internal pricing, so there is no need to supply any risk numbers. This is a data-light approach and requires far less data than any other model.

The second is called perturbational attribution. Here, no pricing functions are used. Instead, the user supplies risk numbers (yield, duration) which act as a proxy for a pricing model. This approach is widely used in the marketplace but potentially requires very large amounts of data

Can FIA mix-and-match first-principles and perturbational attribution?

Yes. The two attribution models can be used at the same time in the same portfolio over different securities. In fact, the same security can be treated using different models at different times; just use the effective date function to change its type from, eg, BOND to PERTURBATIONAL BOND or vice versa.

Curvature return vs convexity return - what’s the difference?

These two terms are often confused by newcomers to the field.

Curvature return is return generated by non-parallel movements in the yield curve. Convexity return is any additional return generated by the non-linearity of the relation between yield and change.

What is sector return?

Sector return is return generated by sector curves.

A sector curve is a yield curve that applies to securities in a particular industry sector. For example, US AA-rated banking bonds define a sector curve.

Sector return is the return generated by movements in this curve, in addition to the other drivers of return in a portfolio. This is not the same as asset allocation return, which measures return due to over or underweighting particular sectors.

What is carry return, and how can it be decomposed?

Carry return is return due the passage of time. In other words, it is the return you see if nothing changed in the market, and all yield curves stayed fixed.

Carry return can typically be decomposed into coupon return (return generated by known security payments) and capital gains or losses on securities.

Carry return can also be decomposed into risk-free return and credit return. For instance, a corporate bond that is structurally identical to a treasury bond will trade at a higher yield than the treasury bond, to compensate the investor for the extra risk involved in investing in non-sovereign debt. The carry return generated by the treasury bond is the risk-free carry return, and the return generated by the spread to the risk-free return is the credit carry return.

How do I calculate return due to prepayments?

Prepayments generate two types of return.

The first is due to paydown. If an MBS is trading at a discount, then it will generate a capital gain between now and maturity, as its price has to rise to par. If a prepayment is received, you are receving part of the security’s principal back at par, not at the current discounted rate, and this gives extra return.

The second is due to changes in the distribution of cash flows. If prepayments are allowed, the future pattern of cash flows is adjusted each time a cash flow is recieved, and this will change the price of the security. Whether the adjustment is up or down depends on the pattern of cashflows, previous prepayments, the time to maturity of the security, and the level of the current yield curve.

Is rolldown a carry or a market effect?

Rolldown can be seen as either.

Rolldown return occurs even if there are no changes in the shape of the yield curve. It should therefore be classified as carry return. However, it is also generated by the shape of the yield curve. A perfectly flat curve will generate no rolldown return. Therefore, it should be classified as market return.

In practice, it is probably best to measure rolldown as an entirely separate effect and to allow the user to decide where to put it.

How do I calculate convexity return?

Convexity return is calculated automatically by FIA. However, here is how the calculation works.

Return due to market effects (changes in yield) is calculated from rmarket = −MD × δy + 2 × C × δy2

Convexity return is generated by the second term, and requires the level of the security’s convexity C and its change in yield δy. In practice, it may be easier to reprice the security at the start and end of the current interval, assuming (i) the yield curve is flat, so any return made is due to a parallel shift; (ii) the yield curve is unchanged, so return is due to all market effects. The first return is the overall market return, and the second is due to parallel shift, which is the same as the first term in the above equation. The convexity return is then given by the difference between the two returns.

This route does not require the calculation of any risk numbers.

What attribution effects does an MBS generate?

MBS and ABS are complicated by their ability to accept prepayments, their often complex cash flow patterns, and their embedded call option(s). In addition to the usual returns (carry, market, credit) they also generate return due to paydown, changes in repayment rate, and market volatility.

In addition, a simple duration measure of interest rate senstivity is often inadequate to express their price dependence on the yield curve, and a more complex key rate duration analysis may be reqiured.

Where do trading returns belong in an attribution environment?

Trading returns are generated entirely by the portfolio manager, and cannot be measured by an attribution system. Although they are a real source of return, they should measured externally and do not belong in an attribution report.

What types of yield curve decomposition are available, and what do they mean?

FIA offer the following options:

  • None. Any return due to changes in the sovereign curve is assigned to residual. This approach is appropriate for portfolios that are purely credit driven and have no exposure to changes in the sovereign curve.
  • Aggregated. Using the yield curve at the start and end of each calculation interval, each security is repriced using both curves and the return is generated. No sub-effects are calculated and a single return figure is generated. This type of decomposition is suitable for the simplest possible attribution.
  • Duration attribution. Calculates return due to (i) parallel shifts in yield curve, (ii) non-parallel shifts
  • Shift, twist, curvature attribution. Calculates return due to (i) parallel shifts in yield curve, (ii) steepening and flattening of yield curve; (iii) other types of movement in yield curve
  • Key rate duration attribution. A key rate duration analysis isolates the effects of changes at particular maturities along the yield curve, rather than measuring the effect of different types of movements. Key rate duration analysis may be appropriate when running attribution on portfolios of securities that have cash flows spread across a range of maturities, rather than having the bulk of their yield curve exposure concentrated at maturity. Securities in the former category include mortgage-backed bonds and other amortizing securities, and related securitized securities.
  • CCB attribution. CCB attribution uses the Colin-Cubilie-Bardoux algorithm to calculate the twist and curvature movements of a yield curve. This algorithm uses a conventional approach to calculating the parallel shift of a yield curve, but performs a least-squares fit of a first order polynomial to calculate the twist of the curve. This removes many of the inherent problems involved when fixed twist points are defined.
  • PCA attribution. Principal component analysis (PCA) uses a suitably large number of historical yield curve changes to determine a small set of basis functions that can be linearly combined to represent these curve movements in the most economical way.

PCA on historical yield curve data shows that curve movements fall into a number of fairly clearly defined types. Typically, the first basis function is close to a flat line, the second rises monotonically (but is seldom a straight line), and the third imposes some curvature motion. These functions are usually interpreted as shift, twist, and curvature.

However, these movements are typically slightly different from more conventional interpretations of these terms. The shift movement from a PCA is usually close, but not identical to, a parallel curve shift, and the twist movement is not uniform across all maturities. For these reasons, a PCA analysis may not directly represent investment outcomes in terms of the decisions that were taken by the trader.

FIA also offers capital attribution, in which all return from yield movements is calculated from changes in the supplied yield to maturity. In this case no detailed curve or credit returns are available, but no yield curve data need be supplied.

Can FIA calculate Karnosky-Singer currency attribution?

This functionality is planned for the next major release.

Risk numbers

Why are risk numbers used in attribution?

Historically, risk numbers have been widely used in attribution as they can be used as a proxy for a pricing function.

To see how a change in a security’s yield affects its price, one can either reprice it at two different yields and calculate its return from these two prices, or use the equation

r = y · δy − MD · δy

which gives the return in terms of the yield, the change in yield, and the modified duration. This is typically much simpler than having to provide pricing code for every security type the attribution system will have to handle.

When is it a bad idea to use risk numbers for attribution?

Unfortunately, supplying daily risk numbers can be a surprisingly difficult (and expensive) problem. It can take many man-months to set up reliable, robust feeds for risk numbers. In addition, risk numbers for some security types may not be available at all.

Attribution systems are also brittle. This means that if one risk number is wrong, it can skew the entire analysis. This applies especially to bond futures, which can have substantial weights in managed portfolios.

Many millions of dollars have been wasted on attribution systems that depend on sources of accurate, timely risk numbers. Be very careful before you commit to an attribution system that is designed on this principle.

FIA allows the use of both risk numbers and first-principles pricing, so it is not subject to this risk.

Raw pricing functions or risk numbers: which are better?

It depends. In some circumstances, raw pricing functions are ideal. All you need to supply are daily yield curve files; then all other analytics are calculated internally.

In others, you may prefer to use risk numbers for some or all of your holdings. For instance, you may have securities requiring a complex pricing model, or a requirement to use specific yields. In this case a pricing model may not be available or appropriate.

Note that both approaches can be used in the same portfolio.

Which is best: modified duration, Fisher-Weil duration, or DV01?

Modified duration, Fisher-Weil duration and DV01 are all measures of price (and hence return) sensitivity with respect to changes in the underlying yield of a security.

  • Modified duration measures the sensitivity of a security’s price to a parallel change in the yield curve.
  • Fisher-Weil duration measures the sensitivity of a security’s price to movement up or down in the entire yield curve. This can give quite different results to the returns calculated using modified duration.
  • DV01 is the dollar value of a one basis point decrease in interest rates. It is therefore similar to modified duration, but is used to measure dollar changes in the value of a portfolio, rather than its return. It is therefore of limited use in attribution.

Of the three, modified duration should always be used for attribution.

Where and why should I use key rate durations?

Only when you really need to.

Key rate durations measure the effect on a security’s yield of a change at a particular maturity. To measure the sensitivity of a security’s price to movements at ten different maturities on the yield curve requires ten values, for each security, for each date. The data requirements for KRD attribution can therefore become overwhelming.

FIA performs KRD attribution by perturbing the underlying risk-free yield curve, and repricing each security after each curve movement. The program can therefore generate detailed KRD reports without any additional data.

Yield curves

Can I mix yield curve types in the same analysis?

Yes. You may want to do this if, for example, you have some securities that are priced using a par curve, and others that use a zero curve. FIA allows you to assign yield curves on a per-security basis, so it is straightforward to mix and match.

You can even change the yield curve a security uses over time, using FIA’s effective date functionality.

Par curves or zero curves - does it matter which ones I use?

It depends on the attribution model.

For first-principles attribution, FIA prices secuurities using discount rates read off each security’s yield curve. In this case, only a zero curves will generate correct prices.

For perturbational attribution, one can use either as the yield curve is only used to measure changes in yield. At any given maturity, changes in the par curve are usually close to changes in the zero curve, so it makes little difference which you use.

What is the right way to measure parallel shift?

Despite its importance in attribution, there is no single standard way to measure parallel shift of a yield curve. Some widely used techniques are

(i) Measuring the movement in the curve at a given maturity, and setting that change to be the parallel movement;

(ii) Measuring the movement in the curve at the benchmark’s maturity, and setting that change to be the parallel movement;

(iii) Forming an average of the curve’s level at each sample point, and taking the difference over time;

(iv) Calculating the area under the curve, dividing by the longest maturity, then taking the difference over time;

(v) Selecting part of the curve such as maturities longer than 1 year, forming an average of these rates, and taking the difference over time.

Each of these has advantages and disadvantages. For instance, (iii) might seem the ‘obvious’ way of measuring changes in the overall level of the curve, but in practice yield curves tend to be more heavily sampled at lower maturities, and so this method over-weights shorter maturities at the expense of longer maturities.

What is the longest maturity a yield curve should measure?

As far as there are market movements.

It depends on the market to be modelled. For instance, there are relatively few European corporate bonds with a maturity of more than 10 years, so a yield curve to model these assets probably does not need to be specified past this maturity, and any longer yields can just be set to the 10 year yield - so the part of the curve past this points is flat.

On the other hand, the UK has issued 50 year gilts, so the UK risk-free curve needs to be specified out to at least 50 years. If the curve is only supplied out to 30 years, and there is significant market activity past this point, then the attribution analysis may miss some important activity. (We have seen this happen).

What is the shortest maturity a yield curve should measure?

For the bulk of fixed income portfolios, curve levels at maturities less than six months or so are unlikely to have much impact on the overall return. However, if you are storing cash rates or short term reference rates as part of the yield curve, then this data will be stored at shorter maturities.

What is sector curve allocation and sector curve selection?

Consider a portfolio that generates part of its return from credit spread.

For each security, the manager assigns a sector curve. The same sector curve can apply to more than one security.

The change in the security’s credit spread (the difference between the market yield and the risk-free yield) can now be broken down into two changes:

  • Change in the sector curve for the current security
  • Change in the spread between the security’s yield and the sector curve

The first effect generates sector curve allocation return, and the second generates sector curve selection return.

Sector curve allocation returns indicates the return generated by investing in a particular sector, since it measures the return of that sector’s curve as a whole.

The second effect measures the manager’s skill at picking individual stocks that outperformed their sector.

Note that these returns are entirely different to asset allocation and stock selection returns in the Brinson model, despite the superficial resemblance in terminology.

What is country curve attribution?

In some circumstances a currency may have multiple yield curves that are equivalent in status. A common example is the existence of sovereign yield curves for each country in the Euro zone. Although they all share the same base currency, they have distinct yield curves and are not all rated AAA. Country curve attribution measures the return generated by changes in the spread between these curves.

Security modelling

Can I define my own pricing functions to be used in FIA?

Yes. See the sections on OpenPricing.

Can I define my own risk functions to be used in FIA?

Yes. See the sections on OpenRisk.

This need might arise if, for instance, mortality derivatives include a new type of risk (mortality distributions) that is not included in any of the standard risk approaches.

If you set up a 'Mortality' source of return, this will appear on your attribution reports in the same way as all other portfolio risks.

Can I mix and match pricing models?

Yes. You can use different pricing functions for the same types of security. You can even change the way a security is treated over time by using the effective data functionality.

Why should I expect residuals from futures contracts?

Futures contracts always generate larger residuals than one might expect given their apparent simplicity and liquidity.

How does FIA handle changes in the CTD (cheapest to deliver) bond for a futures contract?

By using the effective date fuctionality.

The cheapest-to-deliver bond for a bond futures contract changes over time. If the CTD bond has changed during the lifetime of a contract, simply change the maturity date and coupon of the futures instrument at the appropriate effective date to match the updated CTD bond.

Does FIA need cash offsets to model interest rate futures?

Some performance systems can only accurately model an interest rate future if a cash holding equal and opposite to the market exposure of the underlying bond is included in the portfolio holding. This allows the system to model the zero effective exposure of the futures contract and to treat the future as an equivalent holding of the CTD (Cheapest To Deliver) bond for that future (but note the comments below on carry return for futures).

FIA allows futures contracts to be modelled with or without cash offsets, depending on how the portfolio holdings data is supplied.

How does one calculate carry return on a futures contract?

A bond futures contract is treated slightly differently to a bond. The carry return is adjusted by subtracting the current repo rate from the yield to maturity of the underlying CTD bond, to reflect the financing costs of the futures contract.

How does FIA treat Australian and New Zealand bond futures?

The Australian and New Zealand markets treat futures on bonds slightly differently to other countries. Since the maturity of the underlying bond is always a constant, set interval, there is no carry return from this asset class. The return of an Australian or New Zealand bond future is therefore given by

−MD × δy

and FIA treats these securities as a special case.

How do I set up a vanilla interest rate swap?

An interest rate swap can be modelled as a combination of a bond and an FRN, where the face value of the FRN is equal and opposite to that of the bond.

In FIA, the options are as follows:

  • Set up the swap as a long bond holding and a short FRN holding. The swap’s two legs can either be regarded as part of the portfolio, or they can be placed in a subportfolio that has the name of the swap. The swap’s exposure and attribution returns then be shown as a single instrument in the portfolio’s attribution report. This is the most accurate way to model a swap.
  • Set up the swap as a single-leg security. This may be appropriate for cases where only the maturity date and fixed coupon of the swap are available. In this case, model the swap as a bond and assign its residuals to one of its existing return categories such as ’duration’. This is not particularly accurate but will at least assign the swap’s return to where you expect it.

How do I set up a total return swap?

A total return swap exchanges the total return on an asset for a set of periodic cash flows, either fixed or floating.

The treatment of the swap depends on the nature of the underlying asset. If it is an equity (which generates cash flows plus capital gains or losses) then the reference leg should be set up as type EQUITY, with return given by the total return of the asset. If it is a bond, then the TRS may be set up as a vanilla interest rate swap, but the extra return generated by the bond’s coupons may be placed in a special ’TRS excess’ residual category.

How do I set up a currency swap?

A currency swap exchanges principal and interest for a bond in one currency for a bond in another. To set up a currency swap, use two bonds in different currencies with the same maturity date and equal but opposite face values.

How do I set up a forward contract?

In attribution, a forward contract usually means an FX contract which is used for hedging. Such a forward can be modelled as two bank bills with the same maturity dates and equal but opposite face values.

How does one run attribution on an inflation linked bond?

Inflation-linked (or IL) bonds differ from vanilla bonds in two vital respects:

  • Their coupons and principal are inflation-indexed
  • Their cash flows should be discounted using the real yield curve, not the zero curve.

For an attribution system, this requires that a separate real yield curve be provided for this asset types. In addition, historical values of the relevant CPI index must also be supplied so that the daily return due to inflation indexation can be calculated, in addition to returns from carry, market and credit (if appropriate).

FIA allows real yield curves to be stored and used in just the same ways as ordinary par and zero curves. Periodic returns are also stored as part of the security definition for inflation-linked securities, and this can be updated at monthly or quarterly intervals as the inflation index changes using FIA’s effective date functionality.

Why does a zero-coupon bond show time return but no accrued interest?

Accrued interest is only generated by coupons, so is never generated by a zero coupon bond. On the other hand, zero coupon bonds are always sold at a discount, so as time passes and maturity approaches their price will rise, generating return.

What’s an easy way to model a callable bond?

Callable bonds can be awkward to model in an attribution framework, because their maturity date is not known in advance. This makes it difficult to model their duration and hence their interest rate sensitivity.

In practice, it is usually fairly clear whether a bond is due to be called. If so, the maturity date should be set to the next call date. Any residual return can then be written to a custom ’Optionality’ return bucket.

Does a CDS have interest rate risk?

Yes, but not very much.

By far the largest return for a CDS is due to changes in the credit rating of the related security, which is usually assigned to credit return. A CDS usually involves a series of relatively small periodic payments over the security’s lifetime to pay for the implied insurance provided. In principle these payments should be discounted at the prevailing rate and included in the calculation of the CDS’s return. In practice, this return is usually so small it can be ignored.

How should a CDS be modelled in an attribution framework?

By far the easiest way is to assign all its return to credit, and this is what FIA does.

How should an FRN be handled in an attribution framework?

Unlike a vanilla bond, an FRN has two interest rate sensitivities: an interest rate duration and a spread duration.

Of the two, interest rate duration contributes very little return. This is because, as interest rates change, the FRN’s coupon is modified so that any return made or lost by such changes is compensated. The net effect is that the price and return of the FRN is relatively insensitive to risk-free curve movements.

The two main drivers of an FRN’s return are its yield (which is driven by coupon payments) and changes in its credit-worthiness. The FRN’s price sensitivity to changes in the credit spread is measured by the spread duration.

However, this quantity may not be available on a daily basis, so the return of the FRN may be approximated by firstly calcuating its yield return, and then assigning the rest of its return to credit spread.


How do I set up a configuration file?

A configuration file is a Windows INI file that allows you to set up a virtually unlimited number of options.

The configuration file can be set up and modified in the Flametree GUI (graphical user interface).

Alternatively, if you want to run FIA from the command line, you can edit configuration files using any editor, such as Notepad.

What data is in a security definition file?

Options that set the type of attribution calculation to be performed, the reports to be generated, the format of the reports, data formats, optional start and end dates, and other miscellaneous options that are used to set up the attribution calculation.

What data is in a portfolio file?

Weights and returns (base and local currency) for a portfolio. These can be supplied at daily, weekly, monthly or any other frequency.

Note that the weights and returns apply at the end of each period. For each security, an empty record must be provided at the start of each calculation period to tell the system the length of the first calculation period. For this empty record, only the date is used, so weights and returns can be set to zero. On any given day, the sum-product of the weights and base currency returns must equal the overall return of the portfolio.

What data is in a benchmark file?

Exactly the same information as the portfolio file, and in the same format, but for the benchmark.

What data is in a yield curve file?

Data for a AAA (risk-free) curve, at a given set of dates, for at least three maturity points. Data on other curves can also be included, for instance sector curves or curves with lower credit ratings.

There are no constraints placed on the tenor points at which yield curves are supplied. Their number and values can vary from day to day. This is particularly useful if the user is calculating yield curves from a set of benchmark yields, whose maturity and number will vary from day to day.

Can FIA calculate return?

No, but we have utilities that do. Please contact us for more information.

Does FIA need FX rates?

No, but it can use them.

From the supplied local and base currency returns, the program calculates a set of implied exchange rates, and uses these for currency attribution.

These rates may be overridden with a set of user-supplied rates if (for example) no local currency returns are available. In this case, FIA will calculate local currency returns using these FX rates. See the documentation for the FXFile option.

How can I automate yield curve production?

FIA’s yield curve format is designed to be as simple and flexible as possible. For instance, there is no need to supply curve data at preset maturity points; the program will work with yields at whatever maturities are supplied.

Flametree can help with yield curve data in additional ways:

  • We supply command-line utilities that build risk-free zero coupon yield curve files for USD, EUR, JPY, GBP and AUD (NZD in preparation). The data is downloaded from various central banks and collated into the format required by FIA.
  • We can also assist with setting up spreadsheets to download curves from data providers such as Bloomberg or Reuters. Any such usage must comply with the conditions of your Bloomberg licence.

What data is required for a particular security type?

See Setting up the security file

How can I change a security’s characteristics over time?

Use the effective date.

Each security has at least one entry in the security definition file, and the effective date field can be left blank if the security’s characteristics are unchanged.

If something does change (for instance, a credit rating, or a maturity date), add a second record for the security with the same identifier, but this time change the record to the new settings, and write the date of the change to the effective date field.

How do I set up nested portfolios?

Instead of supplying the name of a security in the portfolio file, supply the name of another portfolio that has been set up in the same file. The market weight is then interpreted as the fraction of that portfolio you hold. This is a very simple but powerful way to model hierarchical portfolio holdings.

For instance, suppose you manage both a managed fund called STATFUND1, and a unit trust called TRUST1. If the fund holds 50% of the unit trust, then all you need to do is to set up both funds in the same file under their own names, and to add a single line at each date the holding is active:

[Date] [STATFUND1] [TRUST1] [0.5]

I have an existing attribution application. Can I port the data into FIA?

Almost certainly. In addition to performing internal pricing, FIA can also use risk numbers for attribution in the same way as other attribution systems. If you have this data available, it is a straightforward matter to import it into FIA and use the program’s various functions and reports, and to gain the benefits of the program’s extensive functionality.

How does FIA store and read money-market reference rates within yield curve data?

Money-market reference rates (such as the cash rate, 1, 3 and 6-month LIBOR) are all short term interest rates, and may be stored as part of the appropriate risk-free yield curve for that currency. For instance, if you record the cash rate as a point on the yield curve with zero maturity, this is the rate that will be read and used for cash.

How can I verify that my data will work with the system?

FIA performs numerous checks on your data before processing begins. If you upload data files that contain format problems or other issues such as missing security definitions, the system will stop and generate a diagnostic file, indicated exactly where the problem occurred.

How much effort do I need to get started?

Very little. All you need to provide is return and allocation data for your portfolios, plus some security definition information such as maturity dates and coupon. These are delivered in comma-delimited ASCII format, and we supply numerous working examples for you to review and adapt. We even supply basic yield curve data for most markets.

Why do you use Julian dates for internal calculations?

The C language represents dates using the time_t stucture, which models dates as offsets in milliseconds from 1st January 1970. The disadvantage of this scheme is that a 32-bit representation rolls over in 2038, and many fixed income securities have maturity dates that fall after this date.

While there are workarounds for this issue, we decided to standardise on the use of Julian dates for internal calculations within FIA in order to provide the widest possible range of dates and options.

Future releases may use the Boost::DateTime library.


What reporting options does FIA support?

FIA generates reports in CSV and, in most cases, Excel formats. Reports generated include

  • Summary report, showing both absolute and relative returns by source of risk for both portfolio and benchmark (if provided)
  • Exposures by maturity bucket
  • Exposures and risk numbers of individual issues
  • Attribution returns on a day-by-day basis
  • Cumulative attribution returns on a day-by-day basis
  • Interactive reports allowing attribution reports to be decomposed by one or more partition variables, including pricing type, yield curve, credit rating, duration bucket, maturity bucket, security name, any user-defined sector variable.

This list is not final, and other reports may be added according to user demand.

Individual reports can be turned on or off via the configuration file.

How much detail should I show in attribution reports?

As much as your user requires.

It is very easy to show too much information in an attribution report, as well as too little. FIA has such a wide range of options that it can be tempting to turn on every attribution effect available. However, you should only do this if the resulting report reflects your customer’s actual needs and investment process. Showing too much information makes the results harder to interpret and can be misleading.

What are some good ways to display attribution returns?

  • Tabular reports
  • Graphs
  • Interactive spreadsheets
  • Interactive graphics, such as treemaps
  • ’Slice-and-dice’ and drill-down tools, using OLAP reporting

How can I make an attribution report shorter?

Especially where benchmarks are large, an attribution report that goes down to the security level can include a large amount of unnecessary data.

One way to reduce this unnecessary data is to roll up all data for stocks that are in the benchmark but not in the portfolio into a single ’Benchmark Holding’ line. This does not lose any essential attribution information but will result in much more compact reports.

Running FIA

How can I process a group of portfolios in batch mode?

Upload all data files specified in your configuration files to your filespace on the FIA server. Then upload all the configuration files for each run. FIA will work through each configuration file in turn, writing results and sending you notification emails as each portfolio is processed.

What IT resources do I need?

You don’t need to get your IT department involved to begin using FIA. All you need is a working copy of Python with the requests library installed, and a Web connection. If you want to start using the system in an independent proof-of-concept study, you can.

Once up and running, you will probably want to set up your in-house performance calculation system to generate a standard set of files that can be read by FIA. This is usually a straightforward task and needs only be done once.

How long does FIA take to run?

FIA is written in highly optimized C++ and is extremely fast, so most results are ready for download in a minute or less. Results of stress tests on large benchmark portfolios are available on request.

Our standard benchmark is a portfolio with 15000 bonds over a period of 22 days (1 calendar month), roughly equivalent to the Barclays Global Aggregate. On a typical development PC, this gives

  • With risk numbers provided: 4 seconds
  • First-principles: 34 seconds

The program used to generate these results is available within our standard test suite.

Why aren't my files being recognised when I upload them?

FIA's server runs under Linux, and Linux treats files names as case sensitive. For instance, under Windows the following files are identical:


But under Linux, they are treated as three separate files.

If you are seeing 'file not found' errors in your diagnostics, please check that the filenames specified in your configuration file are identical (including case) to the names of the files that you upload. For simplicity, we recommend always using either upper or lower case for file names.

Can I call FIA from my own program?

Yes. FIA's API is designed to allow the program to be embedded into other systems, if required. Flametree have wrappers available that allow FIA to be called from C++, C-Sharp, Python, and Java. Full examples are available.

Is FIA multi-core?

Yes. FIA can use as many cores as are available on your system to speed up processing. The number of cores used may be set using the n_cores setting in the configuration file.


How do I pay for the service?

Institutional accounts can be set up for monthly or quarterly billing. Discounts are offered for clients who prepay annual subscription fees. We accept cheques, money transfers, and credit cards.

What about opting out of the service?

We require 30 days notice if you decide to end using the service. We do not lock you in to long service contracts or expensive upfront costs. You are welcome to resume using the service again at a later date if your requirements change.

What length of trial period is available?

We typically offer a 30-day free trial period, during which time you can use any part of the service without limits. If you find you need a longer trial period, please contact us.

How can I try out the system?

To start a trial, please email us with your details and we will set up an account for you. We aim to provide full access to the system within 24 hours of your request.

Licencing issues

Does FIA use any open source code?

Portions of FIA use the Eigen C++ library, which is licensed under Mozilla Public License (MPL) version 2.0.

A few features of Eigen are still under the LGPL license. Non-MPL2 features have been explicitly disabled by compiling with the EIGEN_MPL2_ONLY preprocessor token defined.

FIA does not use any GPL or LPGL software.