# Technical Analysis for Rust (ta)
[](https://travis-ci.org/greyblake/ta-rs)
[](https://raw.githubusercontent.com/greyblake/ta-rs/master/LICENSE)
[](https://docs.rs/ta)
Technical analysis library for Rust.
* [Getting started](#getting-started)
* [Basic ideas](#basic-ideas)
* [List of indicators](#list-of-indicators)
* [Running benchmarks](#running-benchmarks)
* [License](#license)
* [Contributors](#contributors)
## Getting started
Add to you `Cargo.toml`:
```
[dependencies]
ta = "0.1.5"
```
Example:
```rust
use ta::indicators::ExponentialMovingAverage;
use ta::Next;
// it can return an error, when an invalid length is passed (e.g. 0)
let mut ema = ExponentialMovingAverage::new(3).unwrap();
assert_eq!(ema.next(2.0), 2.0);
assert_eq!(ema.next(5.0), 3.5);
assert_eq!(ema.next(1.0), 2.25);
assert_eq!(ema.next(6.25), 4.25);
```
See more in the examples [here](https://github.com/greyblake/ta-rs/tree/master/examples).
Check also the [documentation](https://docs.rs/ta).
## Basic ideas
A data item which represent a stock quote may implement the following traits:
* `Open`
* `High`
* `Low`
* `Close`
* `Volume`
It's not necessary to implement all of them, but it must be enough to fulfill requirements for a particular indicator.
You probably should prefer using `DataItem` unless you have reasons to implement your own structure.
Indicators typically implement the following traits:
* `Next<T>` (often `Next<f64>` and `Next<&DataItem>`) - to feed and get the next value
* `Reset` - to reset an indicator
* `Debug`
* `Display`
* `Default`
* `Clone`
## List of indicators
So far there are the following indicators available.
* Trend
* Exponential Moving Average (EMA)
* Simple Moving Average (SMA)
* Oscillators
* Relative Strength Index (RSI)
* Fast Stochastic
* Slow Stochastic
* Moving Average Convergence Divergence (MACD)
* Money Flow Index (MFI)
* Other
* Minimum
* Maximum
* True Range
* Average True Range (AR)
* Efficiency Ratio (ER)
* Bollinger Bands (BB)
* Rate of Change (ROC)
* OnBalanceVolume (OBV)
## Running benchmarks
```
cargo bench
```
## License
[MIT](https://github.com/greyblake/ta-rs/blob/master/LICENSE) © [Sergey Potapov](http://greyblake.com/)
## Contributors
- [greyblake](https://github.com/greyblake) Potapov Sergey - creator, maintainer.
- [Bartoshko](https://github.com/Bartoshko) - BollingerBands
- [shreyasdeotare](https://github.com/shreyasdeotare) Shreyas Deotare - MoneyFlowIndex, OnBalanceVolume
- [edwardycl](https://github.com/edwardycl) - StandardDeviation Implementation & More Efficient BollingerBands