| What the name means | "Generic Rate Convert"
| | Syntax | RateConvert ( FromDatesInt, IntSimple, FromDate, ToDate, [DayCountSource], [DayCountTarget], PrdsSource, PrdsTarget, [MarginOpt] )
| | Description | Converts an Interest Rate from one basis of compounding to another, taking into account possible irregular compounding periods.
| | See Also | SimpleToSimpleX (FromDatesInt, IntSimple, FromDate, ToDate, [DayCountSource], [DayCountTarget], PrdsSource, PrdsTarget)
|
| Variable | Type or Value | Description |
Inputs: (9)
|
| 1
| FromDatesInt
| Range Of Dates
| The dates from which the interest rates are effective.
|
| 2
| IntSimple
| Range of Floats (numbers)
| One or more annual interest rates where the rates are simple interest, not AER ie interest paid=fraction of year x simple interest rate
|
| 3
| FromDate
| Date
| The date from which a period of time starts
|
| 4
| ToDate
| Date
| The date up until which a period of time runs
|
| 5
| DayCountSource
| Float (Optional)
| The Daycount basis of the interest rate you want to convert FROM. Either a single number denoting the DayCount method, or a number in the form ww.ss where ww is the daycount of whole periods and ss applies to stub periods. See Using Daycount.
(Optional)
|
| 6
| DayCountTarget
| Float (Optional)
| The DayCount basis of the interest rate you want to convert TO. Either a single number denoting the DayCount method, or a number in the form ww.ss where ww is the daycount of whole periods and ss applies to stub periods. See Using Daycount.
(Optional)
|
| 7
| PrdsSource
| Annual Sequence
| The Periods sequence of the interest rate you want to convert FROM.
|
| 8
| PrdsTarget
| Annual Sequence
| The Periods sequence of the interest rate you want to convert TO.
|
| 9
| MarginOpt
| Float (Optional)
| Optional Margin, or Spread, to be applied over and above the simple interest rate. If MarginOpt is not zero, then Total interest rate = Interest Rate + Margin. Note however that Interest on Interest is charged at Interest Rate only, ie no Margin added. If you want Interest on Interest to include the margin, then build the margin into the Interest Rate and omit MarginOpt.
(Optional)
|
Output:
|
| Return Value
| Result
| Float
| The result of the function, expressed as a number.
|
Defaults and Values The variable(s) of this function have certain defaults and/or switch values associated with them. Click here to see more. | Type of Value | Value | Description | Detail | | Default(s)
| DayCountSource | 5 | Decimal Year (ACTM/12): ActualMonths / 12
| | DayCountTarget | 5 | Decimal Year (ACTM/12): ActualMonths / 12
| | PrdsSource | -4 | Quarterly in arrear, calendar quarters (1st April for Jan-March accrual, 1st Jul payment for April-June accrual, etc)
| | PrdsTarget | -4 | Quarterly in arrear, calendar quarters (1st April for Jan-March accrual, 1st Jul payment for April-June accrual, etc) | | Switches
| DayCountSource | 0 | 30/360 BMA (Bond Market Association, formerly the PSA)
| | | 1 | ACT/ACT (365 or 366)
| | | 2 | ACT/360: ActualDaysInPeriod / 360
| | | 3 | ACT/365: ActualDaysInPeriod / 365
| | | 4 | 30E/360: Also known as European 30/360. Standard bond literature definition.
| | | 5 | Decimal Year (ACTM/12): ActualMonths / 12
| | | 6 | ACT/ACT (in period)
| | | 7 | 30/360 BMA (Bond Market Association, formerly the PSA)
| | | 8 | ACT (Non Leap)/365: Same as ACT/365 but ignoring Feb 29
| | | 9 | 30/365: Standard bond literature definition (same as 30/360 but with 365 denominator)
| | | 10 | 30/360 ISDA
| | | 11 | 30/360 ISDA + Feb Adj
| | | 12 | ISDA + Feb EOM Adj
| | | 13 | Brazilian ACTBD/252
| | DayCountTarget | 0 | 30/360 BMA (Bond Market Association, formerly the PSA)
| | | 1 | ACT/ACT (365 or 366)
| | | 2 | ACT/360: ActualDaysInPeriod / 360
| | | 3 | ACT/365: ActualDaysInPeriod / 365
| | | 4 | 30E/360: Also known as European 30/360. Standard bond literature definition.
| | | 5 | Decimal Year (ACTM/12): ActualMonths / 12
| | | 6 | ACT/ACT (in period)
| | | 7 | 30/360 BMA (Bond Market Association, formerly the PSA)
| | | 8 | ACT (Non Leap)/365: Same as ACT/365 but ignoring Feb 29
| | | 9 | 30/365: Standard bond literature definition (same as 30/360 but with 365 denominator)
| | | 10 | 30/360 ISDA
| | | 11 | 30/360 ISDA + Feb Adj
| | | 12 | ISDA + Feb EOM Adj
| | | 13 | Brazilian ACTBD/252
| | | -12 | Monthly in arrear, calendar months {1st Jan payment for Dec accrual, Feb 1 payment for Jan accrual etc}
| | | -4 | Quarterly in arrear, calendar quarters (1st April for Jan-March accrual, 1st Jul payment for April-June accrual, etc)
| | | -2 | 6 monthly in arrears (1st Jan payment for Jul-Dec accrual,1st July payment for Jan-June accrual )
| | | -1 | Annually In Arrear 1st Jan payment for Jul-Dec accrual
| | | 14 | Continuous (could be thought of as daily)
| | | -12 | Monthly in arrear, calendar months {1st Jan payment for Dec accrual, Feb 1 payment for Jan accrual etc}
| | | -4 | Quarterly in arrear, calendar quarters (1st April for Jan-March accrual, 1st Jul payment for April-June accrual, etc)
| | | -2 | 6 monthly in arrears (1st Jan payment for Jul-Dec accrual,1st July payment for Jan-June accrual )
| | | -1 | Annually In Arrear 1st Jan payment for Jul-Dec accrual
| | | 14 | Continuous (could be thought of as daily) |
Range Handling and Constraints This function has range inputs that are subject to range handling procedures to help reduce input errors and increase flexibility and speed. Click here to see more. The variables affected are as follows (in order): | Variable | Type of Handling | Explanation | | FromDatesInt IntSimple | Date Size | The first (date) range will be shortened to the first non-zero element, eliminating trailing zeros. If the second range is then longer then it will be shortened to the size of the date range. If the second range is shorter it will be padded by zeros. If both the date and the corresponding value are zero at any location in the range, the range is compacted and shortened. | | FromDatesInt IntSimple | Check Same Length | The length of these ranges (after any previous range handling adjustments and including any blanks or zeros) must be the same length or the function will report an error. |
Why we need this function | - We need this function because sometimes when you are compounding from one interest basis (e.g. quarterly, ACT/365) to another (e.g. semi-annual, 30/360), you can't do it using the normal algebraic formulae. Often you actually can't do it without working out the interest in detail for the exact period you are looking at. This function effectively works out the interest on two completely different compounding regimes, and gives the interest rate that makes the Target regime equivalent to the first.
- Furthermore, where you have a separate margin that is needed for compounding the balance but where you don't want to compound interest on interest with this margin, the interest calculation has another step in it as the interest and interest on interest is compounded separately.
- RateConvert is the only generic way to accurately convert a wide range of interest rate types from one basis to another.
| Methodology | - RateConvert is a highly generic function for converting any type of interest rate to any other.
- It uses proper DayCount and Period definition variables to define both the interest rate you are converting from (the Source) and that you are converting to (the Target)
- It returns the interest rate applicable to DayCountTarget, ŘPeriodsTargetŘ and ŘIntRatesSimpleŘ, between FromDate and ToDate.
- The optional MarginOpt variable is to determine how interest on interest is calculated. If you use MarginOpt, this margin is added to ŘIntRatesSimpleŘ to determine the interest, but the interest on interest is only compounded at ŘIntRatesSimpleŘ, without adding any extra margin.
| Discussion | Converting from one interest rate basis to another can be extremely complex. For example, many functions in this family deal with the simple case where an interest rate is being converted from a simple interest rate applied at periodic intervals, to an annually in arrears AER (annual equivalent rate) interest rate. These other functions use annuity formulae of the kind (1+r/4)^m-1. These annuity formulae are generalisations and are not accurate when you have specific interest payment dates that may not be at exactly equal intervals, or when you have some of the more exotic daycount conventions.
This function is truly generic, but you need to understand what its doing.
- First, it calculates the interest between FromDate and ToDate on a example balance of $1000 using ŘIntRatesSimpleŘ and the 'Source' parameters. This is simple enough (it actually uses Con).
- If you use MarginOpt, the interest rate on the balance is (IntRate+MarginOpt) and the interest on interest is at IntRate.
- Then, it takes a guess at an interest rate for Target (ie the result), and calculates the interest as above.
- The two amounts of interest are different because the guessed rate is probably wrong. The correct interest rate is determined simply by saying: Result=IntRateGuess*IntSource/IntTarget.
| Question | In what circumstances do you need to specify MarginOpt?
Answer: Say you have a semi-annual rate on a bond that has swap associated with it that resets of a quarterly reference rate (e.g. 3 month LIBOR). You want to convert from a quarterly rate to a semi-annual rate, which involves compounding 2 quarters to make one semi-annual. But whilst you want to compound the balance of the swap at (reference rate+margin), you only want to compound the interest at the time value of money, ie the reference rate. In this case the interest rate you set is the quarterly reference rate, and you set the margin separately. See the example for more information. |
Examples | - Preview of the RateConvert example.
- The above spreadsheet can be accessed from the Quick Reference (on the Business Functions menu), on the Examples menu, or in the Business Functions\Component Examples directory
|
|