OHLCV technical-indicator computation across libraries ·
2026-06-12T01:15:04.096965+00:00 · AMD EPYC 7763 64-Core Processor · Python 3.12.13
Lower time is better; Perf shows the slowest candidate as
1.00× and each faster candidate as {slowest ÷ this}×.
pandasstock_pandaspolarstalibvolas
Append one new bar → updated indicator
A new bar arrives. volas / stock_pandas refresh their cached column incrementally (O(lookback)); the libraries with no indicator cache (pandas / polars / talib) must recompute the series (O(n)). Every candidate is measured with the same round count so the rounds column is comparable.
The data-handling plumbing a live system runs around every indicator call — frame construction, column access, row slicing, boolean masking, column assignment, copy — timed against pandas / polars. Not indicator math; the surrounding core APIs.
construct
Candidate
Mean
Median
OPS
rounds
Perf
volas
6.09 µs
5.93 µs
164,099
13362
20.63×
polars
39.39 µs
38.39 µs
25,387
8301
3.19×
pandas
126.76 µs
122.37 µs
7,889
2814
1.00×
copy
Candidate
Mean
Median
OPS
rounds
Perf
volas
454.4 ns
441.0 ns
2,200,859
74047
173.36×
polars
799.1 ns
782.0 ns
1,251,416
77737
97.77×
pandas
79.78 µs
76.45 µs
12,535
2756
1.00×
getcol
Candidate
Mean
Median
OPS
rounds
Perf
volas
538.0 ns
531.0 ns
1,858,822
116605
23.08×
polars
1.06 µs
1.04 µs
945,597
32898
11.76×
pandas
12.70 µs
12.25 µs
78,728
5195
1.00×
mask
Candidate
Mean
Median
OPS
rounds
Perf
volas
10.72 µs
10.51 µs
93,291
20218
17.38×
polars
167.05 µs
162.53 µs
5,986
2101
1.12×
pandas
189.54 µs
182.65 µs
5,276
1662
1.00×
setitem
Candidate
Mean
Median
OPS
rounds
Perf
volas
2.08 µs
2.05 µs
479,626
50590
14.94×
pandas
19.49 µs
18.54 µs
51,308
2928
1.65×
polars
31.95 µs
30.68 µs
31,301
3474
1.00×
slice
Candidate
Mean
Median
OPS
rounds
Perf
polars
3.24 µs
3.17 µs
308,257
18375
3.37×
volas
3.42 µs
3.34 µs
292,455
38688
3.20×
pandas
11.09 µs
10.68 µs
90,173
11544
1.00×
Batch indicator computation
Compute the indicator over the whole series, across every library.
atr:14
Candidate
Mean
Median
OPS
rounds
Perf
volas
5.10 µs
5.02 µs
195,929
28891
233.57×
talib
17.92 µs
17.62 µs
55,798
24591
66.52×
stock_pandas
221.41 µs
214.88 µs
4,517
3140
5.46×
polars
238.49 µs
234.66 µs
4,193
1612
5.00×
pandas
1.20 ms
1.17 ms
834
544
1.00×
bbw
Candidate
Mean
Median
OPS
rounds
Perf
volas
17.04 µs
16.80 µs
58,673
29795
21.27×
talib
21.24 µs
20.83 µs
47,088
12915
17.16×
polars
173.37 µs
165.20 µs
5,768
2357
2.16×
stock_pandas
256.27 µs
253.65 µs
3,902
2937
1.41×
pandas
374.50 µs
357.46 µs
2,670
1424
1.00×
boll.upper
Candidate
Mean
Median
OPS
rounds
Perf
volas
16.69 µs
16.45 µs
59,931
22206
21.06×
talib
18.19 µs
17.92 µs
54,978
22988
19.33×
polars
195.52 µs
193.34 µs
5,114
2080
1.79×
stock_pandas
257.00 µs
252.94 µs
3,891
2973
1.37×
pandas
354.77 µs
346.43 µs
2,819
1371
1.00×
ema:12
Candidate
Mean
Median
OPS
rounds
Perf
volas
5.70 µs
5.61 µs
175,340
42277
18.46×
talib
9.88 µs
9.71 µs
101,167
30127
10.67×
polars
43.83 µs
42.18 µs
22,818
5102
2.46×
stock_pandas
85.84 µs
82.98 µs
11,649
5476
1.25×
pandas
117.49 µs
103.56 µs
8,511
2841
1.00×
hhv:10
Candidate
Mean
Median
OPS
rounds
Perf
volas
4.10 µs
4.04 µs
243,709
30367
31.04×
talib
8.31 µs
8.17 µs
120,366
22044
15.35×
polars
55.98 µs
48.32 µs
17,864
4526
2.59×
stock_pandas
110.33 µs
106.28 µs
9,064
3699
1.18×
pandas
132.77 µs
125.32 µs
7,532
2546
1.00×
llv:10
Candidate
Mean
Median
OPS
rounds
Perf
volas
4.95 µs
4.87 µs
202,155
23720
26.82×
talib
8.02 µs
7.87 µs
124,662
23026
16.58×
polars
50.08 µs
48.26 µs
19,968
3837
2.71×
stock_pandas
109.09 µs
105.52 µs
9,167
3414
1.24×
pandas
135.36 µs
130.59 µs
7,388
2506
1.00×
ma:20
Candidate
Mean
Median
OPS
rounds
Perf
talib
7.93 µs
7.80 µs
126,166
29400
15.83×
volas
16.45 µs
16.25 µs
60,790
21134
7.60×
polars
49.47 µs
47.02 µs
20,215
4050
2.63×
stock_pandas
122.61 µs
118.09 µs
8,156
4583
1.05×
pandas
128.11 µs
123.55 µs
7,806
2435
1.00×
macd
Candidate
Mean
Median
OPS
rounds
Perf
volas
8.16 µs
8.23 µs
122,538
40592
28.21×
talib
23.97 µs
23.54 µs
41,719
14368
9.86×
stock_pandas
99.37 µs
95.98 µs
10,064
5339
2.42×
polars
142.04 µs
137.14 µs
7,040
2544
1.69×
pandas
239.48 µs
232.05 µs
4,176
1940
1.00×
macd.signal
Candidate
Mean
Median
OPS
rounds
Perf
volas
12.45 µs
12.26 µs
80,337
31418
25.27×
talib
24.05 µs
23.75 µs
41,572
15193
13.05×
stock_pandas
111.21 µs
107.59 µs
8,992
4433
2.88×
polars
174.31 µs
168.80 µs
5,737
2219
1.84×
pandas
320.92 µs
309.90 µs
3,116
1516
1.00×
rsi:14
Candidate
Mean
Median
OPS
rounds
Perf
volas
14.69 µs
14.54 µs
68,091
32640
77.39×
talib
16.67 µs
16.47 µs
59,984
23765
68.31×
stock_pandas
109.49 µs
105.90 µs
9,133
5170
10.62×
polars
418.32 µs
416.64 µs
2,390
1143
2.70×
pandas
1.13 ms
1.13 ms
881
616
1.00×
Full coverage — volas vs TA-Lib
Every indicator both volas and TA-Lib implement (the set the parity suite aligns), one row per indicator. The default volas vs TA-Lib column is the Tencent fixture; optional generated lengths and cached append refresh appear as additional ratio columns. Values > 1.00× mean volas is faster.
volas beats TA-Lib on 136 / 158 covered indicators by the default ratio (0 exactly even, 22 slower).