# Williams %R

## Function Prototype

/* Williams %R */
/* Type: indicator */
/* Input arrays: 3    Options: 1    Output arrays: 1 */
/* Inputs: high, low, close */
/* Options: period */
/* Outputs: willr */
int ti_willr_start(TI_REAL const *options);
int ti_willr(int size,
TI_REAL const *const *inputs,
TI_REAL const *options,
TI_REAL *const *outputs);

## Description

This documentation is still a work in progress. It has omissions, and it probably has errors too. If you see any issues, or have any general feedback, please get in touch.

The Williams %R indicator measures momentum.

It takes one option: the period n.

The calculation is as follows:

$$max_{t} = maximum(high_{t}, high_{t-1}, ..., high_{t-n+1})$$
$$min_{t} = minimum(low_{t}, low_{t-1}, ..., low_{t-n+1})$$
$$willr_{t} = -100 \frac{max_{t} - close_{t}}{max_{t} - min_{t}}$$

## Example Usage

### Calling From C

/* Example usage of Williams %R */
/* Assuming that 'high', 'low', and 'close' are pre-loaded arrays of size 'in_size'. */
TI_REAL *inputs[] = {high, low, close};
TI_REAL options[] = {5}; /* period */
TI_REAL *outputs[1]; /* willr */

/* Determine how large the output size is for our options. */
const int out_size = in_size - ti_willr_start(options);

/* Allocate memory for output. */
outputs[0] = malloc(sizeof(TI_REAL) * out_size); assert(outputs[0] != 0); /* willr */

/* Run the actual calculation. */
const int ret = ti_willr(in_size, inputs, options, outputs);
assert(ret == TI_OKAY);


### Calling From Lua (with Tulip Chart bindings)

-- Example usage of Williams %R
willr = ti.willr(high, low, close, 5)


## Example Calculation

period = 5

datehighlowclosewillr
2005-11-0182.1581.2981.59
2005-11-0281.8980.6481.06
2005-11-0383.0381.3182.87
2005-11-0483.3082.6583.00
2005-11-0783.8583.0783.61-7.48
2005-11-0883.9083.1183.15-23.01
2005-11-0983.3382.4982.84-40.93
2005-11-1084.3082.3083.99-15.50
2005-11-1184.8484.1584.55-11.42
2005-11-1485.0084.1184.36-23.70
2005-11-1585.9084.0385.53-10.28
2005-11-1686.5885.3986.54-0.94
2005-11-1786.9885.7686.89-3.05
2005-11-1888.0087.1787.77-5.79
2005-11-2187.8787.0187.29-17.88

## Other Indicators

Previous indicator: Wilders Smoothing

Next indicator: Weighted Moving Average

Random indicator: Wilders Smoothing