Coder Social home page Coder Social logo

yata's Introduction

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                  ... bench:          23 ns/iter (+/- 0)
test bench_chande_kroll_stop                   ... bench:          58 ns/iter (+/- 0)
test bench_chande_momentum_oscillator          ... bench:          25 ns/iter (+/- 0)
test bench_commodity_channel_index             ... bench:          38 ns/iter (+/- 0)
test bench_coppock_curve                       ... bench:          38 ns/iter (+/- 2)
test bench_detrended_price_oscillator          ... bench:          10 ns/iter (+/- 0)
test bench_ease_of_movement                    ... bench:          20 ns/iter (+/- 0)
test bench_elders_force_index                  ... bench:          17 ns/iter (+/- 1)
test bench_envelopes                           ... bench:          14 ns/iter (+/- 0)
test bench_fisher_transform                    ... bench:         125 ns/iter (+/- 13)
test bench_hull_moving_average                 ... bench:          28 ns/iter (+/- 0)
test bench_ichimoku_cloud                      ... bench:          65 ns/iter (+/- 7)
test bench_indicator_aroon                     ... bench:          46 ns/iter (+/- 12)
test bench_indicator_average_directional_index ... bench:          49 ns/iter (+/- 1)
test bench_kaufman                             ... bench:          34 ns/iter (+/- 3)
test bench_keltner_channel                     ... bench:          26 ns/iter (+/- 2)
test bench_klinger_volume_oscillator           ... bench:          40 ns/iter (+/- 1)
test bench_know_sure_thing                     ... bench:          41 ns/iter (+/- 0)
test bench_macd                                ... bench:          23 ns/iter (+/- 0)
test bench_momentum_index                      ... bench:          13 ns/iter (+/- 0)
test bench_money_flow_index                    ... bench:          59 ns/iter (+/- 12)
test bench_parabolic_sar                       ... bench:          17 ns/iter (+/- 2)
test bench_pivot_reversal_strategy             ... bench:          30 ns/iter (+/- 4)
test bench_relative_strength_index             ... bench:          35 ns/iter (+/- 1)
test bench_relative_vigor_index                ... bench:          59 ns/iter (+/- 0)
test bench_smi_ergodic_indicator               ... bench:          30 ns/iter (+/- 2)
test bench_stochastic_oscillator               ... bench:          48 ns/iter (+/- 4)
test bench_trend_strength_index                ... bench:          46 ns/iter (+/- 2)
test bench_trix                                ... bench:          32 ns/iter (+/- 10)
test bench_true_strength_index                 ... bench:          38 ns/iter (+/- 16)
test bench_woodies_cci                         ... bench:          68 ns/iter (+/- 6)

Current unsafe 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.

unsafe_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%.

Features

  • serde - enables serde crate support;
  • period_type_u16 - sets PeriodType to u16;
  • period_type_u32 - sets PeriodType to u32;
  • period_type_u64 - sets PeriodType to u64;
  • value_type_f32 - sets ValueType to f32;
  • unsafe_performance - enables optional unsafe code blocks, which may increase performance;

Rust version

YaTa library supports Rust stable except that you can't run benchmarks with it.

Suggestions

You are welcome to give any suggestions about implementing 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

yata's People

Contributors

amv-dev avatar code0x58 avatar dandxy89 avatar joelchen avatar matiu2 avatar phynalle avatar tbot-olexiyb avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.