生生不息

生生不息

AI使用TA-Lib计算RSI指标

2025-06-23
AI使用TA-Lib计算RSI指标

提示词

一个以日期为index的DataFrame,包含一列收盘价,现在需要用TA-Lib计算其RSI指标,并进行可视化。

答案

import pandas as pd
import talib
import matplotlib.pyplot as plt
# import yfinance as yf

# 安装必要库(若未安装)
# !pip install TA-Lib yfinance matplotlib

# 加载示例数据(以苹果公司2024年数据为例)
# df = yf.download("AAPL", start="2024-01-01", end="2025-06-23")
# df = df[['Close']].rename(columns={'Close': 'close'})

# 计算14日RSI(默认参数)
rsi_period = 14
df['rsi'] = talib.RSI(df['收盘'], timeperiod=rsi_period)

# 过滤初始无效数据(前14天无法计算RSI)
valid_data = df.dropna()
plt.figure(figsize=(16, 10))
gs = plt.GridSpec(2, 1, height_ratios=[3, 1])

# 主图:价格与RSI信号线
ax1 = plt.subplot(gs[0])
ax1.plot(valid_data['收盘'], label='Close Price', color='#1f77b4', linewidth=1.5)
ax1.set_title(f'AAPL Price & RSI ({rsi_period}-day)', fontsize=14)
ax1.legend(loc='upper left')
ax1.grid(True, alpha=0.3)

# RSI副图
ax2 = plt.subplot(gs[1], sharex=ax1)
ax2.plot(valid_data['rsi'], label='RSI', color='purple', linewidth=1.2)

# 超买超卖区域填充
ax2.fill_between(valid_data.index, 70, valid_data['rsi'], 
                where=(valid_data['rsi'] >=70), 
                facecolor='red', alpha=0.2, interpolate=True)
ax2.fill_between(valid_data.index, 30, valid_data['rsi'], 
                where=(valid_data['rsi'] <=30), 
                facecolor='green', alpha=0.2, interpolate=True)

# 水平参考线
ax2.axhline(70, color='darkred', linestyle='--', alpha=0.7)
ax2.axhline(30, color='darkgreen', linestyle='--', alpha=0.7)

# 坐标轴优化
ax2.set_ylim(0, 100)
ax2.set_yticks([30, 50, 70])
ax2.grid(True, alpha=0.3)
ax2.set_ylabel('RSI', fontsize=10)

plt.tight_layout()
plt.show()

我增加了自己的数据和修改了表格列名的代码,其余都是ai写的。

图像: