Rusty-talib
Rusty-talib is a technical analysis library written in pure Rust, providing various methods for calculating technical indicators.
Features
- Provides various technical analysis tools including overlap studies, momentum indicators, volume indicators, and more.
- Allows enabling or disabling specific feature modules as needed.
Usage
To use Rusty-talib, you can add it as a dependency and select specific feature modules to enable as needed. For example:
[dependencies]
rusty-talib = { version = "0.1.0", features = ["overlap_studies"] }
Feature Modules
Rusty-talib includes the following feature modules:
Overlap Studies
| Function |
Description |
Status |
| BBANDS |
Bollinger Bands |
Pending |
| DEMA |
Double Exponential Moving Average |
Pending |
| EMA |
Exponential Moving Average |
Pending |
| HT_TRENDLINE |
Hilbert Transform - Instantaneous Trendline |
Pending |
| KAMA |
Kaufman Adaptive Moving Average |
Pending |
| MA |
Moving Average |
Done |
| MAMA |
MESA Adaptive Moving Average |
Pending |
| MAVP |
Moving average with variable period |
Pending |
| MIDPOINT |
MidPoint over period |
Pending |
| MIDPRICE |
Midpoint Price over period |
Pending |
| SAR |
Parabolic SAR |
Pending |
| SAREXT |
Parabolic SAR - Extended |
Pending |
| SMA |
Simple Moving Average |
Pending |
| T3 |
Triple Exponential Moving Average (T3) |
Pending |
| TEMA |
Triple Exponential Moving |
Pending |
Momentum Indicators
| Function |
Description |
Status |
| ADX |
Average Directional Movement Index |
Pending |
| ADXR |
Average Directional Movement Index Rating |
Pending |
| APO |
Absolute Price Oscillator |
Pending |
| AROON |
Aroon |
Pending |
| AROONOSC |
Aroon Oscillator |
Pending |
| BOP |
Balance Of Power |
Pending |
| CCI |
Commodity Channel Index |
Pending |
| CMO |
Chande Momentum Oscillator |
Pending |
| DX |
Directional Movement Index |
Pending |
| MACD |
Moving Average Convergence/Divergence |
Pending |
| MACDEXT |
MACD with controllable MA type |
Pending |
| MACDFIX |
Moving Average Convergence/Divergence Fix 12/26 |
Pending |
| MFI |
Money Flow Index |
Pending |
| MINUS_DI |
Minus Directional Indicator |
Pending |
| MINUS_DM |
Minus Directional Movement |
Pending |
| MOM |
Momentum |
Pending |
| PLUS_DI |
Plus Directional Indicator |
Pending |
| PLUS_DM |
Plus Directional Movement |
Pending |
| PPO |
Percentage Price Oscillator |
Pending |
| ROC |
Rate of change : ((price/prevPrice)-1)*100 |
Pending |
| ROCP |
Rate of change Percentage: (price-prevPrice)/prevPrice |
Pending |
| ROCR |
Rate of change ratio: (price/prevPrice) |
Pending |
| ROCR100 |
Rate of change ratio 100 scale: (price/prevPrice)*100 |
Pending |
| RSI |
Relative Strength Index |
Pending |
| STOCH |
Stochastic |
Pending |
| STOCHF |
Stochastic Fast |
Pending |
| STOCHRSI |
Stochastic Relative Strength Index |
Pending |
| TRIX |
1-day Rate-Of-Change (ROC) of a Triple Smooth EMA |
Pending |
| ULTOSC |
Ultimate Oscillator |
Pending |
| WILLR |
Williams' %R |
Pending |
Volume Indicators
| Function |
Description |
Status |
| AD |
Chaikin A/D Line |
Pending |
| ADOSC |
Chaikin A/D Oscillator |
Pending |
| OBV |
On Balance Volume |
Pending |
Volatility Indicators
| Function |
Description |
Status |
| ATR |
Average True Range |
Pending |
| NATR |
Normalized Average True Range |
Pending |
| TRANGE |
True Range |
Pending |
Price Transform
| Function |
Description |
Status |
| AVGPRICE |
Average Price |
Pending |
| MEDPRICE |
Median Price |
Pending |
| TYPPRICE |
Typical Price |
Pending |
| WCLPRICE |
Weighted Close Price |
Pending |
Cycle Indicators
| Function |
Description |
Status |
| HT_DCPERIOD |
Hilbert Transform - Dominant Cycle Period |
Pending |
| HT_DCPHASE |
Hilbert Transform - Dominant Cycle Phase |
Pending |
| HT_PHASOR |
Hilbert Transform - Phasor Components |
Pending |
| HT_SINE |
Hilbert Transform - SineWave |
Pending |
| HT_TRENDMODE |
Hilbert Transform - Trend vs Cycle Mode |
Pending |
Pattern Recognition
| Function |
Description |
Status |
| CDL2CROWS |
Two Crows |
Pending |
| CDL3BLACKCROWS |
Three Black Crows |
Pending |
| CDL3INSIDE |
Three Inside Up/Down |
Pending |
| CDL3LINESTRIKE |
Three-Line Strike |
Pending |
| CDL3OUTSIDE |
Three Outside Up/Down |
Pending |
| CDL3STARSINSOUTH |
Three Stars In The South |
Pending |
| CDL3WHITESOLDIERS |
Three Advancing White Soldiers |
Pending |
| CDLABANDONEDBABY |
Abandoned Baby |
Pending |
| CDLADVANCEBLOCK |
Advance Block |
Pending |
| CDLBELTHOLD |
Belt-hold |
Pending |
| CDLBREAKAWAY |
Breakaway |
Pending |
| CDLCLOSINGMARUBOZU |
Closing Marubozu |
Pending |
| CDLCONCEALBABYSWALL |
Concealing Baby Swallow |
Pending |
| CDLCOUNTERATTACK |
Counterattack |
Pending |
| CDLDARKCLOUDCOVER |
Dark Cloud Cover |
Pending |
| CDLDOJI |
Doji |
Pending |
| CDLDOJISTAR |
Doji Star |
Pending |
| CDLDRAGONFLYDOJI |
Dragonfly Doji |
Pending |
| CDLENGULFING |
Engulfing Pattern |
Pending |
| CDLEVENINGDOJISTAR |
Evening Doji Star |
Pending |
| CDLEVENINGSTAR |
Evening Star |
Pending |
| CDLGAPSIDESIDEWHITE |
Up/Down-gap side-by-side white lines |
Pending |
| CDLGRAVESTONEDOJI |
Gravestone Doji |
Pending |
| CDLHAMMER |
Hammer |
Pending |
| CDLHANGINGMAN |
Hanging Man |
Pending |
| CDLHARAMI |
Harami Pattern |
Pending |
| CDLHARAMICROSS |
Harami Cross Pattern |
Pending |
| CDLHIGHWAVE |
High-Wave Candle |
Pending |
| CDLHIKKAKE |
Hikkake Pattern |
Pending |
| CDLHIKKAKEMOD |
Modified Hikkake Pattern |
Pending |
| CDLHOMINGPIGEON |
Homing Pigeon |
Pending |
| CDLIDENTICAL3CROWS |
Identical Three Crows |
Pending |
| CDLINNECK |
In-Neck Pattern |
Pending |
| CDLINVERTEDHAMMER |
Inverted Hammer |
Pending |
| CDLKICKING |
Kicking |
Pending |
| CDLKICKINGBYLENGTH |
Kicking - bull/bear determined by the longer marubozu |
Pending |
| CDLLADDERBOTTOM |
Ladder Bottom |
Pending |
| CDLLONGLEGGEDDOJI |
Long Legged Doji |
Pending |
| CDLLONGLINE |
Long Line Candle |
Pending |
| CDLMARUBOZU |
Marubozu |
Pending |
| CDLMATCHINGLOW |
Matching Low |
Pending |
| CDLMATHOLD |
Mat Hold |
Pending |
| CDLMORNINGDOJISTAR |
Morning Doji Star |
Pending |
| CDLMORNINGSTAR |
Morning Star |
Pending |
| CDLONNECK |
On-Neck Pattern |
Pending |
| CDLPIERCING |
Piercing Pattern |
Pending |
| CDLRICKSHAWMAN |
Rickshaw Man |
Pending |
| CDLRISEFALL3METHODS |
Rising/Falling Three Methods |
Pending |
| CDLSEPARATINGLINES |
Separating Lines |
Pending |
| CDLSHOOTINGSTAR |
Shooting Star |
Pending |
| CDLSHORTLINE |
Short Line Candle |
Pending |
| CDLSPINNINGTOP |
Spinning Top |
Pending |
| CDLSTALLEDPATTERN |
Stalled Pattern |
Pending |
| CDLSTICKSANDWICH |
Stick Sandwich |
Pending |
| CDLTAKURI |
Takuri (Dragonfly Doji with very long lower shadow) |
Pending |
| CDLTASUKIGAP |
Tasuki Gap |
Pending |
| CDLTHRUSTING |
Thrusting Pattern |
Pending |
| CDLTRISTAR |
Tristar Pattern |
Pending |
| CDLUNIQUE3RIVER |
Unique 3 River |
Pending |
| CDLUPSIDEGAP2CROWS |
Upside Gap Two Crows |
Pending |
| CDLXSIDEGAP3METHODS |
Upside/Downside Gap Three Methods |
Pending |
Statistic Functions
| Function |
Description |
Status |
| BETA |
Beta |
Pending |
| CORREL |
Pearson's Correlation Coefficient (r) |
Pending |
| LINEARREG |
Linear Regression |
Pending |
| LINEARREG_ANGLE |
Linear Regression Angle |
Pending |
| LINEARREG_INTERCEPT |
Linear Regression Intercept |
Pending |
| LINEARREG_SLOPE |
Linear Regression Slope |
Pending |
| STDDEV |
Standard Deviation |
Pending |
| TSF |
Time Series Forecast |
Pending |
| VAR |
Variance |
Pending |
Math Transform Functions
| Function |
Description |
Status |
| ACOS |
Vector Trigonometric ACos |
Pending |
| ASIN |
Vector Trigonometric ASin |
Pending |
| ATAN |
Vector Trigonometric ATan |
Pending |
| CEIL |
Vector Ceil |
Pending |
| COS |
Vector Trigonometric Cos |
Pending |
| COSH |
Vector Trigonometric Cosh |
Pending |
| EXP |
Vector Arithmetic Exp |
Pending |
| FLOOR |
Vector Floor |
Pending |
| LN |
Vector Log Natural |
Pending |
| LOG10 |
Vector Log10 |
Pending |
| SIN |
Vector Trigonometric Sin |
Pending |
| SINH |
Vector Trigonometric Sinh |
Pending |
| SQRT |
Vector Square Root |
Pending |
| TAN |
Vector Trigonometric Tan |
Pending |
| TANH |
Vector Trigonometric Tanh |
Pending |
Math Operator Functions
| Function |
Description |
Status |
| ADD |
Vector Arithmetic Add |
Pending |
| DIV |
Vector Arithmetic Div |
Pending |
| MAX |
Highest value over a specified period |
Pending |
| MAXINDEX |
Index of the highest value over a specified period |
Pending |
| MIN |
Lowest value over a specified period |
Pending |
| MININDEX |
Index of the lowest value over a specified period |
Pending |
| MINMAX |
Lowest and highest values over a specified period |
Pending |
| MINMAXINDEX |
Indexes of the lowest and highest values over a specified period |
Pending |
| MULT |
Vector Arithmetic Mult |
Pending |
| SUB |
Vector Arithmetic Subtraction |
Pending |
| SUM |
Summation |
Pending |
Example
use rand;
use rusty_talib;
use rusty_talib::ErrorMsg;
use polars::prelude::*;
fn main(){
let random_data: [i32; 7] = [23, 25, 12, 28, 33, 31, 35];
let close = Series::new("data",random_data);
let ma = rusty_talib::moving_average(&close,Some(3));
match res {
Ok(ma) => {
assert_eq!(ma.len(),close.len());
eprintln!("{:?}",ma);
},
Err(e) => {
if let Some(my_error) = e.downcast_ref::<ErrorMsg>() {
eprintln!("{}", my_error.0);
} else {
eprintln!("An error occurred");
}
}
}
}
use polars::prelude::*;
use rusty_talib;
let random_data: [i32; 7] = [23, 25, 12, 28, 33, 31, 35];
let close = Series::new("data",random_data);
let result = rusty_talib::moving_average(close,2);
eprintln!("{:?}",result);
Casting Series to Vec< f64>
use polars::export::arrow::array::{Float64Array};
let array = result.to_arrow(0);
let vec_values = match array.as_any().downcast_ref::<Float64Array>() {
Some(float_array) => {
let values: &[f64] = float_array.values();
let vec_values: Vec<f64> = values.to_vec();
vec_values
}
None => return Err("Failed to downcast to Float64Array".into()),
};
eprintln!("{:?}",vec_values);
Casting Series to single data
for i in 1..result.len() {
let elem :f64= src.get(i)?.try_extract::<f64>()?;
eprintln!("{:?}",elem);
}
License
This project is licensed under the MIT License.
Feel free to customize the content further as needed.