Skip to content

Standard Performance

Single asset, averaged across 4 option sets. Ratios show how many times slower the competitor is relative to Rust — higher means Rust wins by more.


Rust

Full comparison tables (vs C / TA-Lib, RustTa, Kand): Standard Performance →

Notable results

Rust beats C Tulip on 65 of 71 indicators (92%). Rust beats TA-Lib on 36 of 39 indicators (92%).

Category Indicator Speedup vs C Speedup vs TA-Lib
Largest wins vs C Tulip msw 11.27x ---
Largest wins vs C Tulip min 8.07x ---
Largest wins vs C Tulip max 5.87x ---
Largest wins vs C Tulip pvi 4.49x ---
Largest wins vs C Tulip donchianchannel 4.38x ---
Largest wins vs TA-Lib hilberttransform --- 14.25x
Largest wins vs TA-Lib macd --- 5.67x
Largest wins vs TA-Lib atr --- 5.65x
Largest wins vs TA-Lib natr --- 5.50x
Largest wins vs TA-Lib tema --- 4.99x
Rust slower than C Tulip di 0.62x ---
Rust slower than C Tulip dm 0.70x ---
Rust slower than C Tulip dx 0.75x ---
Rust slower than C Tulip ao 0.90x ---
Rust slower than C Tulip cci 0.95x ---
Rust slower than C Tulip obv 0.99x ---
Rust slower than TA-Lib wma --- 0.79x
Rust slower than TA-Lib homodynediscriminator --- 0.94x
Rust slower than TA-Lib psar --- 0.95x
Notable results

Rust beats RustTa on 18 of 19 compared indicators. Rust beats Kand on 32 of 33 compared indicators.

Category Indicator Speedup vs RustTa Speedup vs Kand
Largest wins vs RustTa ef 6.78x ---
Largest wins vs RustTa tr 5.22x ---
Largest wins vs RustTa min 3.62x ---
Largest wins vs RustTa mfi 2.98x 36.10x
Largest wins vs RustTa max 2.73x ---
Largest wins vs Kand mfi 2.98x 36.10x
Largest wins vs Kand stoch 2.25x 33.22x
Largest wins vs Kand willr --- 21.24x
Largest wins vs Kand aroon --- 19.97x
Largest wins vs Kand aroonosc --- 19.24x
RustTa faster cci 0.95x 0.91x
Kand faster cci 0.95x 0.91x

Python

Full comparison table (tulip_rs_python vs ta): Standard Performance →

Notable results

tulip_rs_python beats ta on 35 of 35 compared indicators. Median speedup: ~28×.

Indicator ta / Python
psar 8154×
nvi 7913×
mfi 2435×
atr 1599×
hma 744×
adx 689×
wma 466×
kama 390×
aroon 335×
cci 306×

The following indicators show the smallest gap, likely because ta uses a compiled numpy/pandas path rather than a pure-Python loop:

Indicator Rust native (ns) tulip_rs_python (ns) ta (ns) ta / Python
ema 4,790 6,709 57,441
stoch 21,788 27,252 298,106 11×
mom 897 1,924 21,808 11×
sma 2,445 6,155 79,650 13×
willr 16,465 19,971 295,277 15×
trix 6,197 17,067 303,990 18×

tulip_rs_python beats pandas_ta on 72 of 72 compared indicators. Median speedup: ~45×.

Indicator pandas_ta / Python
vidya 4737×
linreg 1864×
supertrend 1658×
md 1110×
kama 1083×
tsf 1039×
aroonosc 530×
aroon 442×
cci 262×
psar 210×

Node

Full comparison table (tulip_rs_node vs technicalindicators / indicatorts): Standard Performance →

Notable results

tulip_rs_node beats every JS competitor on 23 compared indicators against technicalindicators and 36 compared indicators against indicatorts. Median speedup: 57.33x vs technicalindicators Median speedup: 7.00x vs indicatorts

Largest wins vs technicalindicators (pure JS, loop-heavy implementations):

Indicator Speedup vs technicalindicators
bbands 411.52x
wma 380.84x
stochrsi 164.30x
mfi 152.41x
ao 124.52x
rsi 119.51x
roc 89.40x
adx 85.21x
willr 75.73x
trix 73.87x

Largest wins vs indicatorts (pure TypeScript):

Indicator Speedup vs indicatorts
max 48.78x
willr 43.02x
chandelierexit 39.41x
donchianchannel 38.45x
min 35.59x
tr 35.01x
atr 28.53x
aroon 24.86x
mfi 20.79x
bbands 20.49x

nAPI boundary overhead — the gap between Rust native and tulip_rs_node columns reflects the fixed per-call cost of the nAPI boundary (argument marshalling, Float64Array handoff), roughly 4–6 µs for the fastest-running indicators:

Indicator Rust native (ns) tulip_rs_node (ns) Overhead
avgprice 1,433 5,511 ~3.8×
tr 1,501 7,093 ~4.7×
wcprice 1,062 5,446 ~5.1×
typprice 1,036 5,915 ~5.7×
mom 897 5,173 ~5.8×
medprice 872 5,538 ~6.4×