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,569 | 156,033 | 28× | N/A | — |
adaptivemsw |
535,763 | N/A | — | N/A | — |
adosc |
6,728 | N/A | — | N/A | — |
adx |
22,590 | 21,606,753 | 956× | 3,428,298 | 152× |
adxr |
22,790 | N/A | — | N/A | — |
ao |
7,447 | 190,379 | 26× | 216,503 | 29× |
apo |
6,895 | N/A | — | 140,628 | 20× |
aroon |
35,359 | 10,375,580 | 293× | 12,688,722 | 359× |
aroonosc |
33,183 | N/A | — | 12,740,991 | 384× |
atr |
14,109 | 11,399,702 | 808× | 951,786 | 67× |
avgprice |
2,636 | N/A | — | 53,567 | 20× |
bbands |
14,701 | 238,947 | 16× | 560,564 | 38× |
bop |
5,744 | N/A | — | 188,807 | 33× |
ccfisher |
229,102 | N/A | — | N/A | — |
cci |
92,655 | 25,820,513 | 279× | 21,958,927 | 237× |
chaikinmf |
10,280 | 278,854 | 27× | 330,750 | 32× |
chandelierexit |
33,477 | N/A | — | 1,742,165 | 52× |
cmo |
8,419 | N/A | — | 555,343 | 66× |
cvi |
7,546 | N/A | — | N/A | — |
cybercycle |
17,234 | N/A | — | N/A | — |
dema |
7,909 | 134,015 | 17× | 287,176 | 36× |
di |
42,729 | N/A | — | 2,103,241 | 49× |
dm |
25,510 | N/A | — | 2,110,216 | 83× |
donchianchannel |
16,867 | 273,115 | 16× | 407,091 | 24× |
dpo |
3,131 | 123,884 | 40× | 145,449 | 46× |
dx |
30,049 | N/A | — | 3,409,362 | 113× |
ef |
6,415 | N/A | — | 154,287 | 24× |
elderray |
8,632 | N/A | — | 301,713 | 35× |
ema |
6,102 | 57,546 | 9× | 118,919 | 19× |
emv |
7,837 | 177,739 | 23× | 332,298 | 42× |
fisher |
81,082 | N/A | — | 7,858,961 | 97× |
fosc |
8,695 | N/A | — | N/A | — |
highpass |
6,607 | N/A | — | N/A | — |
hilberttransform |
19,350 | N/A | — | N/A | — |
hma |
21,006 | 10,214,832 | 486× | 612,700 | 29× |
homodynediscriminator |
222,379 | N/A | — | N/A | — |
ichimoku |
94,234 | N/A | — | 1,372,975 | 15× |
instantaneoustrendline |
222,751 | N/A | — | 353,338 | 2× |
kama |
19,259 | 3,861,380 | 200× | 10,438,272 | 542× |
keltnerchannel |
21,388 | 419,723 | 20× | 1,272,791 | 60× |
kvo |
25,626 | N/A | — | 1,190,018 | 46× |
linreg |
23,899 | N/A | — | 17,282,202 | 723× |
macd |
24,354 | 197,360 | 8× | 807,553 | 33× |
mama |
224,069 | N/A | — | 272,353 | 1× |
marketfi |
3,782 | N/A | — | N/A | — |
mass |
7,631 | 210,661 | 28× | 489,066 | 64× |
max |
8,357 | N/A | — | N/A | — |
md |
39,453 | N/A | — | 21,716,513 | 550× |
medprice |
1,442 | N/A | — | 32,487 | 23× |
mfi |
10,607 | 29,735,632 | 2,803× | 196,923 | 19× |
min |
11,947 | N/A | — | N/A | — |
mom |
1,340 | 20,291 | 15× | 27,524 | 21× |
msw |
132,976 | N/A | — | N/A | — |
natr |
16,445 | N/A | — | 1,073,997 | 65× |
nvi |
9,326 | 65,947,770 | 7,072× | 727,939 | 78× |
obv |
4,284 | 117,140 | 27× | 363,789 | 85× |
pivotpoint |
611 | N/A | — | 28,185 | 46× |
ppo |
9,064 | 230,822 | 25× | 477,330 | 53× |
psar |
29,185 | 198,990,396 | 6,818× | 4,942,455 | 169× |
pvi |
5,478 | N/A | — | 287,276 | 52× |
qstick |
4,931 | N/A | — | N/A | — |
roc |
7,616 | 105,768 | 14× | 33,725 | 4× |
rocr |
9,183 | N/A | — | 45,996 | 5× |
roofingfilter |
14,929 | N/A | — | N/A | — |
rsi |
7,570 | 477,731 | 63× | 501,591 | 66× |
sma |
4,464 | 74,148 | 17× | 364,657 | 82× |
smaenvelope |
10,690 | N/A | — | N/A | — |
stddev |
8,117 | N/A | — | 140,291 | 17× |
stoch |
31,356 | 299,433 | 10× | 1,004,437 | 32× |
stochrsi |
39,761 | 908,818 | 23× | 1,097,324 | 28× |
supersmoother |
11,399 | N/A | — | 40,887 | 4× |
supertrend |
29,674 | N/A | — | 44,159,173 | 1,488× |
tema |
9,021 | 215,165 | 24× | 417,521 | 46× |
tr |
8,235 | N/A | — | 772,989 | 94× |
trendmode |
220,367 | N/A | — | N/A | — |
trima |
7,370 | N/A | — | 109,475 | 15× |
trix |
18,436 | 306,868 | 17× | 765,369 | 42× |
trvi |
6,503 | N/A | — | N/A | — |
tsf |
17,008 | N/A | — | 17,451,738 | 1,026× |
typprice |
1,716 | N/A | — | 45,300 | 26× |
ultosc |
21,893 | 1,627,760 | 74× | 1,946,821 | 89× |
vhf |
16,627 | N/A | — | 492,150 | 30× |
vidya |
21,137 | N/A | — | 82,683,140 | 3,912× |
volatility |
13,872 | N/A | — | 142,681 | 10× |
vortex |
20,742 | 921,461 | 44× | 1,269,357 | 61× |
vosc |
6,560 | N/A | — | N/A | — |
vwap |
8,371 | N/A | — | 1,353,970 | 162× |
vwma |
8,211 | N/A | — | 202,644 | 25× |
wad |
6,192 | N/A | — | N/A | — |
wcprice |
2,387 | N/A | — | 48,985 | 21× |
wilders |
6,083 | N/A | — | 65,969 | 11× |
willr |
21,444 | 298,910 | 14× | 339,446 | 16× |
wma |
6,091 | 3,373,454 | 554× | 212,001 | 35× |
zlema |
8,778 | N/A | — | 227,239 | 26× |
Notable results
tulip_rs_python beats ta on 35 of 35 compared indicators.
Median speedup: ~27×.
| Indicator | ta / Python |
|---|---|
nvi |
7072× |
psar |
6818× |
mfi |
2803× |
adx |
956× |
atr |
808× |
wma |
554× |
hma |
486× |
aroon |
293× |
cci |
279× |
kama |
200× |
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 |
|---|---|---|---|---|
macd |
6,331 | 24,354 | 197,360 | 8× |
ema |
4,784 | 6,102 | 57,546 | 9× |
stoch |
20,383 | 31,356 | 299,433 | 10× |
roc |
2,437 | 7,616 | 105,768 | 14× |
willr |
17,282 | 21,444 | 298,910 | 14× |
mom |
897 | 1,340 | 20,291 | 15× |
tulip_rs_python beats pandas_ta on 72 of 72 compared indicators.
Median speedup: ~42×.
| Indicator | pandas_ta / Python |
|---|---|
vidya |
3912× |
supertrend |
1488× |
tsf |
1026× |
linreg |
723× |
md |
550× |
kama |
542× |
aroonosc |
384× |
aroon |
359× |
cci |
237× |
psar |
169× |