Python 如何在单个数据帧中在多个ticker上运行TA Lib

Python 如何在单个数据帧中在多个ticker上运行TA Lib,python,pandas,ta-lib,Python,Pandas,Ta Lib,我有一个名为idf的熊猫数据框架,其中包含4675个股票的4/19/21至5/19/21数据,包括以下列:符号、日期、开放、高、低、关闭、音量 |index |symbol |date |open |high |low |close |vol |EMA8|EMA21|RSI3|RSI14| |-------|-------|-----------|-------|-------|-----------|-------|-------|----|----

我有一个名为idf的熊猫数据框架,其中包含4675个股票的4/19/21至5/19/21数据,包括以下列:符号、日期、开放、高、低、关闭、音量

|index  |symbol |date       |open   |high   |low        |close  |vol    |EMA8|EMA21|RSI3|RSI14|
|-------|-------|-----------|-------|-------|-----------|-------|-------|----|-----|----|-----|
|0      |AACG   |2021-04-19 |2.85   |3.03   |2.8000     |2.99   |173000 |    |     |    |     |
|1      |AACG   |2021-04-20 |2.93   |2.99   |2.7700     |2.85   |73700  |    |     |    |     |
|2      |AACG   |2021-04-21 |2.82   |2.95   |2.7500     |2.76   |93200  |    |     |    |     |
|3      |AACG   |2021-04-22 |2.76   |2.95   |2.7200     |2.75   |56500  |    |     |    |     |
|4      |AACG   |2021-04-23 |2.75   |2.88   |2.7000     |2.84   |277700 |    |     |    |     |
|...    |...    |...        |...    |...    |...        |...    |...    |    |     |    |     |
|101873 |ZYXI   |2021-05-13 |13.94  |14.13  |13.2718    |13.48  |413200 |    |     |    |     |
|101874 |ZYXI   |2021-05-14 |13.61  |14.01  |13.2200    |13.87  |225200 |    |     |    |     |
|101875 |ZYXI   |2021-05-17 |13.72  |14.05  |13.5500    |13.82  |183600 |    |     |    |     |
|101876 |ZYXI   |2021-05-18 |13.97  |14.63  |13.8300    |14.41  |232200 |    |     |    |     |
|101877 |ZYXI   |2021-05-19 |14.10  |14.26  |13.7700    |14.25  |165600 |    |     |    |     |
我想使用ta lib计算几个技术指标,如长度为8和21的均线,以及长度为3和14的相对标准偏差

上传文件并创建名为idf的数据帧后,我一直在使用以下代码执行此操作:

ind = pd.DataFrame()
tind = pd.DataFrame()
for ticker in idf['symbol'].unique():
    tind['rsi3'] = ta.RSI(idf.loc[idf['symbol'] == ticker, 'close'], 3).round(2)    
    tind['rsi14'] = ta.RSI(idf.loc[idf['symbol'] == ticker, 'close'], 14).round(2)    
    tind['ema8'] = ta.EMA(idf.loc[idf['symbol'] == ticker, 'close'], 8).round(2)    
    tind['ema21'] = ta.EMA(idf.loc[idf['symbol'] == ticker, 'close'], 21).round(2)    
    ind = ind.append(tind)
    tind = tind.iloc[0:0]

idf = pd.merge(idf, ind, left_index=True, right_index=True)
这是最有效的方法吗

如果没有,计算指标值并将这些计算出的指标值放入数据框idf的最简单、最快速的方法是什么

如果可能,最好避免for循环


非常感谢您的帮助。

这种方式对您的用例来说不够快吗?如果是这样,您可能需要更好地描述您的用例。如果问题是:TA Lib能在一次传球数据中计算出两个不同时间段的EMA指标吗?不,它不能。这是否可以由您自己实施对但您最好在C/C++中实现这一点,并创建python包装器。Bcs TA库是用C编写的,您只需调用包装器即可。因此,不能保证自己的智能EMA实现会比TA-LIB更快,如果您的性能问题可以通过保存计算的指示符状态并在新数据到达时恢复计算,您可以考虑For,抱歉延迟响应,因为我没有收到任何关于您的评论的通知。我有4675个股票,可能会有更多的股票。每天运行for循环和计算中的一组指标可能非常耗时。话虽如此,我必须探索TA Lib RT fork,因为我没有考虑保存计算指标的状态。我将探索TA Lib RT,如果我有任何进一步的问题,请与您联系。谢谢