Logo

RPIFACTORS

Updated 2023-10-06 21:19:58.703000

Syntax

SELECT * FROM [westclintech].[wct].[RPIFACTORS](
  <@Settlement, datetime,>
 ,<@Maturity, datetime,>
 ,<@Rate, float,>
 ,<@Price, float,>
 ,<@Yield, float,>
 ,<@Redemption, float,>
 ,<@Frequency, float,>
 ,<@Basis, nvarchar(4000),>)

Description

Use the table-valued function RPIFACTORS to return the components used in the calculation of price and yield for a bond with regular periodic coupons.

Arguments

@Basis

is the type of day count to use. @Basis is an expression of the character string data type category.

{"columns":[{"field":"@Basis","width":313},{"field":"Day count basis","width":277}],"rows":[{"@Basis":"0 , 'BOND'","Day count basis":"US (NASD) 30/360"},{"@Basis":"1 , 'ACTUAL'","Day count basis":"Actual/Actual"},{"@Basis":"2 , 'A360'","Day count basis":"Actual/360"},{"@Basis":"3 , 'A365'","Day count basis":"Actual/365"},{"@Basis":"4 , '30E/360 (ISDA)' , '30E/360' , 'ISDA' , '30E/360 ISDA' , 'EBOND'","Day count basis":"European 30/360"},{"@Basis":"5 , '30/360' , '30/360 ISDA' , 'GERMAN'","Day count basis":"30/360 ISDA"},{"@Basis":"6 , 'NL/ACT'","Day count basis":"No Leap Year/ACT"},{"@Basis":"7 , 'NL/365'","Day count basis":"No Leap Year /365"},{"@Basis":"8 , 'NL/360'","Day count basis":"No Leap Year /360"},{"@Basis":"9 , 'A/364'","Day count basis":"Actual/364"},{"@Basis":"10 , 'BOND NON-EOM'","Day count basis":"US (NASD) 30/360 non-end-of-month"},{"@Basis":"11 , 'ACTUAL NON-EOM'","Day count basis":"Actual/Actual non-end-of-month"},{"@Basis":"12 , 'A360 NON-EOM'","Day count basis":"Actual/360 non-end-of-month"},{"@Basis":"13 , 'A365 NON-EOM'","Day count basis":"Actual/365 non-end-of-month"},{"@Basis":"14 , '30E/360 NON-EOM' , '30E/360 ICMA NON-EOM' , 'EBOND NON-EOM'","Day count basis":"European 30/360 non-end-of-month"},{"@Basis":"15 , '30/360 NON-EOM' , '30/360 ISDA NON-EOM' , 'GERMAN NON-EOM'","Day count basis":"30/360 ISDA non-end-of-month"},{"@Basis":"16 , 'NL/ACT NON-EOM'","Day count basis":"No Leap Year/ACT non-end-of-month"},{"@Basis":"17 , 'NL/365 NON-EOM'","Day count basis":"No Leap Year/365 non-end-of-month"},{"@Basis":"18 , 'NL/360 NON-EOM'","Day count basis":"No Leap Year/360 non-end-of-month"},{"@Basis":"19 , 'A/364 NON-EOM'","Day count basis":"Actual/364 non-end-of-month"}]}

@Frequency

the number of coupon payments per year. For annual payments, @Frequency = 1; for semi-annual, @Frequency = 2; for quarterly, @Frequency = 4; for bimonthly @Frequency = 6; for monthly, @Frequency = 12. For bonds with @Basis = 'A/364' or 9, you can enter 364 for payments made every 52 weeks, 182 for payments made every 26 weeks, 91 for payments made every 13 weeks, 28 for payments made every 4 weeks, 14 for payments made every 2 weeks, and 7 for weekly payments. @Frequency is an expression of type float or of a type that can be implicitly converted to float.

@Rate

the security’s annual coupon rate. @Rate is an expression of type float or of a type that can be implicitly converted to float.

@Yield

the security’s annual yield. @Yld is an expression of type float or of a type that can be implicitly converted to float.

@Redemption

the security’s redemption value per 100 face value. @Redemption is an expression of type float or of a type that can be implicitly converted to float.

@Settlement

the settlement date of the security. @Settlement is an expression that returns a datetime or smalldatetime value, or a character string in date format.

@Maturity

the maturity date of the security. @Maturity is an expression that returns a datetime or smalldatetime value, or a character string in date format.

@Price

the price of the bond. @Price is an expression of type float or of a type that can be implicitly converted to float.

Return Type

table

{"columns": [{"field": "colName", "headerName": "Name", "header": "name"}, {"field": "colDatatype", "headerName": "Type", "header": "type"}, {"field": "colDesc", "headerName": "Description", "header": "description", "minWidth": 1000}], "rows": [{"id": "841a988c-e2db-4368-bf0d-44ced73debea", "colName": "Prevcoup", "colDatatype": "datetime", "colDesc": "Greatest coupon date less than or equal to the settlement date."}, {"id": "5f1d1380-76a1-49a2-8db2-b8b7dca65cd0", "colName": "NextCoup", "colDatatype": "datetime", "colDesc": "Least coupon date greater than the settlement date."}, {"id": "29023f1c-ff42-43fe-9f6f-a4114b79c367", "colName": "A", "colDatatype": "float", "colDesc": "Number of accrued days from the previous coupon date to the settlement date."}, {"id": "d038348f-c042-4840-8af1-fca4d2d5a017", "colName": "DSC", "colDatatype": "float", "colDesc": "\t Number of days from the settlement date to the next coupon date."}, {"id": "ce8b1acd-8b2f-4ddd-9576-0c310d6664cb", "colName": "E", "colDatatype": "float", "colDesc": "Number of days in the coupon period."}, {"id": "d549003e-4a77-4ceb-be12-2710fcf4cfde", "colName": "N", "colDatatype": "int", "colDesc": "Number of coupons from the settlement date to the maturity date"}, {"id": "a9638c84-21fe-4415-b844-76afb316c347", "colName": "C", "colDatatype": "float", "colDesc": "Coupon amount"}, {"id": "66222beb-c095-481e-9f56-b24a40c6dd78", "colName": "P", "colDatatype": "float", "colDesc": "Price. If @Yield is NOT NULL then P is calculated from the inputs otherwise P is the value entered in @Price."}, {"id": "4b50287e-2a89-43fb-89a6-fa58c6931cbf", "colName": "AI", "colDatatype": "float", "colDesc": "\t Accrued interest as of the settlement date."}, {"id": "2638aeef-27a5-4e04-952e-910dd4ee0ecb", "colName": "Y", "colDatatype": "float", "colDesc": "Yield. If @Yield is NOT NULL then Y is the value entered in @Yield otherwise Y is calculated from the inputs."}]}

Remarks

If @Settlement is NULL then @Settlement = GETDATE().

If @Rate is NULL then @Rate = 0.

If @Redemption is NULL then @Redemption = 100.

If @Frequency is NULL then @Frequency = 2.

If @Basis is NULL then @Basis = 0.

If @Frequency is any number other than 1, 2, 4, 6 or 12, or for @Basis = 'A/364' any number other than 1, 2, 4, 6 or 12 as well as 7, 14, 28, 91, 182 or 364 RPIFACTORS returns an error.

If @Basis invalid (see above list), RPIFACTORS returns an error.

If @Maturity is NULL then an error is returned.

DSC = E - A.

Examples

In this example we calculate the factors for a bond maturing on 2034-06-15. The settlement date is 2014-05-01, the yield is 2.76%, the coupon rate is 2.50%, the redemption value is 100, the coupon is paid twice-yearly, and the basis code is 1.

SELECT *

FROM wct.RPIFACTORS(   '2014-05-01', --@Settlement

                       '2034-06-15', --@Maturity

                       0.025,        --@Rate

                       NULL,         --@Price

                       0.0276,       --@Yield

                       100,          --@Redemption

                       2,            --@Frequency

                       1             --@Basis

                   );

This produces the following result.

{"columns":[{"field":"PrevCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"NextCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"A","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"DSC","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"E","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"N","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"C","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"P","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"AI","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Y","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"PrevCoup":"2013-12-15 00:00:00.000","NextCoup":"2014-06-15 00:00:00.000","A":"137","DSC":"45","E":"182","N":"41","C":"1.25","P":"96.0043799057024","AI":"0.940934065934066","Y":"0.0276"}]}

In this example, we calculate the factors for a zero-coupon bond.

SELECT *

FROM wct.RPIFACTORS(   '2014-05-01', --@Settlement

                       '2044-06-15', --@Maturity

                       0.00,         --@Rate

                       NULL,         --@Price

                       0.0301,       --@Yield

                       100,          --@Redemption

                       2,            --@Frequency

                       1             --@Basis

                   );

This produces the following result.

{"columns":[{"field":"PrevCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"NextCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"A","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"DSC","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"E","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"N","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"C","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"P","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"AI","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Y","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"PrevCoup":"2013-12-15 00:00:00.000","NextCoup":"2014-06-15 00:00:00.000","A":"137","DSC":"45","E":"182","N":"61","C":"0","P":"40.6583576113141","AI":"0","Y":"0.0301"}]}

In this example we calculate the factors for a bond settling in the final coupon period.

SELECT *

FROM wct.RPIFACTORS(   '2014-05-01', --@Settlement

                       '2014-07-15', --@Maturity

                       0.0190,       --@Rate

                       NULL,         --@Price

                       0.0005,       --@Yield

                       100,          --@Redemption

                       2,            --@Frequency

                       0             --@Basis

                   );

This produces the following result.

{"columns":[{"field":"PrevCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"NextCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"A","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"DSC","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"E","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"N","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"C","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"P","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"AI","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Y","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"PrevCoup":"2014-01-15 00:00:00.000","NextCoup":"2014-07-15 00:00:00.000","A":"106","DSC":"74","E":"180","N":"1","C":"0.95","P":"100.380181205142","AI":"0.559444444444444","Y":"0.0005"}]}

Here we calculate the factors for a bond maturing on the 30th of September 2034, with semi-annual coupons payable on March 30th and September 30th.

SELECT *

FROM wct.RPIFACTORS(   '2014-05-01', --@Settlement

                       '2034-09-30', --@Maturity

                       0.0257,       --@Rate

                       98.123291,    --@Price

                       NULL,         --@Yield

                       100,          --@Redemption

                       2,            --@Frequency

                       11            --@Basis

                   );

This produces the following result.

{"columns":[{"field":"PrevCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"NextCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"A","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"DSC","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"E","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"N","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"C","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"P","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"AI","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Y","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"PrevCoup":"2014-03-30 00:00:00.000","NextCoup":"2014-09-30 00:00:00.000","A":"32","DSC":"152","E":"184","N":"41","C":"1.285","P":"98.123291","AI":"0.223478260869565","Y":"0.0268999998648661"}]}

Here's an example with a negative yield.

SELECT *

FROM wct.RPIFACTORS(   '2014-05-01', --@Settlement

                       '2014-09-30', --@Maturity

                       0.0257,       --@Rate

                       101,          --@Price

                       NULL,         --@Yield

                       98,           --@Redemption

                       2,            --@Frequency

                       0             --@Basis

                   );

This produces the following result.

{"columns":[{"field":"PrevCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"NextCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"A","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"DSC","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"E","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"N","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"C","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"P","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"AI","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Y","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"PrevCoup":"2014-03-31 00:00:00.000","NextCoup":"2014-09-30 00:00:00.000","A":"31","DSC":"149","E":"180","N":"1","C":"1.285","P":"101","AI":"0.221305555555556","Y":"-0.0462187493233163"}]}

This is an example of a bond paying interest every 26 weeks.

SELECT *

FROM wct.RPIFACTORS(   '2014-10-01', --@Settlement

                       '2023-03-13', --@Maturity

                       0.1250,       --@Rate

                       NULL,         --@Price

                       0.1100,       --@Yield

                       100,          --@Redemption

                       182,          --@Frequency

                       9             --@Basis

                   );

This produces the following result.

{"columns":[{"field":"PrevCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"NextCoup","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"A","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"DSC","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"E","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"N","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"C","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"P","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"AI","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"},{"field":"Y","headerClass":"ag-right-aligned-header","cellClass":"ag-right-aligned-cell"}],"rows":[{"PrevCoup":"2014-09-22 00:00:00.000","NextCoup":"2015-03-23 00:00:00.000","A":"9","DSC":"173","E":"182","N":"17","C":"6.25","P":"108.126105929164","AI":"0.309065934065934","Y":"0.11"}]}

See Also

BONDAMORT - Bond amortization schedule using constant effective daily interest method

BONDINT - Accrued interest on a bond paying regular, periodic interest

OFCFACTORS - Returns the components of the ODDFPRICE equation

PRICE - Price of a bond paying regular periodic interest

RPI - Calculate the price and/or yield of a bond with regular periodic coupons

YIELD - Yield of a bond paying regular periodic coupon