Skip to content

Standard Performance: Python

Competitors: ta (bukosabino/ta, pandas-based) and pandas_ta (twopirllc/pandas-ta), called via the tulip_rs_python PyO3 binding.

Indicator tulip_rs_python (ns) ta (ns) ta / Python pandas_ta (ns) pandas_ta / Python
ad 5,401 151,489 28× N/A
adaptivemsw 539,741 N/A N/A
adosc 7,567 N/A N/A
adx 32,009 22,060,903 689× 3,419,175 107×
adxr 20,068 N/A N/A
ao 9,280 190,411 21× 183,017 20×
apo 5,911 N/A 119,192 20×
aroon 30,395 10,191,677 335× 13,420,336 442×
aroonosc 25,630 N/A 13,575,299 530×
atr 7,272 11,625,476 1,599× 964,240 133×
avgprice 2,084 N/A 53,169 26×
bbands 12,619 237,701 19× 565,491 45×
bop 8,499 N/A 194,268 23×
ccfisher 234,869 N/A N/A
cci 86,063 26,324,891 306× 22,572,986 262×
chaikinmf 11,979 280,858 23× 330,369 28×
chandelierexit 31,140 N/A 1,762,397 57×
cmo 7,979 N/A 565,963 71×
cvi 6,291 N/A N/A
cybercycle 17,610 N/A N/A
dema 6,531 134,656 21× 289,972 44×
di 28,733 N/A 2,098,475 73×
dm 20,862 N/A 2,094,072 100×
donchianchannel 14,818 278,072 19× 409,784 28×
dpo 4,157 130,816 31× 131,310 32×
dx 17,015 N/A 3,423,874 201×
ef 7,711 N/A 163,507 21×
elderray 8,463 N/A 305,036 36×
ema 6,709 57,441 118,986 18×
emv 9,616 171,682 18× 352,868 37×
fisher 78,019 N/A 8,070,606 103×
fosc 36,129 N/A N/A
highpass 9,431 N/A N/A
hilberttransform 20,105 N/A N/A
hma 13,016 9,677,355 744× 613,655 47×
homodynediscriminator 224,841 N/A N/A
ichimoku 78,196 N/A 1,360,540 17×
instantaneoustrendline 224,627 N/A 341,484
kama 9,940 3,880,074 390× 10,768,945 1,083×
keltnerchannel 11,243 421,763 38× 1,264,789 112×
kvo 14,362 N/A 1,175,346 82×
linreg 9,600 N/A 17,895,624 1,864×
macd 9,875 195,331 20× 813,685 82×
mama 225,960 N/A 282,984
marketfi 8,051 N/A N/A
mass 9,766 211,520 22× 501,248 51×
max 6,597 N/A N/A
md 19,843 N/A 22,024,328 1,110×
medprice 1,945 N/A 39,616 20×
mfi 12,331 30,026,055 2,435× 194,601 16×
min 9,571 N/A N/A
mom 1,924 21,808 11× 31,220 16×
msw 135,420 N/A N/A
natr 21,425 N/A 1,076,430 50×
nvi 8,275 65,480,283 7,913× 722,015 87×
obv 5,246 129,246 25× 365,113 70×
pivotpoint 611 N/A 28,185 46×
ppo 8,083 239,302 30× 463,924 57×
psar 24,290 198,059,801 8,154× 5,107,869 210×
pvi 6,465 N/A 293,808 45×
qstick 3,501 N/A N/A
roc 5,019 98,770 20× 35,144
rocr 3,085 N/A 32,906 11×
roofingfilter 12,802 N/A N/A
rsi 6,982 488,581 70× 504,976 72×
sma 6,155 79,650 13× 341,130 55×
smaenvelope 8,693 N/A N/A
stddev 7,738 N/A 136,488 18×
stoch 27,252 298,106 11× 1,010,460 37×
stochrsi 28,725 914,237 32× 1,103,781 38×
supersmoother 13,817 N/A 43,343
supertrend 27,390 N/A 45,415,255 1,658×
tema 7,852 219,201 28× 413,882 53×
tr 8,472 N/A 767,689 91×
trendmode 224,556 N/A N/A
trima 6,610 N/A 94,623 14×
trix 17,067 303,990 18× 765,578 45×
trvi 6,390 N/A N/A
tsf 18,162 N/A 18,873,323 1,039×
typprice 1,728 N/A 45,169 26×
ultosc 29,060 1,636,872 56× 1,968,683 68×
vhf 22,478 N/A 496,186 22×
vidya 17,513 N/A 82,955,252 4,737×
volatility 19,051 N/A 137,721
vortex 17,479 923,406 53× 1,273,940 73×
vosc 7,617 N/A N/A
vwap 6,781 N/A 1,311,264 193×
vwma 6,869 N/A 178,764 26×
wad 4,441 N/A N/A
wcprice 2,284 N/A 64,007 28×
wilders 6,222 N/A 67,596 11×
willr 19,971 295,277 15× 341,566 17×
wma 6,914 3,221,847 466× 210,358 30×
zlema 6,984 N/A 224,080 32×
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×