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 | 9× | 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 | 2× |
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 | 1× |
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 | 7× |
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 | 3× |
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 | 7× |
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 | 9× |
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× |