Crate yata

source · []
Expand description

Yet Another Technical Analysis library

YaTa implements most common technical analysis methods and indicators

It also provides you an interface to create your own indicators.

Available moving averages:

See all

Timeseries conversion

Some commonly used methods:

See all

Some commonly used indicators:

  • Average Directional Index;
  • Awesome Oscillator;
  • Bollinger Bands;
  • Commodity Channel Index;
  • Detrended Price Oscillator;
  • Ease Of Movement;
  • Elders Force Index;
  • Envelopes;
  • Fisher Transform;
  • Ichimoku Cloud;
  • Keltner Channels;
  • Moving Average Convergence Divergence (MACD);
  • Money Flow Index;
  • Price Channel Strategy;
  • Relative Strength Index (RSI);
  • Stochastic Oscillator;
  • Trix;
  • Woodies CCI;

And many others: See Full list

Method usage example

use yata::prelude::*;
use yata::methods::EMA;

// EMA of length=3
let mut ema = EMA::new(3, &3.0).unwrap();;;

assert_eq!(, 6.75);
assert_eq!(, 9.375);

Indicator usage example

use yata::helpers::{RandomCandles, MA};
use yata::indicators::MACD;
use yata::prelude::*;

let mut candles = RandomCandles::new();
let mut macd = MACD::default();

macd.ma1 = "sma-4".parse().unwrap(); // one way of defining methods inside indicators

macd.signal = MA::TEMA(5); // another way of defining methods inside indicators

let mut macd = macd.init(&candles.first()).unwrap();

for candle in candles.take(10) {
    let result =;

    println!("{:?}", result);

Current usafe status

By default, there is no unsafe code in the crate. But you can optionally enable unsafe_performance feature throw you Cargo.toml or by --feature flag in your CLI.

usafe_performance enables some unsafe code blocks, most of them are unsafe access to a vector’s elements. For some methods it may increase performance by ~5-10%.


You are welcome to give any suggestions about new indicators and methods

Say thanks

If you like this library and you want to say thanks, you can do it also by donating to bitcoin address 1P3gTnaTK9LKSYx2nETrKe2zjP4HMkdhvK


Some useful features and definitions

Additional helping primitives

Commonly used methods for manipulating timeseries. Every method implements Method trait.

Contains main traits you need to start using this library