# Crossover

## Function Prototype

/* Crossover */
/* Type: math */
/* Input arrays: 2    Options: 0    Output arrays: 1 */
/* Inputs: real, real */
/* Options: none */
/* Outputs: crossover */
int ti_crossover_start(TI_REAL const *options);
int ti_crossover(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.

Crossover is a simple function that indicates when two input arrays crossover each other.

When given two inputs, A and B, cross returns 1 for the periods that A crosses above B.

$$crossover_{t} = \begin{cases} 1 & \mathrm{if} \; a_{t} > b_{t} \; \mathrm{and} \; a_{t-1} \leq b_{t-1} \\ 0 & \mathrm{else} \end{cases}$$

It is very commonly used by algorithmic trading formulas. An example would be generating a buy signal when a faster moving average crosses over a slower moving average.

## Example Usage

### Calling From C

/* Example usage of Crossover */
/* Assuming that 'input1' and 'input2' are pre-loaded arrays of size 'in_size'. */
TI_REAL *inputs[] = {input1, input2};
TI_REAL options[] = {}; /* No options */
TI_REAL *outputs[1]; /* crossover */

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

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

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


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

-- Example usage of Crossover
crossover = ti.crossover(input1, input2)


## Example Calculation

dateinputinput2crossover
2005-11-0181.5981.85
2005-11-0281.0681.200.00
2005-11-0382.8781.551.00
2005-11-0483.0082.910.00
2005-11-0783.6183.100.00
2005-11-0883.1583.410.00
2005-11-0982.8482.711.00
2005-11-1083.9982.700.00
2005-11-1184.5584.200.00
2005-11-1484.3684.250.00
2005-11-1585.5384.030.00
2005-11-1686.5485.450.00
2005-11-1786.8986.180.00
2005-11-1887.7788.000.00
2005-11-2187.2987.600.00

## Other Indicators

Previous indicator: Crossany

Next indicator: Chaikins Volatility

Random indicator: Vector Cosine