python - 如何在单个数据框中的多个代码上运行 TA-Lib
问题描述
我有一个名为idf的 pandas 数据框,其数据从 21 年 4 月 19 日到 21 年 5 月 19 日,用于 4675 个股票代码,包括以下列:符号、日期、开盘价、最高价、最低价、收盘价、成交量
|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 的 EMA,以及 3 和 14 的 RSI。
上传文件并创建名为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 循环。
非常感谢任何帮助。
解决方案
rsi = lambda x: talib.RSI(idf.loc[x.index, "close"], 14)
idf['rsi(14)'] = idf.groupby(['symbol']).apply(rsi).reset_index(0,drop=True)
推荐阅读
- python - tkinter中if语句的变量问题
- javascript - JavaScript:根据订单数量计算 3 个包裹尺寸
- javascript - Fastify REST-API JWT-Auth 插件未作为 preHandler 触发
- xtensor - 如何用复杂的数据类型填充 xtensor 数组
- javascript - Vanilla javascript Fetch API form数据上传
- hl7-fhir - 如何将免疫添加到 FHIR 事务包?
- java - 在 nextInt() 的第二步修复 java.util.InputMismatchException
- ios - 将数据从应用程序发送到 firebase-functions 到 PayPal 时,未创建通知电子邮件
- kubernetes - 如何向其中的 pod 公开部署或 statefulset 的规模?
- google-apps-script - 使用 Google Apps 脚本时 OAuth 未授予访问权限