🆕 Rebranded from RustTI to Centaur Technical Indicators!
Same functionality, new name and branding. Update references to RustTI in your projects to Centaur Technical Indicators. This change aligns with the Centaur Capital ecosystem. Where you'll find explanations, tutorials, and more.
Centaur Technical Indicators
A highly configurable and high-performance technical indicators library written in pure Rust.
Designed for flexibility, speed, and advanced use cases in quantitative and algorithmic trading.
Part of the Centaur Labs ecosystem — visit https://centaurlabs.pages.dev/ for more.
Looking for the Python bindings? See: CentaurTechnicalIndicators-Python
Looking for the WASM bindings? See: CentaurTechnicalIndicators-JS
🚀 Getting Started (Tutorial)
The fastest way to get up and running with Centaur Technical Indicators.
1. Add Centaur Technical Indicators to your project:
cargo add centaur_technical_indicators
Or, manually in your Cargo.toml:
= "1.0.0"
2. Calculate your first indicator:
use centaur_technical_indicators;
let prices = vec!;
let ma = moving_average;
println!;
Expected output:
Simple Moving Average: 100.352
3. Explore more tutorials
- Getting started tutorial
- Choosing the right model
- Building your first strategy
- Backtesting tutorial
- Visualization tutorial
🛠️ How-To Guides
Task-oriented guides for common problems and advanced scenarios.
- Load CSV Price Data: Parse OHLC prices from a file and calculate RSI
- When to use a bulk vs single module: Understand when to use bulk functions or single functions
- Choosing the right constant model type: Programatically determine the best
ConstantModelType - Choosing the right deviation model: Programatically determine the best deviation model
- Choosing the right period: Programatically determine the best period
- How to use the Personalised Moving Average: Programatically determine the alpha of the moving average
- How to use the McGinley dynamic variation of functions: Quick guide on how to use the McGinley Dynamic functions
(Contributions welcome! Submit your favorite how-to guide as a PR.)
📚 Reference
For complete API details, see docs.rs/centaur_technical_indicators.
Example
A reference of how to call each function can be found
Clone and run:
cargo build
cargo run --example reference
Library Structure
- Modules based on their analysis areas (
moving_average,momentum_indicators,strength_indicators...) bulk&singlesubmodulesbulk: Compute indicator over rolling periods, returns a vector.single: Compute indicator for the entire vector, returns a single value.
- Types used to personalise the technical indicators (
MovingAverageType,DeviationModel,Position...)
🧠 Explanation & Design
Why Centaur Technical Indicators?
- Performance: Pure Rust implementation for maximal speed, safety, and zero dependencies.
- Configurability: Most indicators are highly customizable—tweak calculation methods, periods, or even use medians instead of means.
- Breadth: Covers a wide range of technical indicators out of the box.
- Advanced Use: Designed for users who understand technical analysis and want deep control.
Note: Some features may require background in technical analysis. See Investopedia: Technical Analysis for a primer.
📈 Available Indicators
All indicators are grouped and split into modules based on their analysis area.
Each module has bulk (vector output) and single (scalar output) submodules.
Standard Indicators
- Simple, Smoothed, Exponential Moving Average, Bollinger Bands, MACD, RSI
Basic Indicators
- Absolute Deviation, Log, Mean, Median, Mode, Std. Deviation, Variance, Max/Min
Candle Indicators
- Ichimoku Cloud, Moving Constant Bands/Envelopes, Donchian Channels, Keltner, Supertrend
Chart Trends
- Trend break down, overall trends, peak/valley trends
Correlation Indicators
- Correlate asset prices
Momentum Indicators
- Chaikin Oscillator, CCI, MACD, Money Flow Index, On Balance Volume, ROC, RSI, Williams %R
Moving Averages
- McGinley Dynamic, Moving Average
Other Indicators
- ROI, True Range, ATR, Internal Bar Strength
Strength Indicators
- Accumulation/Distribution, PVI, NVI, RVI
Trend Indicators
- Aroon (Up/Down/Oscillator), Parabolic, DM, Volume-Price Trend, TSI
Volatility Indicators
- Ulcer Index, Volatility System
📊 Performance Benchmarks
Want to know how fast Centaur Technical Indicators runs in real-world scenarios?
We provide detailed, reproducible benchmarks using realistic OHLCV data and a variety of indicators.
Momentum Indicators
| Function | Time per Operation |
|---|---|
relative_strength_index |
573.86 µs |
stochastic_oscillator |
784.13 µs |
slow_stochastic |
28.866 µs |
slowest_stochastic |
28.866 µs |
williams_percent_r |
76.256 µs |
money_flow_index |
150.69 µs |
rate_of_change |
5.3984 µs |
on_balance_volume |
17.405 µs |
commodity_channel_index |
103.19 µs |
mcginley_dynamic_commodity_channel_index |
66.044 µs |
macd_line |
51.482 µs |
mcginley_dynamic_macd_line |
44.461 µs |
chaikin_oscillator |
258.33 µs |
percentage_price_oscillator |
58.060 µs |
chande_momentum_oscillator |
370.14 µs |
Candle Indicators
| Function | Time per Operation |
|---|---|
moving_constant_envelopes |
37.572 µs |
mcginley_dynamic_envelopes |
39.264 µs |
moving_constant_bands |
119.70 µs |
mcginley_dynamic_bands |
43.219 µs |
ichimoku_cloud |
192.93 µs |
donchian_channel |
28.481 µs |
keltner_channel |
318.05 µs |
supertrend |
148.80 µs |
Trend Indicators
| Function | Time per Operation |
|---|---|
aroon_up |
16.531 µs |
aroon_down |
16.592 µs |
aroon_indicator |
66.468 µs |
parabolic_time_price_system |
43.939 µs |
directional_movement_system |
88.965 µs |
volume_price_trend |
6.2801 µs |
true_strength_indx |
705.25 µs |
Strength Indicators
| Function | Time per Operation |
|---|---|
accumulation_distribution |
8.2935 µs |
positive_volume_index |
7.6977 µs |
negative_volume_index |
7.6167 µs |
relative_vigor_index |
505.34 µs |
Other Indicators
| Function | Time per Operation |
|---|---|
return_on_investment |
40.962 µs |
true_range |
3.4663 µs |
average_true_range |
122.08 µs |
internal_bar_strength |
5.3943 µs |
positivity_indicator |
20.683 µs |
Basic Indicators
| Function | Time per Operation |
|---|---|
mean |
5.7432 µs |
median |
333.68 µs |
mode |
931.09 µs |
log |
20.335 µs |
log_difference |
42.223 µs |
variance |
20.921 µs |
standard_deviation |
24.095 µs |
absolute_deviation(Mean) |
26.991 µs |
absolute_deviation(Median) |
345.14 µs |
absoluite_deviation(Mode) |
956.83 µs |
Chart Trends
| Function | Time per Operation |
|---|---|
peaks |
93.094 µs |
valleys |
92.119 µs |
peak_trend |
188.14 µs |
valley_trend |
188.81 µs |
overall_trend |
10.337 µs |
break_down_trends |
14.655 ms |
Correlation Indicators
| Function | Time per Operation |
|---|---|
correlate_asset_prices |
231.14 µs |
Moving Average
| Function | Time per Operation |
|---|---|
moving_average(Simple) |
17.575 µs |
moving_average(Smoothed) |
76.601 µs |
moving_average(Exponential) |
78.505 µs |
mcginley_dynamic |
39.653 µs |
Volatility Indicators
| Function | Time per Operation |
|---|---|
ulcer_index |
65.959 µs |
volatility_system |
137.25 µs |
These results are from a Raspberry Pi 5 8GB, your machine will likely be faster!
👉 See all benchmarks and how to run your own
🤝 Contributing
Contributions, bug reports, and feature requests are welcome!
- Open an issue
- Submit a pull request
- See CONTRIBUTING.md for guidelines
💬 Community & Support
- Start a discussion
- File issues
- Add your project to the Showcase
📰 Release Notes
Latest (v1.0.0):
- Rebranded from RustTI to Centaur Technical Indicators
- Part of the Centaur Labs ecosystem
- All functionality remains the same
📄 License
MIT License. See LICENSE.