MCPcopy Index your code
hub / github.com/amv-dev/yata

github.com/amv-dev/yata @v0.7.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.7.0 ↗ · + Follow
921 symbols 2,298 edges 92 files 42 documented · 5%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

YATA

Yet Another Technical Analysis library

Crates.io GitHub Workflow Status Read docs License Apache 2.0 GitHub issues Made with Rust

YaTa implements most common technical analysis methods and indicators.

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

[dependencies]
yata = "0.6"

Available moving averages:

See all

Timeseries conversion

Some commonly used methods:

See all

Some commonly used indicators:

And many others. See all

Method usage example

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

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

ema.next(&3.0);
ema.next(&6.0);

assert_eq!(ema.next(&9.0), 6.75);
assert_eq!(ema.next(&12.0), 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.method1 = "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 = macd.next(&candle);

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

Benchmarks

Methods

  • _w10 - method with window length=10
  • _w100 - method with window length=100
test bench_adi_w10                   ... bench:           7 ns/iter (+/- 0)
test bench_adi_w100                  ... bench:           7 ns/iter (+/- 0)
test bench_cci_w10                   ... bench:          16 ns/iter (+/- 0)
test bench_cci_w100                  ... bench:         133 ns/iter (+/- 8)
test bench_conv_w10                  ... bench:          23 ns/iter (+/- 2)
test bench_conv_w100                 ... bench:         197 ns/iter (+/- 0)
test bench_cross                     ... bench:           5 ns/iter (+/- 0)
test bench_cross_above               ... bench:           3 ns/iter (+/- 0)
test bench_cross_under               ... bench:           3 ns/iter (+/- 0)
test bench_dema_w10                  ... bench:           7 ns/iter (+/- 0)
test bench_dema_w100                 ... bench:           6 ns/iter (+/- 0)
test bench_derivative_w10            ... bench:           4 ns/iter (+/- 0)
test bench_derivative_w100           ... bench:           3 ns/iter (+/- 0)
test bench_dma_w10                   ... bench:           5 ns/iter (+/- 0)
test bench_dma_w100                  ... bench:           5 ns/iter (+/- 0)
test bench_ema_w10                   ... bench:           5 ns/iter (+/- 0)
test bench_ema_w100                  ... bench:           5 ns/iter (+/- 0)
test bench_heikin_ashi               ... bench:           4 ns/iter (+/- 0)
test bench_highest_index_w10         ... bench:           6 ns/iter (+/- 0)
test bench_highest_index_w100        ... bench:           6 ns/iter (+/- 0)
test bench_highest_lowest_delta_w10  ... bench:          10 ns/iter (+/- 0)
test bench_highest_lowest_delta_w100 ... bench:          10 ns/iter (+/- 0)
test bench_highest_w10               ... bench:           6 ns/iter (+/- 0)
test bench_highest_w100              ... bench:           7 ns/iter (+/- 0)
test bench_hma_w10                   ... bench:          14 ns/iter (+/- 0)
test bench_hma_w100                  ... bench:          15 ns/iter (+/- 0)
test bench_integral_w10              ... bench:           7 ns/iter (+/- 0)
test bench_integral_w100             ... bench:           7 ns/iter (+/- 0)
test bench_lin_reg_w10               ... bench:           8 ns/iter (+/- 1)
test bench_lin_reg_w100              ... bench:           8 ns/iter (+/- 0)
test bench_linear_volatility_w10     ... bench:           4 ns/iter (+/- 0)
test bench_linear_volatility_w100    ... bench:           4 ns/iter (+/- 0)
test bench_lowest_index_w10          ... bench:           6 ns/iter (+/- 0)
test bench_lowest_index_w100         ... bench:           7 ns/iter (+/- 0)
test bench_lowest_w10                ... bench:           6 ns/iter (+/- 0)
test bench_lowest_w100               ... bench:           6 ns/iter (+/- 0)
test bench_mean_abs_dev_w10          ... bench:          11 ns/iter (+/- 0)
test bench_mean_abs_dev_w100         ... bench:         123 ns/iter (+/- 4)
test bench_median_abs_dev_w10        ... bench:          31 ns/iter (+/- 7)
test bench_median_abs_dev_w100       ... bench:         190 ns/iter (+/- 8)
test bench_momentum_w10              ... bench:           3 ns/iter (+/- 0)
test bench_momentum_w100             ... bench:           3 ns/iter (+/- 0)
test bench_past_w10                  ... bench:           3 ns/iter (+/- 0)
test bench_past_w100                 ... bench:           3 ns/iter (+/- 0)
test bench_rate_of_change_w10        ... bench:           3 ns/iter (+/- 0)
test bench_rate_of_change_w100       ... bench:           3 ns/iter (+/- 0)
test bench_reverse_high_w10          ... bench:           5 ns/iter (+/- 0)
test bench_reverse_high_w100         ... bench:           5 ns/iter (+/- 0)
test bench_reverse_low_w10           ... bench:           5 ns/iter (+/- 0)
test bench_reverse_low_w100          ... bench:           5 ns/iter (+/- 0)
test bench_reverse_signal_w10        ... bench:           9 ns/iter (+/- 0)
test bench_reverse_signal_w100       ... bench:           9 ns/iter (+/- 0)
test bench_rma_w10                   ... bench:           4 ns/iter (+/- 0)
test bench_rma_w100                  ... bench:           4 ns/iter (+/- 0)
test bench_sma_w10                   ... bench:           3 ns/iter (+/- 0)
test bench_sma_w100                  ... bench:           3 ns/iter (+/- 0)
test bench_smm_w10                   ... bench:          17 ns/iter (+/- 1)
test bench_smm_w100                  ... bench:          35 ns/iter (+/- 2)
test bench_st_dev_w10                ... bench:           7 ns/iter (+/- 0)
test bench_st_dev_w100               ... bench:           7 ns/iter (+/- 0)
test bench_swma_w10                  ... bench:           8 ns/iter (+/- 0)
test bench_swma_w100                 ... bench:           8 ns/iter (+/- 0)
test bench_tema_w10                  ... bench:           8 ns/iter (+/- 0)
test bench_tema_w100                 ... bench:           7 ns/iter (+/- 0)
test bench_tma_w10                   ... bench:           5 ns/iter (+/- 0)
test bench_tma_w100                  ... bench:           5 ns/iter (+/- 1)
test bench_trima_w10                 ... bench:           5 ns/iter (+/- 0)
test bench_trima_w100                ... bench:           5 ns/iter (+/- 1)
test bench_tsi_w10                   ... bench:           9 ns/iter (+/- 0)
test bench_tsi_w100                  ... bench:          10 ns/iter (+/- 0)
test bench_vidya_w10                 ... bench:           8 ns/iter (+/- 1)
test bench_vidya_w100                ... bench:           8 ns/iter (+/- 0)
test bench_vwma_w10                  ... bench:           5 ns/iter (+/- 0)
test bench_vwma_w100                 ... bench:           5 ns/iter (+/- 0)
test bench_wma_w10                   ... bench:           6 ns/iter (+/- 1)
test bench_wma_w100                  ... bench:           6 ns/iter (+/- 0)

Indicators

``` test bench_awesome_oscillator ... bench: 36 ns/iter (+/- 0) test bench_bollinger_bands ... bench: 53 ns/iter (+/- 2) test bench_chaikin_money_flow ... bench: 22 ns/iter (+/- 0) test bench_chaikin_oscillator .

Extension points exported contracts — how you extend this code

OHLCV (Interface)
Basic trait for implementing [Open-High-Low-Close-Volume timeseries data](https://en.wikipedia.org/wiki/Candlestick_char [6 …
src/core/ohlcv.rs
Peekable (Interface)
Trait for picking the very last value for methods and indicators [32 implementers]
src/helpers/history.rs
Method (Interface)
Trait for creating methods for timeseries # Regular methods usage ### Iterate over vector's values ``` use yata::meth [47 …
src/core/method.rs
Buffered (Interface)
Trait for picking historical values for methods and indicators [5 implementers]
src/helpers/history.rs
MovingAverage (Interface)
Marker trait for any moving average Moving average is a [`Method`] which has parameters of single [`PeriodType`], input [16 …
src/core/moving_average.rs
IndicatorConfig (Interface)
Each indicator has it's own **Configuration** with parameters Each that config should implement `IndicatorConfig` trait [37 …
src/core/indicator/config.rs
IndicatorInstance (Interface)
Base trait for implementing indicators **State [37 implementers]
src/core/indicator/instance.rs

Core symbols most depended-on inside this repo

next
called by 306
src/methods/tr.rs
iter
called by 240
src/core/window.rs
assert_eq_float
called by 82
src/helpers/mod.rs
push
called by 46
src/core/window.rs
ma_period
called by 43
src/helpers/methods.rs
source
called by 42
src/core/errors.rs
first
called by 42
src/helpers/mod.rs
low
called by 42
src/indicators/mod.rs

Shape

Method 514
Function 260
Class 131
Interface 11
Enum 5

Languages

Rust100%

Modules by API surface

benches/methods.rs77 symbols
benches/indicators.rs36 symbols
src/core/window.rs34 symbols
src/methods/renko.rs23 symbols
src/methods/ema.rs23 symbols
src/core/action.rs23 symbols
src/core/ohlcv.rs17 symbols
src/methods/smm.rs16 symbols
src/methods/highest_lowest.rs15 symbols
src/core/candles.rs14 symbols
src/methods/cross.rs12 symbols
src/methods/sma.rs11 symbols

For agents

$ claude mcp add yata \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact