Adjust closing stock prices for splits and cash dividends

Since R2024a

## Syntax

``TT2 = adjustedclosingprices(TT1)``
``TT2 = adjustedclosingprices(___,Name=Value)``

## Description

example

````TT2 = adjustedclosingprices(TT1)` adjusts raw closing prices for splits and cash dividends.`adjustedclosingprices` adjusts raw closing prices for stock splits by dividing by the split ratio (for example, dividing by 2 for a 2:1 split or 1.5 for a 3:2 split). `adjustedclosingprices` adjusts closing prices for cash dividends by scaling them by a dividend multiplier in which it expresses the dividend as a fraction of the last closing price preceding the ex-dividend date. To avoid negative prices, this scaling operation adheres to the Center for Research in Security Prices (CRSP) standard.```

example

````TT2 = adjustedclosingprices(___,Name=Value)` specifies options using one or more name-value arguments in addition to the input arguments in the previous syntax.```

## Examples

collapse all

This example shows how to adjust a time series of closing stock prices that includes a 2-for-1 split and pays a 0.17 cash dividend. First, you store the closing prices, split ratios, and cash dividends in timetable `TT1` and then pass them to `adjustedClosingPrices`.

Create a `timetable` (`TT1`) for a single stock. `TT1` contains raw closing prices, split ratios, and cash dividends, but `TT1` can also contain other variables such as Open, High, Low, Volume, and so on.

```dates = [(datetime(2023,2,18) + caldays(0:4)') ; datetime(2023,2,[25 26]')]; close = [100 102.79 53.12 53.01 53.10 52.20 52.22]'; split = [1 1 2 1 1 1 1]'; dividend = [0 0 0 0 0 0.17 0]'; TT1 = timetable(close,split,dividend,RowTimes=dates,VariableNames=["Close" "Split" "Dividend"])```
```TT1=7×3 timetable Time Close Split Dividend ___________ ______ _____ ________ 18-Feb-2023 100 1 0 19-Feb-2023 102.79 1 0 20-Feb-2023 53.12 2 0 21-Feb-2023 53.01 1 0 22-Feb-2023 53.1 1 0 25-Feb-2023 52.2 1 0.17 26-Feb-2023 52.22 1 0 ```

To adjust the closing stock prices for the splits and cash dividends in `TT1`, use `adjustedClosingPrices` and output the results in `TT2`.

`TT2 = adjustedClosingPrices(TT1)`
```TT2=7×1 timetable Time Adjusted_Close ___________ ______________ 18-Feb-2023 49.84 19-Feb-2023 51.23 20-Feb-2023 52.95 21-Feb-2023 52.84 22-Feb-2023 52.93 25-Feb-2023 52.2 26-Feb-2023 52.22 ```

The output timetable `TT2` has the same dates as `TT1`, but `TT2` contains only the adjusted closing prices. However, since `TT1` and `TT2` share the same dates, you can combine the data of both timetables.

`[TT1 TT2]`
```ans=7×4 timetable Time Close Split Dividend Adjusted_Close ___________ ______ _____ ________ ______________ 18-Feb-2023 100 1 0 49.84 19-Feb-2023 102.79 1 0 51.23 20-Feb-2023 53.12 2 0 52.95 21-Feb-2023 53.01 1 0 52.84 22-Feb-2023 53.1 1 0 52.93 25-Feb-2023 52.2 1 0.17 52.2 26-Feb-2023 52.22 1 0 52.22 ```

## Input Arguments

collapse all

Timetable containing the raw closing stock prices to adjust for splits and cash dividends, specified as a `timetable`.

Note

`TT1` must have datetime stamps in strictly ascending or descending order. All observations in `TT1` are associated with whole dates that you specify as datetime values but have no `HH:MM:SS` time component.

Optionally, `TT1` can also contain split ratios and cash dividends per share.

Data Types: `timetable`

### Name-Value Arguments

Specify optional pairs of arguments as `Name1=Value1,...,NameN=ValueN`, where `Name` is the argument name and `Value` is the corresponding value. Name-value arguments must appear after other arguments, but the order of the pairs does not matter.

Example: ```TT2 = adjustedClosingPrices(TT1,ClosingPriceVariable="closong_price_variable")```

Variable specification to select the raw closing price variable from `TT1`, specified as a positive scalar numeric index, a scalar variable name (string or character vector), or a logical vector with one true element.

Note

If no variable contains `"Close"`, then this function issues an error.

Data Types: `double` | `char` | `string` | `logical`

Variable specification to select the cash dividend variable from `TT1`, specified as a positive scalar numeric index, a scalar variable name (string or character vector), or a logical vector with one true element.

Note

If no variable contains `"Dividend"`, then this function does not make a dividend adjustment.

Data Types: `double` | `char` | `string` | `logical`

Variable specification to select the split ratio variable from `TT1`, specified as a positive scalar numeric index, a scalar variable name (string or character vector), or a logical vector with one true element.

Note

If no variable contains `"Split"`, then this function makes split adjustment.

Data Types: `double` | `char` | `string` | `logical`

## Output Arguments

collapse all

Timetable with the same dates as `TT1` containing adjusted closing prices associated with the raw closing prices of variable `ClosingPriceVariable`, returned as a `timetable`.

If the raw closing price variable in `TT1` contains `"Close"`, then the function obtains the adjusted closing price variable by inserting `"Adjusted_"` immediately before `"Close"`. Otherwise, the function obtains the adjusted closing price variable by prepending `"Adjusted_"` to the variable in `TT1` containing the raw closing prices. If the function makes no adjustments, it copies the raw closing prices of `TT1` to the adjusted closing prices of `TT2`. If the dates of `TT1` are in ascending or descending order, then the dates of `TT2` are in ascending or descending order, respectively.

The naming convention of the adjusted closing price variable in `TT2` is:

• If the closing price variable in `TT1` is `"XYZ_Close"` (`TT1.XYZ_Close`), then the adjusted closing price variable in `TT2` is ``` "XYZ_Adjusted_Close"``` (`TT2.XYZ_Adjusted_Close`).

• If the closing price variable in `TT1` is `"XYZ"` (`TT1.XYZ`), then the adjusted closing price variable in `TT2` is `"Adjusted_XYZ"` (`TT2.Adjusted_XYZ`).

## Version History

Introduced in R2024a