# Trix

## Technical Analysis Indicator: trix ## Function Prototype

/* Trix */
/* Type: indicator */
/* Input arrays: 1    Options: 1    Output arrays: 1 */
/* Inputs: real */
/* Options: period */
/* Outputs: trix */
int ti_trix_start(TI_REAL const *options);
int ti_trix(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 Trix is a momentum indicator.

It takes one parameter, the period n. It is calculated as a rate of change of a Exponential Moving Average applied three times.

The calculation is as follows:

$$m = ema(ema(ema(in)))$$
$$trix_{t} = 100 \frac{m_{t} - m_{t-1}}{m_{t}}$$

TI uses an efficient algorithm that makes only one pass through the input data.

## Example Usage

### Calling From C

/* Example usage of Trix */
/* Assuming that 'input' is a pre-loaded array of size 'in_size'. */
TI_REAL *inputs[] = {input};
TI_REAL options[] = {5}; /* period */
TI_REAL *outputs; /* trix */

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

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

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


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

-- Example usage of Trix
trix = ti.trix(input, 5)


## Example Calculation

period = 5

dateinputtrix
2005-11-0181.59
2005-11-0281.06
2005-11-0382.87
2005-11-0483.00
2005-11-0783.61
2005-11-0883.15
2005-11-0982.84
2005-11-1083.99
2005-11-1184.55
2005-11-1484.36
2005-11-1585.53
2005-11-1686.54
2005-11-1786.89
2005-11-1887.770.49
2005-11-2187.290.51

## Other Indicators

Previous indicator: Triangular Moving Average

Next indicator: Vector Truncate

Random indicator: Directional Movement