# Stochastic Momentum Index (SMI)

Created by William Blau, the Stochastic Momentum Index (SMI) oscillator is a double-smoothed variant of the Stochastic Oscillator, depicted on a scale from -100 to 100. [Discuss] ðŸ’¬

```
// C# usage syntax (standard)
IEnumerable<SmiResult> results =
quotes.GetSmi(lookbackPeriods, firstSmoothPeriods,
secondSmoothPeriods, signalPeriods);
```

## Parameters

`lookbackPeriods`

* int* - Lookback period (

`N`

) for the stochastic. Must be greater than 0. Default is 13.`firstSmoothPeriods`

* int* - First smoothing factor lookback. Must be greater than 0. Default is 25.

`secondSmoothPeriods`

* int* - Second smoothing factor lookback. Must be greater than 0. Default is 2.

`signalPeriods`

* int* - EMA of SMI lookback periods. Must be greater than 0. Default is 3.

### Historical quotes requirements

You must have at least `N+100`

periods of `quotes`

to cover the warmup and convergence periods.

`quotes`

is a collection of generic `TQuote`

historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See the Guide for more information.

## Response

```
IEnumerable<SmiResult>
```

- This method returns a time series of all available indicator values for the
`quotes`

provided. - It always returns the same number of elements as there are in the historical quotes.
- It does not return a single incremental indicator value.
- The first
`N-1`

periods will have`null`

SMI values since thereâ€™s not enough data to calculate.

âšž

Convergence warning: The first`N+100`

periods will have decreasing magnitude, convergence-related precision errors that can be as high as ~5% deviation in indicator values for earlier periods.

### SmiResult

`Date`

* DateTime* - Date from evaluated

`TQuote`

`Smi`

* double* - Stochastic Momentum Index (SMI)

`Signal`

* double* - Signal line: an Exponential Moving Average (EMA) of SMI

### Utilities

See Utilities and helpers for more information.

## Chaining

Results can be further processed on `Smi`

with additional chain-enabled indicators.

```
// example
var results = quotes
.GetSmi(..)
.GetSlope(..);
```

This indicator must be generated from `quotes`

and **cannot** be generated from results of another chain-enabled indicator or method.